MACD柱线与价格的经典战法

macd是程序化交易中一个很常用的指标,今天分享一个我研究很久写出的macd指标背离代码。

MACD指标的背离就是指MACD指标的图形的走势正好和K线图的走势方向正好相反。当股价K线图上的股票走势一峰比一峰高,股价一直在向上涨,而MACD指标图形上的由红柱构成的图形的走势是一峰比一峰低,即当股价的高点比前一次的高点高、而MACD指标的高点比指标的前一次高点低,这叫顶背离现象。顶背离现象一般是股价在高位即将反转转势的信号,表明价格短期内即将下跌,是卖出的信号。
一、MACD顶部背离的策略思路:

1,本波红柱面积没有创新高:本波红柱的面积小于前一波红柱的面积。
2,本波红柱长度没有创新高:本波红柱过程中的MACD最高值小于前一波红柱中的最高值。
3,行情价格出现了新高: 本波红柱过程中的行情的最高价大于前一波红柱中的最高价。

以上思路是严格的MACD顶背离的判断,即价格新高,但柱子面积和柱子长度都没有新高。

二、金字塔策略源码

//全局变量

variable:gsumr=0; //gsum红柱总和

variable:glongr=0; //glong最长红柱

variable:ghighr=0; //glow红柱区域最高价

//中间变量

//MACD指标

DIFF := EMA(CLOSE,12) - EMA(CLOSE,26);
DEA := EMA(DIFF,9);
MACD := 2*(DIFF-DEA);

gnum:=barslast(ref(macd>0,1) and macd<0); //红转绿

bnum:=barslast(ref(macd<0,1) and macd>0); //绿转红

if ref(macd,1)<0 and macd>0 then

begin

gsumr:=0; //红柱开始,清0

glongr:=0; //红柱开始,清0

ghighr:=high; //红柱开始,初始化

end

if macd>0 then

begin

gsumr:=gsumr+macd; //累加

if abs(macd)>abs(glongr) then glongr:=macd; //如果红柱更长,则记录

if high>ghighr then ghighr:=high; //如果价格更高,则记录

end

numb:=max(gnum,bnum)+1; //两次红柱/绿柱之间间隔

//交易条件

con1:=abs(gsumr)<abs(ref(gsumr,numb)); //面积小于前一波--面积没创新高

con2:=abs(glongr)<abs(ref(glongr,numb)); //柱子长度小于前一波----长度没创新高

con3:=ghighr>ref(ghighr,numb); //价格大于前一波-----价格创新高

//下单模块

//当红柱开始收缩时(牛市即将结束,可能反转向下(或高位盘整)),如果出现顶背离,则少量建仓

if all(macd>0,3) and ref(macd,1)>macd and ref(macd,1)>ref(macd,2) then

begin

if con1 and con2 and con3 then buyshort(1,1,market);//顶背离,面积没创新高,长度没创新高,价格创新高

end

//红柱消失、绿柱开始放出时(上涨行情(或高位盘整)已经结束),如果出现顶背离,则加仓

if ref(macd>0,1) and macd<0 then

begin

if con1 and con2 and con3  then 加:buyshort(1,1,market);//低背离,面积没创新低,长度没创新低,价格创新低

end

//如果上穿零轴,平仓离场

if CROSS(MACD,0) then sellshort(holding<0,holding,market);