将技术分析进行到底
提供专业的程序化交易解决方案

关于背离问题的量化思路

以下指标适用于文华财经的赢顺、睿期、赢智软件平台。


 

何为背离?从字面理解,背对背离开,也就是向着不同的方向发展的意思。

对于行情价格而言,方向无非是上涨或者下跌。那么是谁与谁向一着不同方向发展呢?般来说是行情价格,与从价格衍生出来的指标数据,例如MACD。

行情向上发展,MACD向下发展,我们定义这种情况为顶背离。底背离反之。

那么问题来了,我们根据什么判断行情在向上发展,MACD在向下发展呢?

我们最容易想到趋势判断标准就是道氏理论给出的定义:高点和低点都依次抬高,为上涨趋势;高点和低点依次降低为下跌趋势。

所以,要判断是否发生顶背离,我们就是要判断行情的高点是不是在抬高,意味着价格向上发展;判断MACD的高点(面积等)是不是在降低,意味着MACD在向下发展。

对于程序化而言,要想解决这个问题,还需要给出高点和低点的定义。

所以,我们就得出了判断顶背离的基本逻辑:

在一个区间内,给出高点和低点的定义,如果存在两个满足条件的高点,那么我们就可以据此判断趋势。从而得出两个趋势是否存在不一致的结论。

 

第1种解决方案

高点的定义:分别大于前后2根K线的值。
低点的定义:分别小于前后2根K线的值。

所以一个背离思路就可以这样来表述:

采用前面高点的定义方式,如果20个周期内存在两个收盘价高点,并且后一个比前一个更高,但是这两个高点对应的MACD连续红柱面积,后一个比前一个小,则认为是顶背离。

DIFF:=EMA(C,12) – EMA(CLOSE,26);
DEA:=EMA(DIFF,9);
MACD:=2*(DIFF-DEA);
HWAVE:=H>REF(H,1) && H>REF(H,2) && H>REFX(H,1) && H>REFX(H,2);
COUNTH:=REF(COUNT(HWAVE,20),2);
NH1:=REF(BARSLAST(HWAVE),2)+2;
NH2:=REF(SUMBARS(HWAVE,2)-1,2)+2;
HH1:=REF(C,NH1);
HH2:=REF(C,NH2);
MACD1:=REF(MACD,NH1);
MACD2:=REF(MACD,NH2);
顶背离:COUNTH>=2 && HH1>HH2 && MACD1<MACD2,NODRAW;
DRAWICON(顶背离,H,’ICO5′);

其实这个思路正是文华财经赢智程序化交易平台的系统函数DIVERGENCE所采用的。也就是说上面一段代码等效于:

DIFF:=EMA(CLOSE,12) – EMA(CLOSE,26);
DEA:=EMA(DIFF,9);
MACD:=2*(DIFF-DEA);
顶背离:DIVERGENCE(H,MACD,2,20,1),NODRAW;
DRAWICON(顶背离,H,’ICO5′);

 

 第2种解决方案

高点定义:MACD红柱区间的最高价;
低点定义:MACD绿柱区间的最低价;

背离思路可以表述为:

当前MACD小于0,前一个红柱区间内的最高价比更前一个红柱区间的最高价高,但是这两个最高价对应的MACD关系相反。

DIFF:=EMA(C,12) – EMA(CLOSE,26);
DEA:=EMA(DIFF,9);
MACD:=2*(DIFF-DEA);
UPCOND:=CROSS(DIFF,DEA);
DOWNCOND:=CROSSDOWN(DIFF,DEA);
END_N1:=SUMBARS(DOWNCOND,1);
RANGE_N1:=REF(SUMBARS(UPCOND,1),END_N1);
END_N2:=SUMBARS(DOWNCOND,2);
RANGE_N2:=REF(SUMBARS(UPCOND,1),END_N2);
HH1:=REF(HHV(H,RANGE_N1),END_N1);
HH2:=REF(HHV(H,RANGE_N2),END_N2);
MACD1:=REF(REF(MACD,HHVBARS(H,RANGE_N1)),END_N1);
MACD2:=REF(REF(MACD,HHVBARS(H,RANGE_N2)),END_N2);
顶背离:=CROSS(0,MACD) && HH1>HH2 && MACD1<MACD2;
DRAWICON(顶背离,H,’ICO5′);

效果图:

5002.1

 

第3种解决方案

其实与第二种方案类似,仍然使用MACD红柱区间最高价判断价格趋势。

但是,这一次,我们找的是红柱区间MACD的最大值来判断MACD的趋势,而不是用最高价对应的那两个MACD值来判断。

DIFF:=EMA(C,12) – EMA(CLOSE,26);
DEA:=EMA(DIFF,9);
MACD:=2*(DIFF-DEA);
UPCOND:=CROSS(DIFF,DEA);
DOWNCOND:=CROSSDOWN(DIFF,DEA);
END_N1:=SUMBARS(DOWNCOND,1);
RANGE_N1:=REF(SUMBARS(UPCOND,1),END_N1);
END_N2:=SUMBARS(DOWNCOND,2);
RANGE_N2:=REF(SUMBARS(UPCOND,1),END_N2);
HH1:=REF(HHV(H,RANGE_N1),END_N1);
HH2:=REF(HHV(H,RANGE_N2),END_N2);
MACD1:=REF(HHV(MACD,RANGE_N1),END_N1);
MACD2:=REF(HHV(MACD,RANGE_N2),END_N2);
顶背离:=CROSS(0,MACD) && HH1>HH2 && MACD1<MACD2; DRAWICON(顶背离,H,’ICO5′);

 

第4种解决方案

用MACD红柱区间最高价判断价格趋势,用红柱区间的面积判断MACD的趋势。
DIFF:=EMA(C,12) – EMA(CLOSE,26);
DEA:=EMA(DIFF,9);
MACD:=2*(DIFF-DEA);
UPCOND:=CROSS(DIFF,DEA);
DOWNCOND:=CROSSDOWN(DIFF,DEA);
END_N1:=SUMBARS(DOWNCOND,1);
RANGE_N1:=REF(SUMBARS(UPCOND,1),END_N1);
END_N2:=SUMBARS(DOWNCOND,2);
RANGE_N2:=REF(SUMBARS(UPCOND,1),END_N2);
HH1:=REF(HHV(H,RANGE_N1),END_N1);
HH2:=REF(HHV(H,RANGE_N2),END_N2);
MACD1:=REF(SUM(MACD,RANGE_N1),END_N1);
MACD2:=REF(SUM(MACD,RANGE_N2),END_N2);
顶背离:=CROSS(0,MACD) && HH1>HH2 && MACD1<MACD2;
DRAWICON(顶背离,H,’ICO5′);

 

 总结

通过上面几个例子,大家应该对背离问题有了更清晰的认识。

思路方面,判断背离问题的重点是对趋势的判断。我们上面是通过临近高低点的关系来判断趋势的,实际上这并不是判断趋势的唯一方式,大家可以做更多的尝试,我在这里就不再深入讲了。

编写方面,关键点就是我们之前提到的定位问题。分别定位到最近两个高低点,然后把他们的值拿过来进行逻辑判断。

如果还不清楚定位问题如何解决,可以到《麦语言编程终极学习方案》一文中学习。下面有链接。

 

 

 

 

未经允许不得转载:文华程序化 » 关于背离问题的量化思路
分享到: (0)

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址

横冲直撞 一直到最远方