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

本文详细介绍了通达信中的SUMBARS函数及其应用,包括与BARSLAST的区别,以及如何结合SUMBARS编写MACD底背离信号。作者通过实例展示了如何使用SUMBARS获取金叉周期数和实现MACD底背离策略。
摘要由CSDN通过智能技术生成

https://www.cnblogs.com/ma-dongdong/p/17375119.htmlicon-default.png?t=N7T8https://www.cnblogs.com/ma-dongdong/p/17375119.html

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

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值