第十一篇——通达信指标公式编写常用函数(七)——SUMBARS以及MACD底背离(从零起步编写通达信指标公式系列)

内容提要:本文主要介绍通达信指标公式常用函数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

关注博主,学习更多通达信指标公式编写知识。

 

 

posted @ 2023-05-05 18:55  少年如夏  阅读(4101)  评论(2编辑  收藏  举报