MACD 是 Moving Average Convergence and Divergence 的缩写,中文称为指数平滑异同移动平均线,是从双指数移动平均线发展而来的。
MT4上面自带的MACD是单线MACD,在上方菜单栏依次点击-插入-技术指标-震荡指标-MACD,并在出来的指标属性框中设置好相关参数后,点“确定”即可将单线MACD插入到当前图表中。如下图所示:
单线MACD指标线包含一条Signal信号线和零轴上下的MACD柱,要在智能交易EA中调用它,还是需要先获取相关数据。MACD指标用iMACD()函数获取,iMACD()函数结构:
double iMACD(
string symbol, // 品种名称
int timeframe, // 图表时间周期
int fast_ema_period, // 快EMA平均周期
int slow_ema_period, // 慢EMA平均周期
int signal_period, // 信号线时间周期
int applied_price, // 价格应用
int mode, // 指标线索引(哪个指标线)
int shift // 序号
);
iMACD()各参数说明:
- symbol,交易品种名称,当前窗口货币对为 Symbol(),要自行定义参数,可以参考 input string symname = “EURUSD “; 之类。
- timeframe,图表周期,指一分钟M1到月线MN1共9个图表周期。要单独定义参数,可以参考用 int 或者 ENUM_TIMEFRAMES,如:input ENUM_TIMEFRAMES Period_x = PERIOD_CURRENT; 0 和 PERIOD_CURRENT 都代表当前图表时间。
- fast_ema_period,快EMA参数,默认12,要自行定义参数,用 int 就可以,如 input int FastEMA=12;。
- slow_ema_period,慢EMA参数,默认26,要自行定义参数,用 int 就可以,如 input int SlowEMA=26;。
- signal_period,信号线参数,自行定义的话,可以用 extern int SignalSMA=9;。
- applied_price,价格类型,指收盘价、最高价、最低价等。MACD默认用的是收盘价PRICE_CLOSE,如果需要自行定义,可以用 int 或ENUM_APPLIED_PRICE 来定义参数,如:input ENUM_APPLIED_PRICE ma_Applied_Price = PRICE_CLOSE;之类。
- mode,指标线索引,MODE_MAIN(0)是指MACD柱子, MODE_SIGNAL(1)指信号线。
- shift,获取对应指标线的索引/序号,0指当前最新K线所对应的值,然后从右往左分别是1、2、3、4…..,这种规则排序。就拿MACD柱子来说,0就是获取最右侧的第一个柱子的值,1就是获取第二个柱子的值,类推。
获取当前图表中参数分别12、26、9的单线MACD的最新MACD柱子及信号线的值参考代码:
double macdma_0 = iMACD(Symbol(),0,12,26,9,PRICE_CLOSE,MODE_MAIN,0);//MACD柱
double macdsi_0 = iMACD(Symbol(),0,12,26,9,PRICE_CLOSE,MODE_SIGNAL,0);//信号线
跨图表获取黄金XAUUSD30分钟图表中参数分别12、26、9的单线MACD的第二个MACD柱子及信号线的值参考代码:
double XAUUSD_macdma_1 = iMACD("XAUUSD",PERIOD_M30,12,26,9,PRICE_CLOSE,MODE_MAIN,1);//MACD柱
double XAUUSD_macdsi_1 = iMACD("XAUUSD",PERIOD_M30,12,26,9,PRICE_CLOSE,MODE_SIGNAL,1);//信号线
在很多外汇分析系统及智能交易EA策略中,都有用到单线MACD指标,在大部分情况下,它都是结合其它指标一道使用的。要根据它的信号执行某种操作,那在获取相关数据后进行比较就可以。如果要获取多个单位的单线MACD相关数据,也可以定义数组并结合for()循环语句来编写。