利用MQL5 Wizard创建基于鳄鱼指标的交易信号

Mike 2011.01.15 03:35 24 0 0
附件

MQL5 Wizard 是一个自动创建交易系统的工具(详见 MQL5 Wizard:无需编程创建交易系统)。

今天我们来聊聊基于鳄鱼指标的交易信号,这个指标是由B. Williams在《交易混沌》中提出的。这个策略被称为 “基于鳄鱼的信号”(在MQL5 Wizard中自动创建EA时使用)。

该系统基于三条移动平均线(嘴唇、牙齿和下颚线)以及它们之间的差值来计算振荡器。交易信号在鳄鱼线交叉后生成,具体取决于这些线的顺序所确定的趋势。当出现上升趋势时,嘴唇线(周期最短)是最高的,其次是牙齿线,最后是下颚线;相反的情况适用于下降趋势。

交易信号如下:

  • 开多头仓位:在上升趋势下,鳄鱼线交叉且它们之间的距离增加;
  • 平多头仓位:嘴唇线向上交叉下颚线;
  • 开空头仓位:在下降趋势下,鳄鱼线交叉且它们之间的距离增加;
  • 平空头仓位:嘴唇线向下交叉下颚线;

该策略在CSignalAlligator类中实现。

图1. 基于鳄鱼指标的交易信号

图1. 基于鳄鱼指标的交易信号


交易信号

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

double   Jaw(int ind)              // 返回当前时间柱的下颚线值
double   Teeth(int ind)            // 返回当前时间柱的牙齿线值
double   Lips(int ind)             // 返回当前时间柱的嘴唇线值
double   LipsTeethDiff(int ind)    // 返回嘴唇线与牙齿线之间的差值
double   TeethJawDiff(int ind)     // 返回牙齿线与下颚线之间的差值
double   LipsJawDiff(int ind)      // 返回嘴唇线与下颚线之间的差值
bool     CheckCross();             // 用于检查鳄鱼线的交叉情况


1. 开多头仓位

检查交易条件时需要注意嘴唇、牙齿和下颚线的偏移。

开多头仓位的条件:

  • 使用CheckCross来判断交叉情况和线之间差值的增加;
  • LipsTeethDiff(-2)>=LipsTeethDiff(-1)且LipsTeethDiff(-1)>=LipsTeethDiff(0);检查嘴唇线和牙齿线之间的差值是否增加;
  • LipsTeethDiff(0)>=0.0;嘴唇线高于牙齿线;
  • TeethJawDiff(-2)>=TeethJawDiff(-1)且TeethJawDiff(-1)>=TeethJawDiff(0);检查牙齿线和下颚线之间的差值是否增加;
  • TeethJawDiff(0)>=0.0;牙齿线高于下颚线。
//+------------------------------------------------------------------+
//| 检查开多头仓位的条件                                          |
//+------------------------------------------------------------------+
bool CSignalAlligator::CheckOpenLong(double& price,double& sl,double& tp,datetime& expiration)
  {
   if(CheckCross()) return(false);
//---
   price=0.0;
   sl   =0.0;
   tp   =0.0;
//---
   if(LipsTeethDiff(-2)>=LipsTeethDiff(-1) && LipsTeethDiff(-1)>=LipsTeethDiff(0) && LipsTeethDiff(0)>=0.0 &&
      TeethJawDiff(-2) >=TeethJawDiff(-1)  && TeethJawDiff(-1) >=TeethJawDiff(0)  && TeethJawDiff(0) >=0.0)
      m_crossed=true;
//---
   return(m_crossed);
  }


2. 平多头仓位

平多头仓位的条件(注意线的偏移):

  • LipsTeethDiff(-1)<0;下一根柱的嘴唇线(由于偏移)低于牙齿线;
  • LipsTeethDiff(0)>=0;当前柱的嘴唇线高于/等于牙齿线;
  • LipsTeethDiff(1)>0;上一根(已完成)柱的嘴唇线高于牙齿线。
