MQL5 Wizard提供了自动创建交易系统(即EA)的功能(详见MQL5 Wizard: 无需编程创建专家顾问)。
在本文中,我们将探讨基于MACD指标线交叉的交易信号。该策略被称为“基于主线和信号线MACD交叉的信号”,可以在MQL5 Wizard中自动创建EA时选择使用。
MACD指标的主线是快速EMA和慢速EMA的差值。信号线则是主线经过PeriodSignal周期平滑后的结果。
交易信号:
- 买入:MACD指标的主线向上穿越信号线。
- 卖出:MACD指标的主线向下穿越信号线。
这个策略在CSignalMACD 类中实现,该类位于MQL5标准库的交易策略类中(路径为MQL5\Include\Expert\Signal\SignalMACD.mqh)。

图1. 基于MACD主线与信号线交叉的交易信号
交易信号
该交易策略在CSignalMACD类中实现,提供了一些保护方法以简化对指标值的访问:
double MainMACD(int ind) // 返回某一柱的主MACD线值 double SignalMACD(int ind) // 返回某一柱的信号MACD线值 double StateMACD(int ind) // 返回主线和信号线间的差值 int ExtStateMACD(int ind); // 返回主线与信号线差值的变化次数
1. 开多单
开多单的条件:
- ExtStateMACD(1)==1;这意味着主线向上穿越了信号线
//+------------------------------------------------------------------+ //| 检查开多单的条件 | //+------------------------------------------------------------------+ bool CSignalMACD::CheckOpenLong(double& price,double& sl,double& tp,datetime& expiration) { price=0.0; sl =m_symbol.Ask()-m_stop_loss*m_adjusted_point; tp =m_symbol.Ask()+m_take_profit*m_adjusted_point; //--- return(ExtStateMACD(1)==1); }
2. 平多单
平多单的条件:
- ExtStateMACD(1)==1;这意味着主线向下穿越了信号线
//+------------------------------------------------------------------+ //| 检查平多单的条件 | //+------------------------------------------------------------------+ bool CSignalMACD::CheckCloseLong(double& price) { price=0.0; //--- return(ExtStateMACD(1)==-1); }
3. 开空单
开空单的条件与平多单的条件相同。
//+------------------------------------------------------------------+ //| 检查开空单的条件 | //+------------------------------------------------------------------+ bool CSignalMACD::CheckOpenShort(double& price,double& sl,double& tp,datetime& expiration) { price=0.0; sl =m_symbol.Bid()+m_stop_loss*m_adjusted_point; tp =m_symbol.Bid()-m_take_profit*m_adjusted_point; //--- return(ExtStateMACD(1)==-1); }
4. 平空单
平空单的条件与开多单的条件相同。
//+------------------------------------------------------------------+ //| 检查平空单的条件 | //+------------------------------------------------------------------+ bool CSignalMACD::CheckCloseShort(double& price) { price=0.0; //--- return(ExtStateMACD(1)==1); }
使用MQL5 Wizard创建专家顾问
要基于此策略创建交易机器人,您需要在MQL5 Wizard的“创建现成专家顾问”选项中选择信号属性为“基于主线和信号线MACD交叉的信号”:

图2. 在MQL5 Wizard中选择“基于主线和信号线MACD交叉的信号”
接下来,您需要指定所需的追踪止损算法和资金与风险管理系统。专家顾问的代码将自动生成,您可以在MetaTrader 5客户端终端的策略测试器中编译并测试。
测试结果
我们来看一下该专家顾问在历史数据上的回测(EURUSD H1,测试周期:2010年1月1日-2011年5月1日,PeriodFast=12,PeriodSlow=24,PeriodSignal=9,止损=20,获利=80)。
在创建专家顾问时,我们使用了固定交易量(固定手数交易, 0.1),未使用追踪止损算法(未使用追踪止损)。

图3. 基于MACD交叉的交易信号的专家顾问测试结果
附件: SignalMACD.mqh包含了CSignalMACD类(包含在MQL5标准库中),存放在MQL5\Include\Expert\Signal文件夹。testmacd.mq5包含使用MQL5 Wizard创建的专家顾问代码。
评论 0