内容提要:本文主要介绍通达信指标公式常用函数SUMBARS以及函数的应用,并且综合运用函数来编写MACD底背离。
一、SUMBARS函数简介
SUMBARS这个函数名由SUM和BARS两部分组成,SUM在前一篇文章《第十篇——通达信指标公式编写常用函数(六)——SUM、IF(从零起步编写通达信指标公式系列)》中已经讲过,是统计总和的意思,BARS是我们的老朋友了,之前讲的HHVBARS、BARSLAST都是用来统计周期数,SUMBARS也不例外。
SUMBARS函数
含义:向前累加到指定值到现在的周期数
使用方法:SUMBARS(X,A),将X向前累加直到大于等于A,获得这个区间的周期数
二、SUMBARS函数应用举例
SUMBARS(X,A),当A=1的时候可以实现BARSLAST的功能,但是SUMBARS比BARSLAST的应用更广泛。
以MA5、MA10金叉为例,获得上一次金叉到现在的周期数
JC:=CROSS(MA(C,5),MA(C,10));{金叉}
A1:SUMBARS(JC,1)-1;{用SUMBARS获取周期数}
A2:BARSLAST(JC);{用BARSLAST获取周期数};
加载到副图,可以发现A1、A2重叠,也就是说上面两种方法获得的结果是一样的。
BARSLAST只能获取上一次条件成立到当前的周期数,但是如果要获取上上次条件成立到现在的周期数,BARSLAST就无能为力了。这时候SUMBARS就派上用场了。SUMBARS(X,A),A=2就能解决这个问题。
还是以5日、10日均线金叉为例,获取累计到两次金叉这个区间的周期数
JC:=CROSS(MA(C,5),MA(C,10));
A1:SUMBARS(JC,2);
文字理解有困难,直接看下图,1和12是金叉的位置,SUMBARS把这两根K线也算进去了,这样得到的这个区间的周期数是12。下图箭头处对应的白线A1的值就是12。
三、函数综合运用
MACD底背离
价格创新低,MACD指标的DIF不再创新低。
在出现MACD底背离之后,在DIF、DEA金叉的时候选出来。(效果如上图黄色箭头处)
说实话比较难,即使不是自己写,理解公式代码都有难度。
先上代码:
DIF:=EMA(CLOSE,12)-EMA(CLOSE,26);
DEA:=EMA(DIF,9);
JC:=CROSS(DIF,DEA) AND DIF<0;
JT:=SUMBARS(JC,2);
SC:=CROSS(DEA,DIF);
ST:=BARSLAST(SC);
D1:=LLV(DIF,ST+1);
D2:=REF(D1,JT-1);
L1:=LLV(L,ST+1);
L2:=REF(L1,JT-1);
XG:JC AND L1<L2 AND D1>D2;
代码解释:
a、
DIF:=EMA(CLOSE,12)-EMA(CLOSE,26);
DEA:=EMA(DIF,9);
这两句就不用多做解释,分别获得DIF(快线)、DEA(慢线)
b、
JC:=CROSS(DIF,DEA) AND DIF<0;
JT:=SUMBARS(JC,2);
JC表示零轴之下DIF、DEA金叉,JT表示获得零轴之下金叉两次这个区间的周期数
c、
SC:=CROSS(DEA,DIF);
ST:=BARSLAST(SC);
SC表示DIF、DEA死叉,ST表示上一次死叉到当前的周期数
d、
D1:=LLV(DIF,ST+1);
D2:=REF(D1,JT-1);
这两句有难度,先看下图吧。当前(最右边)这根K线对应的DIF、DEA是金叉。
区间1:从上次DIF、DEA死叉到当前金叉这个区间;
区间2:从上上次DIF、DEA死叉到上次金叉这个区间。
D1是图中区间1的DIF最低值;
D2是图中区间2的DIF最低值。
接下来解释一下语句的具体逻辑,比较难理解,也觉得有点难为大家了,估计直接把大家劝退了,下面这段能看懂就看吧,看不懂就算了。
DT表示上一次死叉以来,DIF的最低值到当前的周期数;
D1表示获取上次死叉以来DIF的最低值(上图D1);
D2表示返回到上次金叉那里(上图从左往右第二根黄色竖线处),获取对应的D1值,实际上就是区间2的最低值(上图D2)。因为语句有了嵌套,理解起来就难了。
e、
L1:=LLV(L,ST+1);
L2:=REF(L1,JT-1);
这两句和上面两句类似,只不过变成了获取区间内K线最低价的最低值。
L1是图上区间1的K线最低价的最低值;
L2是图上区间2的K线最低价的最低值。
代码逻辑就不详细解释了,和上面的解释类似。
f、
XG:JC AND L1<L2 AND D1>D2;
当前金叉,并且区间价格低点创新低,并且区间DIF低点抬高,符合条件的选出来。
四、答疑
问:
20日内有涨幅大于5%的,并且该日收盘价小于当前日收盘价,还并且该日收盘价大于该日前10日内收盘价的最高值。
说明:可能20日内还有涨幅大于5%的,只要有1日符合上述要求就行。
代码:
T:=BARSLAST(C/REF(C,1)>1.05);
A1:=REF(C,T);
A2:=REF(HHV(C,10),T);
XG:A1<C AND A1=A2;
感觉结果不是太理想,选出来的结果太多了。
本文来自技术Pie