请教一段关于MACD的编程 (文华财经WH6赢顺V6.7)

投资者咨询:请教一段关于MACD的编程 (文华财经WH6赢顺V6.7)
来源:文华财经  日期:2018-7-2 9:31
 
描述如图片所示,请教如何用代码实现,非常感谢


图片点击可在新窗口打开查看
技术人员回复
日期:2018-7-2 9:39

参考:

 


DIFF :EMA(CLOSE,3) - EMA(CLOSE,5),NODRAW;//短周期与长周期的收盘价的指数平滑移动平均值做差。
DEA  :=EMA(DIFF,66);//DIFF的M个周期指数平滑移动平均

SC:=CROSS(DEA,0),NODRAW;
XC:=CROSSDOWN(DEA,0),NODRAW;

ED1:=VALUEWHEN(DEA<0,BARSLAST(XC)),NODRAW;
EC1:=VALUEWHEN(DEA<0,BARSLAST(SC)),NODRAW;
EB1:=VALUEWHEN(DEA<0,REF(BARSLAST(XC),EC1+1))+EC1+1,NODRAW;
EA1:=VALUEWHEN(DEA<0,REF(BARSLAST(SC),EC1+1))+EC1+1,NODRAW;
ED2:=VALUEWHEN(DEA>0,BARSLAST(SC)),NODRAW;
EC2:=VALUEWHEN(DEA>0,BARSLAST(XC)),NODRAW;
EB2:=VALUEWHEN(DEA>0,REF(BARSLAST(SC),EC2+1))+EC2+1,NODRAW;
EA2:=VALUEWHEN(DEA>0,REF(BARSLAST(XC),EC2+1))+EC2+1,NODRAW;

ED11:=IF(DEA<0,ED1,0),NODRAW;
EC11:=IF(DEA<0,EC1,0),NODRAW;
EB11:=IF(DEA<0,EB1,0),NODRAW;
EA11:=IF(DEA<0,EA1,0),NODRAW;
ED22:=IF(DEA>0,ED2,0),NODRAW;
EC22:=IF(DEA>0,EC2,0),NODRAW;
EB22:=IF(DEA>0,EB2,0),NODRAW;
EA22:=IF(DEA>0,EA2,0),NODRAW;

E1:=IF(DEA<0,DIFF,0),NODRAW;
E2:=IF(DEA>0,DIFF,0),NODRAW;

HD1:REF(DIFF,EC11)+REF(DIFF,EC22)+REF(DIFF,EB11)+REF(DIFF,EB22);
HD2:REF(DIFF,EC11)+REF(DIFF,EC22)+REF(DIFF,ED11)+REF(DIFF,ED22);
HD:E1+E2+REF(DIFF,ED11)+REF(DIFF,ED22);

 
投资者咨询:请教一段关于MACD的编程 (文华财经WH6赢顺V6.7)
来源:文华财经  日期:2018-7-2 9:31
 非常感谢。但是在计算Hd1Hd2Hd时,取用的DIFF是在取值区间的最大值或最小值,这个似乎没有表达出来,不知能否继续指教一下
技术人员回复
日期:2018-7-2 11:34

这样改一下:

 


DIFF :=EMA(CLOSE,3) - EMA(CLOSE,5),NODRAW;//短周期与长周期的收盘价的指数平滑移动平均值做差。
DEA  :=EMA(DIFF,66);//DIFF的M个周期指数平滑移动平均

SC:=CROSS(DEA,0),NODRAW;
XC:=CROSSDOWN(DEA,0),NODRAW;

ED1:=VALUEWHEN(DEA<0,BARSLAST(XC)),NODRAW;
EC1:=VALUEWHEN(DEA<0,BARSLAST(SC)),NODRAW;
EB1:=VALUEWHEN(DEA<0,REF(BARSLAST(XC),EC1+1))+EC1+1,NODRAW;
EA1:=VALUEWHEN(DEA<0,REF(BARSLAST(SC),EC1+1))+EC1+1,NODRAW;
ED2:=VALUEWHEN(DEA>0,BARSLAST(SC)),NODRAW;
EC2:=VALUEWHEN(DEA>0,BARSLAST(XC)),NODRAW;
EB2:=VALUEWHEN(DEA>0,REF(BARSLAST(SC),EC2+1))+EC2+1,NODRAW;
EA2:=VALUEWHEN(DEA>0,REF(BARSLAST(XC),EC2+1))+EC2+1,NODRAW;

ED11:=IF(DEA<0,ED1,NULL),NODRAW;
EC11:=IF(DEA<0,EC1,NULL),NODRAW;
EB11:=IF(DEA<0,EB1,NULL),NODRAW;
EA11:=IF(DEA<0,EA1,NULL),NODRAW;
ED22:=IF(DEA>0,ED2,NULL),NODRAW;
EC22:=IF(DEA>0,EC2,NULL),NODRAW;
EB22:=IF(DEA>0,EB2,NULL),NODRAW;
EA22:=IF(DEA>0,EA2,NULL),NODRAW;

ED111:=REF(HHV(DIFF,BARSLAST(SC)+1),ED11);
EC111:=REF(LLV(DIFF,BARSLAST(XC)+1),EC11);
EB111:=REF(HHV(DIFF,BARSLAST(SC)+1),EB11);
ED1111:=IF(ISNULL(ED111),0,ED111);
EC1111:=IF(ISNULL(EC111),0,EC111);
EB1111:=IF(ISNULL(EB111),0,EB111);

ED222:=REF(LLV(DIFF,BARSLAST(XC)+1),ED22);
EC222:=REF(HHV(DIFF,BARSLAST(SC)+1),EC22);
EB222:=REF(LLV(DIFF,BARSLAST(XC)+1),EB22);
ED2222:=IF(ISNULL(ED222),0,ED222);
EC2222:=IF(ISNULL(EC222),0,EC222);
EB2222:=IF(ISNULL(EB222),0,EB222);

E1:=IF(DEA<0,DIFF,0),NODRAW;
E2:=IF(DEA>0,DIFF,0),NODRAW;

HD1:EC1111+EC2222+EB1111+EB2222;
HD2:EC1111+EC2222+ED1111+ED2222;
HD:E1+E2+ED1111+ED2222;