2、输出函数
TB的公式应用提供PlotNumeric、PlotBool、PlotString三个函数在图表上输出数值、布尔值以及字符串,以满足交易者在做技术分析时的各种个性化的输出。
案例一:分析系统提供的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。
例1:PlotNumeric ("Close",Close);
输出Close的值,如图9-4。
图9-4. 输出close效果
例2:PlotNumeric ("OpenToClose",Open,Close);
输出开盘价与收盘价的连线。(需要在公式属性的输出线形选择柱状图),图9-5
图9-5. 输出开盘价与收盘价连线效果
公式属性设置如下,如图9-6:
图9-6. 输出线型选择
例3:PlotNumeric ("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));该公式在图表数据的前4个Bar上都是无效值,第5个Bar之后每个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 偏移N个Bar的输出
三个输出函数最后一个参数均是BarsBack,此参数的意义是将值回溯N个Bar输出。需要注意的是,若此N值为正数,则是将输出值向左移N个Bar输出,若N值为负数,则是将输出值向右偏移N个Bar输出。
例:比较两种不同偏移的输出结果,图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均线的最后6个K线上的输出值删除,并在后一个K线输出一个新值。结果如图9-12所示:
图9-12. 清除均线上部分数据显示的效果
【补充】AverageFC函数介绍
说明 |
快速计算平均值 |
语法 |
Numeric AverageFC(NumericSeries Price,Numeric Length) |
参数 |
Price 用于求和的值,必须是数值型序列值; |
备注 |
该函数计算指定周期内的数值型序列值的平均值,返回值为浮点数; |
示例 |
AverageFC(Close,
12); 计算12周期以来的收盘价的平均值; |
【问题】为什么使用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上都出现的线型写在前面,需要判断条件才输出的写在最后。如果条件输出的结果不能保障出现的顺序,可以改成几个不同的公式来执行,实现不同线型的需求。