基于三条移动平均线的交易信号 - MQL5 Wizard专家顾问

Mike 2011.01.10 19:41 10 0 0
附件

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. 基于三条移动平均线的交易信号

图1. 基于三条移动平均线的交易信号

交易信号

该交易策略在 CSignal3EMA 类中实现,包含一些受保护的方法,方便访问三条移动平均线(快速、中等、慢速)的值:

double FastEMA(int ind)       // 返回当前柱的快速EMA值
double MediumEMA(int ind)     // 返回当前柱的中等EMA值
double SlowEMA(int ind)       // 返回当前柱的慢速EMA值
注意:0号(未完成)柱的指标值可能会变化,因此在进行交易条件检查时,应使用已完成的(形成的)柱数据。

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));
  }
你可以改进平仓做多的策略:不必等到下降趋势出现,可以在震荡时平仓,可以通过以下条件判断:FastEMA < MediumEMA > SlowEMA。

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的信号'

图2. 在MQL5 Wizard中选择'基于三条EMA的信号'

接下来,你需要指定所需的追踪止损算法和资金和风险管理系统。专家顾问的代码将自动生成,你可以在MetaTrader 5客户端终端的策略测试器中编译和测试。


测试结果

现在,让我们来看一下基于历史数据的专家顾问回测(EURUSD H1,测试周期:2010年1月1日至2011年5月1日,快速周期=5,中等周期=12,慢速周期=24,止损=400,止盈=900)。

在创建专家顾问时,我们使用了固定交易量(固定交易手数,0.1),未使用追踪止损算法(不使用追踪)。

图3. 基于三条EMA的专家顾问历史回测结果

图3. 基于三条EMA的专家顾问历史回测结果

附件: Signal3EMA.mqh 文件包含 CSignal3EMA 类,需放在 terminal_data_folder\MQL5\Include\Expert\Signal 目录下。

threeema.mq5 文件包含使用MQL5 Wizard创建的专家顾问代码。


列表
评论 0