首页 系统交易 帖子

利用MQL5 Wizard创建基于EMA交叉的交易信号策略

附件
261.zip (2.85 KB, 下载 0次)

MQL5 Wizard 让我们能够自动生成专家顾问(EA)的代码。详细信息请参考 在MQL5 Wizard中创建现成的专家顾问

在这里,我们将讨论基于两条指数平滑移动平均线(快速EMA和慢速EMA)交叉的交易策略。这一策略被称为 “基于两条EMA交叉的信号” (在MQL5 Wizard中创建EA时使用)。

交易信号:

  • 买入:快速EMA向上穿越慢速EMA
  • 卖出:快速EMA向下穿越慢速EMA

该策略在CSignalCrossEMA类中实现。

图1. 基于两条指数平滑移动平均线交叉的交易信号

图1. 基于两条指数平滑移动平均线交叉的交易信号


交易信号

该交易策略在CSignalCrossEMA类中实现,包含一些受保护的方法,以简化访问指标值:

double   FastEMA(int ind)      // 返回当前K线的快速移动平均值
double   SlowEMA(int ind)      // 返回当前K线的慢速移动平均值
double   StateEMA(int ind)     // 返回当前K线快速和慢速移动平均值的差


1. 开多单

开多单的条件:

  • StateEMA(1)>0 且 StateEMA(2)<0:快速EMA在最后一根K线上向上穿越了慢速EMA。
//+------------------------------------------------------------------+
//| 检查开多单的条件                    |
//+------------------------------------------------------------------+
bool CSignalCrossEMA::CheckOpenLong(double& price,double& sl,double& tp,datetime& expiration) 
  {
   if(!(StateEMA(2)<0 && StateEMA(1)>0)) return(false);
//---
   price=0.0;
   sl   =0.0;
   tp   =0.0;
//---
   return(true);
  }

2. 平多单

平多单的条件:

  • StateEMA(1)<0 且 StateEMA(2)>0:快速EMA在最后一根K线上向下穿越了慢速EMA。
//+------------------------------------------------------------------+
//| 检查平多单的条件                         |
//+------------------------------------------------------------------+
bool CSignalCrossEMA::CheckCloseLong(double& price) 
  {
   if(!(StateEMA(2)>0 && StateEMA(1)<0)) return(false);
//---
   price=0.0;
//---
   return(true);
  }

3. 开空单

开空单的条件与平多单的条件相同。

//+------------------------------------------------------------------+
//| 检查开空单的条件(卖出)                  |
//+------------------------------------------------------------------+
bool CSignalCrossEMA::CheckOpenShort(double& price,double& sl,double& tp,datetime& expiration) 
  {
   if(!(StateEMA(2)>0 && StateEMA(1)<0)) return(false);
//---
   price=0.0;
   sl   =0.0;
   tp   =0.0;
//---
   return(true);
  }

4. 平空单

平空单的条件与开多单的条件相同。

//+------------------------------------------------------------------+
//| 检查平空单的条件                        |
//+------------------------------------------------------------------+
bool CSignalCrossEMA::CheckCloseShort(double& price) 
  {
   if(!(StateEMA(2)<0 && StateEMA(1)>0)) return(false);
//---
   price=0.0;
//---
   return(true);
  }

使用MQL5 Wizard创建专家顾问

要基于该策略创建交易机器人,您需要在MQL5 Wizard的“创建现成的专家顾问”选项中选择信号属性为 “基于两条EMA交叉的信号”

图2. 在MQL5 Wizard中选择“基于两条EMA交叉的信号”

图2. 在MQL5 Wizard中选择“基于两条EMA交叉的信号”

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

此外,标准库类中包含了 “基于两条MA交叉的信号”,由CSignalCrossMA类实现。该交易思路类似,但提供了许多额外功能(指定类型、偏移和平均方法,并使用止盈和止损级别)。

图3. 在MQL5 Wizard中选择“基于两条MA交叉的信号”

图3. 在MQL5 Wizard中选择“基于两条MA交叉的信号”


测试结果

我们来看看在历史数据上对专家顾问的回测(EURUSD H1,测试周期:2010年1月1日-2011年5月1日,快速周期=12,慢速周期=24)。

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

图4. 基于两条EMA交叉的专家顾问历史回测结果

图4. 基于两条EMA交叉的专家顾问历史回测结果


附件: SignalCrossEMA.mqh 文件与CSignalCrossEMA类必须放置到 terminal_data_folder\MQL5\Include\Expert\Signal 文件夹中。

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

相关帖子

评论 (0)