网站首页 >> 交易开拓者程序化平台介绍 >> 第六章 TB公式应用 >> 一、TB公式技术分析类

2、输出函数

TB的公式应用提供PlotNumericPlotBoolPlotString三个函数在图表上输出数值、布尔值以及字符串,以满足交易者在做技术分析时的各种个性化的输出。

案例一:分析系统提供的MA移动平均线(公式代码如图9-2所示)

图9-2.             MA移动平均线公式代码

MA移动平均线公式定义了4个参数,存储不同的周期值,分别赋默认值5,10,20,30。公式的代码段只有4条输出不同周期均线的语句,使用了PlotNumeric函数进行数值的输出,AverageFC函数求出不同周期的平均值。公式执行效果如图9-3所示:

图9-3.             图表加载MA公式的显示效果

1)         PlotNumeric

PlotNumeric-----在当前Bar输出一个数值;

语法:

PlotNumeric(String Name,Numeric Number,Numeric Locator=0,Integer Color=-1,Integer BarsBack=0)

参数说明:

n  Name 输出值的名称字符串,可以为中、英文、数字或者其它字符;

n  Number 输出的数值;

n  Locator 输出值的定位点,默认值为0,表示输出单点,否则输出连接两个值线段;

n  Color 输出值的显示颜色,默认值为-1,表示使用属性设置框中的颜色;

n  BarsBack 从当前Bar向前回溯的Bar数,默认值为0,表示当前Bar

1PlotNumeric ("Close",Close);

输出Close的值,如图9-4

图9-4.             输出close效果

2PlotNumeric ("OpenToClose",Open,Close);

输出开盘价与收盘价的连线。(需要在公式属性的输出线形选择柱状图),图9-5

图9-5.             输出开盘价与收盘价连线效果

公式属性设置如下,如图9-6

图9-6.             输出线型选择

3PlotNumeric ("AvgValue",average(close,5),0,Blue);

输出一条蓝色的以收盘价计算的五日平均线,如图9-7

图9-7.             显示蓝色5日均线

注意:当后面的参数都使用默认值的情况下,可省略不写,如例1。但如果后面还有其它参数要指明,而只是中间某一个或者多个参数需要默认值的话,则中间参数不可省略,需将默认值一一填写,如例3

2)         PlotBool

PlotBool-----在当前Bar输出一个布尔值。在图表上的表现为指定位置显示圆脸图标,布尔值为真显示一个绿的笑脸图标,布尔值为假则显示一个红色的哭脸图标。

语法:

PlotBool(String Name,Bool bPlot,Numeric Locator=0,Integer Color=-1,Integer BarsBack=0)

参数说明:

n  Name 输出值的名称,不区分大小写;

n  bPlot 输出的布尔值;

n  Locator 输出值的定位点;

n  Color 输出值的显示颜色,默认值为-1,表示使用属性设置框中的颜色

n  BarsBack 从当前Bar向前回溯的Bar数,默认值为0,表示当前Bar

PlotBool ("con",con,High);

Bar的最高价位置输出条件con的布尔值,图9-8

图9-8.             Bar的最高价位置输出con的布尔值显示效果

3)         PlotString

PlotString-----在当前Bar输出一个字符串。

语法:

PlotString(String Name,String str,Numeric Locator=0,Integer Color=-1,Integer BarsBack=0)

参数说明:

n  Name 输出值的名称,不区分大小写;

n  str 输出的字符串;

n  Locator 输出值的定位点;

n  Color 输出值的显示颜色,默认值为-1,表示使用属性设置框中的颜色;

n  BarsBack 从当前Bar向前回溯的Bar数,默认值为0,表示当前Bar

PlotString ("Bear Market","Bear Bear",High,Blue);

Bar的最高价位置输出一个蓝色的字符串Bear Bear,图9-9

图9-9.             Bar的最高价位置输出一个蓝色的字符串Bear Bear显示效果

【注意事项】

l  输出数据的名称

函数PlotNumeric PlotBool 以及PlotString的第一个参数都是字符串,该字符串的意义是给将要输出的值命名,支持中、英文字符。在同一个公式应用里,同一类型的输出值需要分别命名,不能重复使用相同的名称。

l  输出颜色的选择

PlotNumeric PlotBool PlotString这三个输出函数,从右向左数第二个参数均为输出颜色的选项,可以填写交易开拓者系统函数里的任一颜色函数,也可以使用默认值,然后在公式属性里对颜色进行自定义设置。

系统函数里包括以下颜色函数:

black 黑色、blue 蓝色、cyan 青色、darkbrown 深棕、darkcyan 深青、darkgray 深灰、darkgreen深绿、dakmagenta 深紫、darkred 深红、defaultcolour默认颜色、green 绿色、lightgray浅灰、magenta 紫红、red 红色、rgb 自定义颜色、white 白色、yellow 黄色

l  数据输出与图表中Bar的数量同齐

