MQL5 Wizard 让我们能够自动生成专家顾问的代码。详情请查看 在MQL5 Wizard中创建现成的专家顾问。
今天,我们来聊聊基于三条移动平均线的趋势策略,这个策略被称为 “基于三重EMA的信号”。它使用了三条指数平滑移动平均线:快速EMA(FastEMA)、中等EMA(MediumEMA)和慢速EMA(SlowEMA)来判断趋势。
交易信号:
- 买入信号:FastEMA > MediumEMA > SlowEMA(上升趋势)。
- 卖出信号:FastEMA < MediumEMA < SlowEMA(下降趋势)。
这个策略在 CSignal3EMA 类中实现,信号3ema.mqh 文件需要放在 terminal_data_folder\MQL5\Include\Expert\Signal\ 目录下。

图1. 基于三条移动平均线的交易信号
交易信号
该交易策略在 CSignal3EMA 类中实现,包含一些受保护的方法,方便访问三条移动平均线(快速、中等、慢速)的值:
double FastEMA(int ind) // 返回当前柱的快速EMA值 double MediumEMA(int ind) // 返回当前柱的中等EMA值 double SlowEMA(int ind) // 返回当前柱的慢速EMA值
1. 开仓做多
判断上升趋势的条件为:FastEMA > MediumEMA > SlowEMA:
- FastEMA(1) > MediumEMA(1):快速EMA高于中等EMA(最后完成柱);
- MediumEMA(2) > SlowEMA(1):中等EMA高于慢速EMA(最后完成柱);
//+------------------------------------------------------------------+ //| 检查开仓做多(买入)条件 | //+------------------------------------------------------------------+ bool CSignal3EMA::CheckOpenLong(double& price,double& sl,double& tp,datetime& expiration) { double medium=MediumEMA(1); //--- price=0.0; sl =m_symbol.Ask()-m_stop_loss*m_adjusted_point; tp =m_symbol.Ask()+m_take_profit*m_adjusted_point; //--- 检查上升趋势(在最后完成柱上):FastEMA(1) > MediumEMA(1) > SlowEMA(1) return(FastEMA(1)>medium && medium>SlowEMA(1)); }
2. 平仓做多
判断下降趋势的条件为:FastEMA < MediumEMA < SlowEMA:
- FastEMA(1) < MediumEMA(1):快速EMA低于中等EMA(最后完成柱);
- MediumEMA(2) < SlowEMA(1):中等EMA低于慢速EMA(最后完成柱);
//+------------------------------------------------------------------+ //| 检查平仓做多条件 | //+------------------------------------------------------------------+ bool CSignal3EMA::CheckCloseLong(double& price) { double medium=MediumEMA(1); //--- price=0.0; //--- 检查下降趋势(在最后完成柱上):FastEMA(1) < MediumEMA(1) < SlowEMA(1) return(FastEMA(1)<medium && medium<SlowEMA(1)); }
3. 开仓做空
//+------------------------------------------------------------------+ //| 检查开仓做空(卖出)条件 | //+------------------------------------------------------------------+ bool CSignal3EMA::CheckOpenShort(double& price,double& sl,double& tp,datetime& expiration) { double medium=MediumEMA(1); //--- price=0.0; sl =m_symbol.Bid()+m_stop_loss*m_adjusted_point; tp =m_symbol.Bid()-m_take_profit*m_adjusted_point; //--- 检查下降趋势(在最后完成柱上):FastEMA(1) < MediumEMA(1) < SlowEMA(1) return(FastEMA(1)<medium && medium<SlowEMA(1)); }
4. 平仓做空
//+------------------------------------------------------------------+ //| 检查平仓做空条件 | //+------------------------------------------------------------------+ bool CSignal3EMA::CheckCloseShort(double& price) { double medium=MediumEMA(1); //--- price=0.0; //--- 检查上升趋势(在最后完成柱上):FastEMA(1) > MediumEMA(1) > SlowEMA(1) return(FastEMA(1)>medium && medium>SlowEMA(1)); }
同样,你可以改进平仓做空的策略:不必等到上升趋势出现,可以在震荡时平仓,可以通过以下条件判断:FastEMA > MediumEMA < SlowEMA。
使用MQL5 Wizard创建专家顾问
要基于此策略创建交易机器人,你需要在MQL5 Wizard的“创建现成的专家顾问”选项中,选择信号属性为 “基于三条EMA的信号”。

图2. 在MQL5 Wizard中选择'基于三条EMA的信号'
接下来,你需要指定所需的追踪止损算法和资金和风险管理系统。专家顾问的代码将自动生成,你可以在MetaTrader 5客户端终端的策略测试器中编译和测试。
测试结果
现在,让我们来看一下基于历史数据的专家顾问回测(EURUSD H1,测试周期:2010年1月1日至2011年5月1日,快速周期=5,中等周期=12,慢速周期=24,止损=400,止盈=900)。
在创建专家顾问时,我们使用了固定交易量(固定交易手数,0.1),未使用追踪止损算法(不使用追踪)。

图3. 基于三条EMA的专家顾问历史回测结果
附件: Signal3EMA.mqh 文件包含 CSignal3EMA 类,需放在 terminal_data_folder\MQL5\Include\Expert\Signal 目录下。
threeema.mq5 文件包含使用MQL5 Wizard创建的专家顾问代码。
评论 0