在编写通达信指标公式时,经常会遇到出现很多信号,但是只想保留一个的问题。比如只保留最后一次信号,或者连续信号取第一个。今天给大家介绍一下常见的处理方法,涉及到ISLASTBAR、CURRBARSCOUNT、FILTER、CROSS、COUNT这5个函数。
1、ISLASTBAR函数
ISLASTBAR函数用来判断是否为最后一个周期
举例:
DRAWICON(C>O,L,1);{如果是阳线,在最低价画红色箭头}
加载到主图,如下图(图1),图片中的这一段行情下面的例子中还会用到。
可以看到只要符合阳线,就有小箭头。如果只想保留最后一次信号,也就是今天是阳线的时候画红色箭头,需要用ISLASTBAR函数判断。
DRAWICON(ISLASTBAR AND C>O,L,1);{如果今天是阳线,在最低价画红色箭头};
2、CURRBARSCOUNT函数
CURRBARSCOUNT函数获取到今天的周期数,比如今天CURRBARSCOUNT=1,昨天CURRBARSCOUNT=2。
举例:
CURRBARSCOUNT=5;{到今天的周期数等于5};
下图中倒数第5根K线出信号。
DRAWICON(CURRBARSCOUNT<=5 AND C>O,L,1);{如果到今天的周期数小于等于5并且是阳线,在最低价画红色箭头};
对于上文图1中一段行情,只有最近5天的K线是阳线时才会出现红色箭头。
3、FILTER函数
FILTER函数用来过滤连续出现的信号。
用法:FILTER(X,N),X条件成立时,将后面N个周期内的X置为0。X=1表示条件成立,第一个X条件成立之后,后面的N个周期即使X=1,也会被置为0,这样就不成立了,不会出现信号。
例如:
YX:=FILTER(C>O,5);{出现阳线之后,之后5天的阳线信号过滤掉}DRAWICON(YX,L,1);{出现阳线之后,5天之内再次出现阳线也不画红色箭头};
4、CROSS函数
CROSS函数表示交叉。
用法:CROSS(A,B)表示当A从下方向上穿过B时返回1,否则返回0
DIF:EMA(CLOSE,12)-EMA(CLOSE,26);DEA:EMA(DIF,9);MACD:(DIF-DEA)*2,COLORSTICK;DRAWICON(MACD>0,0,1);{MACD大于0,在0处画红色箭头};
当使用MACD>0这个条件时,很多周期都可以满足条件,出现红色箭头,但是用CROSS(MACD,0)(MACD上穿零轴)时,只有上穿的那个周期才会出现红色箭头(如下图)。
DIF:EMA(CLOSE,12)-EMA(CLOSE,26);DEA:EMA(DIF,9);MACD:(DIF-DEA)*2,COLORSTICK;DRAWICON(CROSS(MACD,0),0,1);{MACD大于0,在0处画红色箭头};
5、COUNT函数
COUNT函数用来统计条件成立的周期数
用法:COUNT(X,N),统计N周期中X条件成立的周期数,当COUNT(X,N)=1的时候,就表示第一次成立。
举例:零轴之上第一次金叉
DIF:EMA(CLOSE,12)-EMA(CLOSE,26);DEA:EMA(DIF,9);MACD:(DIF-DEA)*2,COLORSTICK;T:=BARSLAST(CROSS(DEA,0));{DEA上穿0轴以来的周期数}JC:=CROSS(DIF,DEA);{DIF、DEA金叉}DYC:=JC AND COUNT(JC,T)=1 AND DEA>0;{DEA上穿0轴以来第一次金叉,并且DEA大于0}DRAWICON(DYC,DEA,1);{满足DYC条件画红色箭头};