//+------------------------------------------------------------------+
//| 检查平多头仓位的条件                                        |
//+------------------------------------------------------------------+
bool CSignalAlligator::CheckCloseLong(double& price)
  {
   price=0.0;
//---
   return(LipsTeethDiff(-1)<0 && LipsTeethDiff(0)>=0 && LipsTeethDiff(1)>0);
  }


3. 开空头仓位

开空头仓位的条件:

  • 使用CheckCross来判断交叉情况和线之间差值的增加;
  • LipsTeethDiff(-2)<=LipsTeethDiff(-1)且LipsTeethDiff(-1)<=LipsTeethDiff(0);检查嘴唇线和牙齿线之间的差值是否增加;
  • LipsTeethDiff(0)<=0.0;当前柱的嘴唇线低于牙齿线;
  • TeethJawDiff(-2)<=TeethJawDiff(-1)且TeethJawDiff(-1)<=TeethJawDiff(0);检查牙齿线和下颚线之间的差值是否增加;
  • TeethJawDiff(0)<=0.0;当前柱的牙齿线低于下颚线。
//+------------------------------------------------------------------+
//| 检查开空头仓位的条件                                          |
//+------------------------------------------------------------------+
bool CSignalAlligator::CheckOpenShort(double& price,double& sl,double& tp,datetime& expiration)
  {
   if(CheckCross()) return(false);
//---
   price=0.0;
   sl   =0.0;
   tp   =0.0;
//---
   if(LipsTeethDiff(-2)<=LipsTeethDiff(-1) && LipsTeethDiff(-1)<=LipsTeethDiff(0) && LipsTeethDiff(0)<=0.0 &&
      TeethJawDiff(-2) <=TeethJawDiff(-1)  && TeethJawDiff(-1) <=TeethJawDiff(0)  && TeethJawDiff(0) <=0.0)
      m_crossed=true;
//---
   return(m_crossed);
  }


4. 平空头仓位

平空头仓位的条件:

  • LipsTeethDiff(-1)>0;下一根柱的嘴唇线(由于偏移)高于牙齿线;
  • LipsTeethDiff(0)<=0;当前柱的嘴唇线低于/等于牙齿线;
  • LipsTeethDiff(1)<0;上一根(已完成)柱的嘴唇线低于牙齿线。
//+------------------------------------------------------------------+
//| 检查平空头仓位的条件                                        |
//+------------------------------------------------------------------+
bool CSignalAlligator::CheckCloseShort(double& price)
  {
   price=0.0;
//---
   return(LipsTeethDiff(-1)>0 && LipsTeethDiff(0)<=0 && LipsTeethDiff(1)<0);
  }

使用MQL5 Wizard创建交易系统

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

图2. 在MQL5 Wizard中选择“基于鳄鱼的信号”

图2. 在MQL5 Wizard中选择“基于鳄鱼的信号”

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


测试结果

我们来看一下在历史数据上对专家顾问的回测结果(EURUSD H1,测试期间:2010年1月1日至2011年1月5日,JawPeriod=13,JawShift=8,TeethPeriod=8,TeethShift=5,LipsPeriod=5,LipsShift=3,MaMethod=2,Applied=5,CrossMeasure=5)。

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

图3. 基于鳄鱼指标的专家顾问测试结果

图3. 基于鳄鱼指标的专家顾问测试结果


如果您能使用交易过滤器并考虑市场特征,利润可能会增加。CSignalITF类将允许您添加日内时间过滤器。最佳时间可以通过使用MetaTrader 5客户端终端的策略测试器找到。有关示例,请参见MQL5 Wizard - 基于两条EMA交叉的交易信号,带日内时间过滤器


附件: SignalAlligator.mqh中包含CSignalAlligator类,必须放置到terminal_data_folder\MQL5\Include\Expert\Signal文件夹中。

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


列表
评论 0