诚信为本
量力而为
当前位置:ea编程网 EA知识 正文

单线MACD编程数据的获取

MACD 是 Moving Average Convergence and Divergence 的缩写,中文称为指数平滑异同移动平均线,是从双指数移动平均线发展而来的。

MT4上面自带的MACD是单线MACD,在上方菜单栏依次点击-插入-技术指标-震荡指标-MACD,并在出来的指标属性框中设置好相关参数后,点“确定”即可将单线MACD插入到当前图表中。如下图所示:

MT4单线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()循环语句来编写。

未经允许不得转载:ea编程网 » 单线MACD编程数据的获取