图表中每个Bar均有数值、布尔或字符串的输出。数值的输出涉及到计算,有时在某些Bar上可能为无效值。如:PlotNumeric(avgvalue,averageFC(close,5));该公式在图表数据的前4Bar上都是无效值,第5Bar之后每个Bar才会有计算得出的有效平均数值的输出。

注意:在图表整个Bar数据序列上,可能因为计算、条件等因素,从而在Bar数据中输出无效值,遇到此类情况可能会导致数据输出在图表上的整体图型很奇怪。所以,输出数据之前可在公式中加上判断语句,保证在非无效值的情况下才输出数据。

例:if(aaa != InvalidNumeric) PlotNumeric("tt",aaa,0,red);

l  条件Bar下的数据输出

在指定条件下输出数据,不符合条件的Bar上则不会有任何输出。

例:判断无效值则不输出

if(aaa != InvalidNumeric) PlotNumeric("tt",aaa,0,red);

例:对某种K线型态的标识或者突破点的标注。

    if(open>close) PlotNumeric("tt",high,low,yellow);

指定条件只有为下跌收盘的Bar上方可输出一条黄色的高低点柱状连线。图9-10

图9-10.          收盘下跌时输出黄色高低点柱状连线

l  偏移NBar的输出

三个输出函数最后一个参数均是BarsBack,此参数的意义是将值回溯NBar输出。需要注意的是,若此N值为正数,则是将输出值向左移NBar输出,若N值为负数,则是将输出值向右偏移NBar输出。

例:比较两种不同偏移的输出结果,图9-11

if(open > close) PlotNumeric("tt",high,low,yellow,2);

if(open > close) PlotNumeric("tt",high,low,yellow,-1);

图9-11.          不同偏移的显示效果

注意:第一种写法在历史分析中相当于使用了未来数据,请慎重考虑此写法是否符合实际需求,此处仅作为比较偏移取值不同的显示效果示例。实时行情中,每一次的运算只计算最新Bar上的Tick,所以当最新K线数据满足条件后,只有再手工刷新图表,才会对历史K线上按条件进行画线。

第二种写法在最新K线出来之前,无法在图表上画出前一个Bar 所输出的数据线。因为交易开拓者的图表上,画线的前提条件是有Bar数据。

 

4)         UnPlot

UnPlot-----删除输出函数曾经输出的值。

语法:

Unplot(String Name,Integer BarsBack =0)

参数说明:

n  Name 要删除输出值的名称,不区分大小写;

n  BarsBack 从当前Bar向前回溯的Bar数,默认值为0,表示删除当前Bar曾输出的值。

例:

Params

         Numeric length1(10);

         Numeric length2(20);

Vars

         Numeric ma1;

         Numeric ma2;

         Numeric i;

Begin

MA1 = AverageFC(Close,Length1); 

         MA2 = AverageFC(Close,Length2);

         PlotNumeric("MA1",MA1);

         PlotNumeric("MA2",MA2);

         If(BarStatus==2)

         {

                   for i =0 to 5

                   {

                            Unplot("ma1",i);

                   }

                   PlotNumeric("ma1",close);    

         }

End

本例的功能是输出两条移动平均线,把其中MA1均线的最后6K线上的输出值删除,并在后一个K线输出一个新值。结果如图9-12所示:

图9-12.          清除均线上部分数据显示的效果

 

【补充】AverageFC函数介绍

说明

快速计算平均值

语法

Numeric AverageFC(NumericSeries Price,Numeric Length)

参数

Price 用于求和的值,必须是数值型序列值;
Length
是需要计算的周期数,为整型.

备注

该函数计算指定周期内的数值型序列值的平均值,返回值为浮点数;
当序列值的CurrentBar小于Length时,该函数返回无效值;
使用该函数时,第二个参数不能使用变量.如果第二个参数需要使用到变量,请使用Average函数.

示例

AverageFC(Close, 12); 计算12周期以来的收盘价的平均值;
AverageFC((Close + High + Low)/ 3, 10);
计算10周期以来高低收价格的平均值的平均值。

 

【问题】为什么使用PlotNumeric输出线条,在属性中设置了线型设置,实际显示却是混乱的

例:If (condition1)

 {Plotnumeric("t1",L[3],L[3],-1,3);//公式属性里线型选柱状图

 }

 If (condition2)

 {Plotnumeric ("t2","2",O-50);//公式属性里线型选线

 }

 表现:Bar满足condition1但不满足condition2,图表中在L[3]显示黄粗圆点;如果t2公式属性里线型选点,黄粗圆点变成了红圈方白点。(线型中还有其他设置,这里的意思就是线型没有按照设置的显示,具体表现情况不尽相同)

【回答】这个问题的关键在于线型不是直接输出,而是满足某种条件输出。这样,在图表上输出线型的顺序与属性里显示的线型设置的序列可能不同,于是出现了混乱情况。遇到这种问题,建议将一定会在每个bar上都出现的线型写在前面,需要判断条件才输出的写在最后。如果条件输出的结果不能保障出现的顺序,可以改成几个不同的公式来执行,实现不同线型的需求。