MQL5 Wizard 是一个自动创建交易系统的工具(详见 MQL5 Wizard:无需编程创建交易系统)。
今天我们来聊聊基于鳄鱼指标的交易信号,这个指标是由B. Williams在《交易混沌》中提出的。这个策略被称为 “基于鳄鱼的信号”(在MQL5 Wizard中自动创建EA时使用)。
该系统基于三条移动平均线(嘴唇、牙齿和下颚线)以及它们之间的差值来计算振荡器。交易信号在鳄鱼线交叉后生成,具体取决于这些线的顺序所确定的趋势。当出现上升趋势时,嘴唇线(周期最短)是最高的,其次是牙齿线,最后是下颚线;相反的情况适用于下降趋势。
交易信号如下:
- 开多头仓位:在上升趋势下,鳄鱼线交叉且它们之间的距离增加;
- 平多头仓位:嘴唇线向上交叉下颚线;
- 开空头仓位:在下降趋势下,鳄鱼线交叉且它们之间的距离增加;
- 平空头仓位:嘴唇线向下交叉下颚线;
该策略在CSignalAlligator类中实现。

图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中选择“基于鳄鱼的信号”
接下来,您需要指定所需的跟踪止损算法和资金与风险管理系统。专家顾问的代码将自动生成,您可以在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. 基于鳄鱼指标的专家顾问测试结果
如果您能使用交易过滤器并考虑市场特征,利润可能会增加。CSignalITF类将允许您添加日内时间过滤器。最佳时间可以通过使用MetaTrader 5客户端终端的策略测试器找到。有关示例,请参见MQL5 Wizard - 基于两条EMA交叉的交易信号,带日内时间过滤器。
附件: SignalAlligator.mqh中包含CSignalAlligator类,必须放置到terminal_data_folder\MQL5\Include\Expert\Signal文件夹中。
expert_alligator.mq5包含使用MQL5 Wizard创建的专家顾问代码。
评论 0