【编写技巧】:探讨关于背离问题的量化条件 (文华财经)

投资者咨询:【编写技巧】:探讨关于背离问题的量化条件 (文华财经)
来源:文华财经  日期:2015-12-2 22:07
 

 
对于这种仁者见仁智者见智的问题,我一开始是拒绝的。

但是鉴于太多人来问,我就勉为其难,来与大家探讨一下。



何为背离?从字面理解,背对背离开,也就是向着不同的方向发展的意思。
 
对于行情价格而言,方向无非是上涨或者下跌。那么是谁与谁向着不同方向发展呢?一般来说是行情价格,与从价格衍生出来的指标数据,例如MACD。
 


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



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

我们最容易想到趋势判断标准就是道氏理论给出的定义:高点和低点都依次抬高,为上涨趋势;高点和低点依次降低为下跌趋势。
 
所以,要判断是否发生顶背离,我们就是要判断行情的高点是不是在抬高,意味着价格向上发展;判断MACD的高点(面积等)是不是在降低,意味着MACD在向下发展。



对于程序化而言,要想解决这个问题,还需要给出高点和低点的定义。
 
所以,我们就得出了判断顶背离的基本逻辑:
 
在一个区间内,给出高点和低点的定义,如果存在两个满足条件的高点,那么我们就可以据此判断趋势。从而得出两个趋势是否存在不一致的结论。



         
投资者咨询:【编写技巧】:探讨关于背离问题的量化条件 (文华财经)
来源:文华财经  日期:2015-12-2 22:07



第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');



不知道DIVERGENCE是怎么用的?赶紧去查一下函数说明吧。



     
投资者咨询:【编写技巧】:探讨关于背离问题的量化条件 (文华财经)
来源:文华财经  日期:2015-12-2 22:07



第2种解决方案

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

背离思路可以表述为:

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

DIFF:EMA(C,12) - EMA(CLOSE,26);
DEA:EMA(DIFF,9);
MACD:2*(DIFF-DEA),NODRAW;
2*(DIFF-DEA),COLORSTICK;//DIFF减DEA的2倍画柱状线

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);

HH1:=REF(HV(H,RANGE_N1),END_N1-1);
HH2:=REF(HV(H,RANGE_N1),END_N2-1);
MACD1:=REF(REF(MACD,HHVBARS(H,RANGE_N1)),END_N1-1);
MACD2:=REF(REF(MACD,HHVBARS(H,RANGE_N1)),END_N2-1);

顶背离:=CROSS(0,MACD) && HH1>HH2 && MACD1<MACD2;
DRAWICON(顶背离,H,'ICO5');

END_M1:=SUMBARS(UPCOND,1);
RANGE_M1:=REF(SUMBARS(DOWNCOND,1),END_M1);
END_M2:=SUMBARS(UPCOND,2);
LL1:=REF(LV(L,RANGE_M1),END_M1-1);
LL2:=REF(LV(L,RANGE_M1),END_M2-1);
MACD3:=REF(REF(MACD,LLVBARS(L,RANGE_M1)),END_M1-1);
MACD4:=REF(REF(MACD,LLVBARS(L,RANGE_M1)),END_M2-1);

底背离:=CROSS(MACD,0) && LL1<LL2 && MACD3>MACD4;
DRAWICON(底背离,L,'ICO4');

效果图:




按此在新窗口浏览图片
文件名:5.1.png

               
投资者咨询:【编写技巧】:探讨关于背离问题的量化条件 (文华财经)
来源:文华财经  日期:2015-12-2 22:07



第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');





第3.5种解决方案:

用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');

   
         
投资者咨询:【编写技巧】:探讨关于背离问题的量化条件 (文华财经)
来源:文华财经  日期:2015-12-2 22:07



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

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

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

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



我把上面的思路拿出来作为范例讲,并不意味着它们可以直接应用到实际交易中。实际上,上面几种方案都不能算非常完善。

建议大家可以理解之后,根据自己的认识设计出关于背离问题的解决方案。



   
投资者咨询:【编写技巧】:探讨关于背离问题的量化条件 (文华财经)
来源:文华财经  日期:2015-12-2 22:07
未完,待续……





 
投资者咨询:【编写技巧】:探讨关于背离问题的量化条件 (文华财经)
来源:文华财经  日期:2015-12-2 22:07

第一个方法里面的这句 

顶背离:COUNTH>=2 && HH1>HH2 && MACD1<MACD2,NODRAW;

是不是有问题?

因为COUNTH:REF(COUNT(HWAVE,20),2);

在20根K线周期内想出现两次波峰的可能性太小.这样的话大部分的背离都无法满足这一条件而被忽略掉.这样的话基本没有多少次能正确发出信号啊.

技术人员回复
日期:2016-1-12 8:19

只是一个例子。如果理解上困难,你用DIVERGENCE这个系统函数就可以了,效果是一样的。其中的参数都可以根据需要调整。
投资者咨询:【编写技巧】:探讨关于背离问题的量化条件 (文华财经)
来源:文华财经  日期:2015-12-2 22:07
 第一种方法里面用DIVERGENCE和没用它的两段代码效果差别挺大的,这是为什么呢?
技术人员回复
日期:2016-1-12 9:33
我试了一下,2楼的两段代码效果是一致的。

至于你加入到自己模型中带来什么影响,你自己研究一下吧。