第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′);
效果图:
第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′);
如下,在右上方参数列表中设置N、M1、M2参数即可
LOWV:=LLV(LOW,N);
HIGHV:=HHV(HIGH,N);
RSV:=EMA((CLOSE-LOWV)/(HIGHV-LOWV)*100,3);
K:EMA(RSV,M1);
D:MA(K,M2);
DRAWCOLORLINE(K>50,K,COLORRED,COLORGREEN);
DRAWCOLORLINE(D>50,D,COLORRED,COLORGREEN);
DRAWLINE(K>80,K,K>80,K,COLORYELLOW),LINETHICK1;
DRAWLINE(K<20,K,K<20,K,COLORYELLOW),LINETHICK1;
50,RGB(0,128,255),DOT;
20,RGB(0,255,0),DOT;
80,RGB(255,0,0),DOT;
A1:=BARSLAST(REF(CROSS(K,D),1));
底背离:REF(CLOSE,A1+1)>CLOSE AND K>REF(K,A1+1) AND CROSS(K,D);
DRAWLINE(A1=0,D,底背离,D,0),COLORRED,LINETHICK1;
A2:=BARSLAST(REF(CROSS(D,K),1));
顶背离:REF(CLOSE,A2+1)<CLOSE AND REF(D,A2+1)>D AND CROSS(D,K);
DRAWLINE(A2=0,D,顶背离,D,0),COLORGREEN,LINETHICK1;
DRAWTEXT(底背离>0,50,'离'),COLORRED;
DRAWTEXT(顶背离>0,50,'离'),COLORGREEN;