利用MQL5 Wizard创建基于MACD交叉的交易信号

Mike 2011.01.14 21:55 50 0 0
附件

MQL5 Wizard提供了自动创建交易系统(即EA)的功能(详见MQL5 Wizard: 无需编程创建专家顾问)。

在本文中,我们将探讨基于MACD指标线交叉的交易信号。该策略被称为“基于主线和信号线MACD交叉的信号”,可以在MQL5 Wizard中自动创建EA时选择使用。

MACD指标的主线是快速EMA和慢速EMA的差值。信号线则是主线经过PeriodSignal周期平滑后的结果。

交易信号:

  • 买入:MACD指标的主线向上穿越信号线。
  • 卖出:MACD指标的主线向下穿越信号线。

这个策略在CSignalMACD 类中实现,该类位于MQL5标准库的交易策略类中(路径为MQL5\Include\Expert\Signal\SignalMACD.mqh)。

图1. 基于MACD主线与信号线交叉的交易信号

图1. 基于MACD主线与信号线交叉的交易信号


交易信号

该交易策略在CSignalMACD类中实现,提供了一些保护方法以简化对指标值的访问:

double  MainMACD(int ind)      // 返回某一柱的主MACD线值
double  SignalMACD(int ind)    // 返回某一柱的信号MACD线值
double  StateMACD(int ind)     // 返回主线和信号线间的差值
int     ExtStateMACD(int ind); // 返回主线与信号线差值的变化次数


1. 开多单

开多单的条件:

  • ExtStateMACD(1)==1;这意味着主线向上穿越了信号线
//+------------------------------------------------------------------+
//| 检查开多单的条件                                              |
//+------------------------------------------------------------------+
bool CSignalMACD::CheckOpenLong(double& price,double& sl,double& tp,datetime& expiration)
  {
   price=0.0;
   sl   =m_symbol.Ask()-m_stop_loss*m_adjusted_point;
   tp   =m_symbol.Ask()+m_take_profit*m_adjusted_point;
//---
   return(ExtStateMACD(1)==1);
  }


2. 平多单

平多单的条件:

  • ExtStateMACD(1)==1;这意味着主线向下穿越了信号线
//+------------------------------------------------------------------+
//| 检查平多单的条件                                              |
//+------------------------------------------------------------------+
bool CSignalMACD::CheckCloseLong(double& price)
  {
   price=0.0;
//---
   return(ExtStateMACD(1)==-1);
  }


3. 开空单

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

//+------------------------------------------------------------------+
//| 检查开空单的条件                                              |
//+------------------------------------------------------------------+
bool CSignalMACD::CheckOpenShort(double& price,double& sl,double& tp,datetime& expiration)
  {
   price=0.0;
   sl   =m_symbol.Bid()+m_stop_loss*m_adjusted_point;
   tp   =m_symbol.Bid()-m_take_profit*m_adjusted_point;
//---
   return(ExtStateMACD(1)==-1);
  }


4. 平空单

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

//+------------------------------------------------------------------+
//| 检查平空单的条件                                              |
//+------------------------------------------------------------------+
bool CSignalMACD::CheckCloseShort(double& price)
  {
   price=0.0;
//---
   return(ExtStateMACD(1)==1);
  }

使用MQL5 Wizard创建专家顾问

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

图2. 在MQL5 Wizard中选择信号属性

图2. 在MQL5 Wizard中选择“基于主线和信号线MACD交叉的信号”

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


测试结果

我们来看一下该专家顾问在历史数据上的回测(EURUSD H1,测试周期:2010年1月1日-2011年5月1日,PeriodFast=12,PeriodSlow=24,PeriodSignal=9,止损=20,获利=80)。

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

图3. 基于MACD交叉的交易信号的专家顾问测试结果

图3. 基于MACD交叉的交易信号的专家顾问测试结果


附件: SignalMACD.mqh包含了CSignalMACD类(包含在MQL5标准库中),存放在MQL5\Include\Expert\Signal文件夹。testmacd.mq5包含使用MQL5 Wizard创建的专家顾问代码。

列表
评论 0