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);
原文地址:https://blog.51cto.com/14661216/2464990