MQL5 Wizard 是一个强大的工具,能够自动生成专家顾问的代码。有关详细信息,请参考在MQL5 Wizard中创建现成的专家顾问。
在本文中,我们将讨论基于价格交叉和移动平均线指标的交易策略,这一策略在MQL5 Wizard中被称为“基于价格交叉的移动平均信号”。
交易信号:
- 买入:价格向上穿越移动平均线。
- 卖出:价格向下穿越移动平均线。
- 使用移动平均线的升降判断来过滤虚假信号。
该策略在CSignalMA类中实现,属于MQL5标准库的交易策略类(代码位置:MQL5\Include\Expert\Signal\SignalMA.mqh)。

图1. 基于移动平均线交叉的交易信号
交易信号
该交易策略在CSignalMA类中实现,包含了一些保护方法,以简化对指标和价格值的访问:
double MA(int ind) // 返回移动平均线的值 double Open(int ind) // 返回开盘价 double Close(int ind) // 返回收盘价 double StateMA(int ind) // 如果移动平均线在上升返回正值,下降返回负值 double StateOpen(int ind) // 返回开盘价与移动平均线的差值 double StateClose(int ind) // 返回收盘价与移动平均线的差值
1. 开多仓
开多仓的条件(价格与移动平均线交叉并检查移动平均线是否上升):
- Open(1)<MA(1):开盘价低于移动平均线;
- Close(1)>MA(1):收盘价高于移动平均线;
- MA(1)>MA(2):检查移动平均线的上升(以过滤虚假信号)。
//+------------------------------------------------------------------+ //| 检查开多仓条件(买入) | //+------------------------------------------------------------------+ bool CSignalMA::CheckOpenLong(double& price,double& sl,double& tp,datetime& expiration) { price=0.0; sl =0.0; tp =0.0; //--- 价格向上穿越移动平均线,并且移动平均线在上升 return(StateOpen(1)<0 && StateClose(1)>0 && StateMA(1)>0); }
2. 平多仓
平多仓的条件(价格与移动平均线交叉并检查移动平均线是否下降):
- Open(1)>MA(1):开盘价高于移动平均线;
- Close(1)<MA(1):收盘价低于移动平均线;
- MA(1)<MA(2):检查移动平均线的下降(以过滤虚假信号)。
//+------------------------------------------------------------------+ //| 检查平多仓条件 | //+------------------------------------------------------------------+ bool CSignalMA::CheckCloseLong(double& price) { price=0.0; //--- 价格向下穿越移动平均线,并且移动平均线在下降 return(StateOpen(1)>0 && StateClose(1)<0 && StateMA(1)<0); }
3. 开空仓
开空仓的条件与平多仓的条件相同。
//+------------------------------------------------------------------+ //| 检查开空仓条件(卖出) | //+------------------------------------------------------------------+ bool CSignalMA::CheckOpenShort(double& price,double& sl,double& tp,datetime& expiration) { price=0.0; sl =0.0; tp =0.0; //--- 价格向上穿越移动平均线,并且移动平均线在下降 return(StateOpen(1)>0 && StateClose(1)<0 && StateMA(1)<0); }
4. 平空仓
平空仓的条件与开多仓的条件相同。
//+------------------------------------------------------------------+ //| 检查平空仓条件 | //+------------------------------------------------------------------+ bool CSignalMA::CheckCloseShort(double& price) { price=0.0; //--- 价格向上穿越移动平均线,并且移动平均线在上升 return(StateOpen(1)<0 && StateClose(1)>0 && StateMA(1)>0); }
使用MQL5 Wizard创建专家顾问
要基于该策略创建交易机器人,您需要在MQL5 Wizard的“创建现成的专家顾问”选项中选择信号属性为“基于价格交叉的移动平均信号”:

图2. 在MQL5 Wizard中选择“基于价格交叉的移动平均信号”
接下来,您需要指定所需的跟踪止损算法和资金与风险管理系统。专家顾问的代码将自动生成,您可以在MetaTrader 5客户端终端的策略测试器中编译并测试。
测试结果
让我们考虑在历史数据上(EURUSD H1,自定义周期:2010年1月1日-2011年1月5日,MA周期=12,MA偏移=0)进行的专家顾问回测。
在创建专家顾问时,我们使用了固定交易量(固定交易手数,0.1),未使用跟踪止损算法(未使用跟踪)。

图3. 基于价格交叉的移动平均线的历史回测结果
附件:包含CSignalMA类的SignalMA.mqh(包含在MQL5标准库)位于MQL5\Include\Expert\Signal文件夹。文件crossoverma.mq5包含使用MQL5 Wizard创建的专家顾问代码。
评论 0