自从上篇文章发布以后,发现MACD这个指标还真是很多人的重磅工具。
1、有直接用金叉死叉法追涨杀跌的。
2、也有在顶底背离时用来逃顶抄底的。
3、有根据红绿能量柱来看多空双方的强弱盛衰的。
4、还有结合其他理论和指标完成自己一整套系统的。
这么重要的工具,当有朋友转战外汇平台以后,习惯性的去使用MACD,敏锐的朋友当场发现不一样,不那么灵光的就将错就错,尤其上文提到的第三类人。直接拿下图的柱子当以前的柱子使了。造成与之前的系统不一致,亏了好大一笔以后才明白是怎么回事。
<hr>
MT5中系统自带MACD指标
<hr>
今天韭菜花就给朋友们在MT5平台上改写一个跟文华上一摸一样的MACD。
咱们先看看文华财经上MACD指标的代码:
DIFF : EMA(CLOSE,SHORT) - EMA(CLOSE,LONG);
DEA : EMA(DIFF,M);
2*(DIFF-DEA),COLORSTICK;
什么?总共就三句。
是的,就是这么简单。
DIFF:是由短期均线的值减去长期均线的值产生的。
DEA:是对DIFF做了一个M周期的均值。
柱子:是两倍的(DIFF-DEA)。
文华财经上的MACD
再来看看MT5中:
119行代码,“某某球队的长筒袜,真是又臭又长”。长到影响我文章的质量就不贴了。把关键的东西贴出来好了。
MACD:也就是下图白色的柱子。
也就是 DIFF:ExtMacdBuffer=ExtFastMaBuffer-ExtSlowMaBuffer;
Signal: 也就是下图红色虚线
也就是DEA:
SimpleMAOnBuffer(rates_total,prev_calculated,0,InpSignalSMA,
ExtMacdBuffer,ExtSignalBuffer);
没有柱子。
MT5中系统自带MACD
<hr>
正式开始改写:
1.
12~15行
#property indicator_buffers 4
#property indicator_plots 2
#property indicator_type1 DRAW_HISTOGRAM
#property indicator_type2 DRAW_LINE
改为
#property indicator_buffers 5
#property indicator_plots 3
#property indicator_type1 DRAW_LINE
#property indicator_type2 DRAW_LINE
#property indicator_type3 DRAW_HISTOGRAM
目的是给指标增加一个储存器来存柱子的值。
2.
20~21行
#property indicator_label1 "MACD"
#property indicator_label2 "Signal"
修改为
#property indicator_label1 "DIFF"
#property indicator_label2 "DEA"
#property indicator_label3 "ZHUZI"
目的是让指标显示出来以后显示的东西和文华一致,以免脑袋里还得倒腾。
3.
在原29行下新加
double ExtzhuziBuffer[];
目的给柱子增加储存器,将计算后的值填进去。
4.
原来的41~44
SetIndexBuffer(0,ExtMacdBuffer,INDICATOR_DATA);
SetIndexBuffer(1,ExtSignalBuffer,INDICATOR_DATA);
SetIndexBuffer(2,ExtFastMaBuffer,INDICATOR_CALCULATIONS);
SetIndexBuffer(3,ExtSlowMaBuffer,INDICATOR_CALCULATIONS);
修改为
SetIndexBuffer(0,ExtMacdBuffer,INDICATOR_DATA);
SetIndexBuffer(1,ExtSignalBuffer,INDICATOR_DATA);
SetIndexBuffer(2,ExtzhuziBuffer,INDICATOR_DATA);
SetIndexBuffer(3,ExtFastMaBuffer,INDICATOR_CALCULATIONS);
SetIndexBuffer(4,ExtSlowMaBuffer,INDICATOR_CALCULATIONS);
程序的事情,主要给新增的柱子绑定。
5.最后在原来113~117行之间
原来
for(int i=limit;i<rates_total && !IsStopped();i++)
ExtMacdBuffer=ExtFastMaBuffer-ExtSlowMaBuffer;
SimpleMAOnBuffer(rates_total,prev_calculated,0,InpSignalSMA,ExtMacdBuffer,ExtSignalBuffer);
修改为
for(int i=limit;i<rates_total && !IsStopped();i++)
{
ExtMacdBuffer=ExtFastMaBuffer-ExtSlowMaBuffer;
SimpleMAOnBuffer(rates_total,prev_calculated,0,InpSignalSMA,ExtMacdBuffer,ExtSignalBuffer);
ExtzhuziBuffer=2*(ExtMacdBuffer-ExtSignalBuffer);
}
完工
<hr>
出来的效果是这个样子的。
MT5中修改后的MACD
以后再在MT5中用MACD就舒服多了不是?就到这里。改完这个韭菜花脑袋有点懵。 |
|