基于移动平均线的价格交叉交易信号策略分析 - MQL5自动化交易助手

Mike 2011.01.08 00:03 63 0 0
附件

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)   // 返回收盘价与移动平均线的差值
注意:0号(未完成)K线的价格和指标值可能会变动,因此必须使用已完成的K线数据进行交易条件检查。

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的“创建现成的专家顾问”选项中选择信号属性为“基于价格交叉的移动平均信号”

在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