下载MetaTrader 5

请观看如何免费下载自动交易

有趣的脚本?
因此发布一个链接 -
让其他人评价

喜欢这个脚本? 在MetaTrader 5客户端尝试它

2013.09.30 10:54
EA

MQL5 向导 - 基于Alligator(鳄鱼)指标交叉线的交易信号 - MetaTrader 5EA

| Chinese English Русский Español Deutsch 日本語 Português

显示:
1513
等级:
投票: 18

MQL5 向导 提供自动创建交易程序(参见 MQL5 向导:免编程创建交易程序)。

是时候讨论基于 Alligator (鳄鱼)技术指标的交易信号了, Alligator 指标由 B.Williams 在 "Trading Chaos(混沌交易法)" 中提出。此策略称为 "基于 Alligator 指标的信号" (当在 MQL5 向导中自动创建交易程序时)。

这个系统基于三条移动平均线(唇,牙与颌线),振荡器,计算它们的不同。交易信号在 Alligator 多条线相互交叉后产生,依据趋势,检测这些线的顺序。在上升趋势中,唇线(周期最小)应该最高,之下是牙线,最低的是颌线。在下降趋势中是相似的反向条件。

交易信号:

  • 开多单:上升趋势中 Alligator 多线交叉,且线间距离拉大;
  • 平多仓:颌线上穿唇线;
  • 开空单:下降趋势中 Alligator 多线交叉,且线间距离拉大;
  • 平空仓:颌线下穿唇线;

图例 1. 基于 Alligator 技术指标的交易信号

图例 1. 基于 Alligator 技术指标的交易信号


交易信号

这个交易策略已经在 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();             // 用于检查 Alligator 线的交叉


1. 开多单

检查交易条件有些特点,原因在于唇、牙及颌线的平移。

开多单条件:

  • 这个 CheckCross 用于检测交叉和进一步的线间距离;
  • LipsTeethDiff(-2)>=LipsTeethDiff(-1) 和 LipsTeethDiff(-1)>=LipsTeethDiff(0); 检查唇、牙线的间距是否拉大;
  • LipsTeethDiff(0)>=0.0;  唇线高于牙线;
  • TeethJawDiff(-2) >=TeethJawDiff(-1)  and TeethJawDiff(-1) >=TeethJawDiff(0) ; 检查牙,颌线的间距是否拉大;
  • TeethJawDiff(0) >=0.0; 牙线高于颌线。
//+------------------------------------------------------------------+
//| Checks conditions to open long position (buy)                    |
//+------------------------------------------------------------------+
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; 前一根柱线(完整的)的唇线高于牙线。
//+------------------------------------------------------------------+
//| Checks conditions to close long position                         |
//+------------------------------------------------------------------+
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; 当前柱线的牙线低于颌线。
//+------------------------------------------------------------------+
//| Checks conditions to open short position (sell)                  |
//+------------------------------------------------------------------+
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; 前一根柱线(完整的)唇线低于牙线。
//+------------------------------------------------------------------+
//| Checks conditions to close short position                        |
//+------------------------------------------------------------------+
bool CSignalAlligator::CheckCloseShort(double& price)
  {
   price=0.0;
//---
   return(LipsTeethDiff(-1)>0 && LipsTeethDiff(0)<=0 && LipsTeethDiff(1)<0);
  }

使用 MQL5 向导中创建交易程序

为了创建基于策略的交易机器人,您需要在 MQL5 向导,"创建现成交易程序" 中选择信号属性作为 “基于 Alligator 指标的信号” 选项:

图例 2. 在 MQL5 向导中选择 "基于 Alligator 指标的信号"

图例 2. 在 MQL5 向导中选择 "基于 Alligator 指标的信号"

之后您应该需要特别的 移动止损 算法和 资金与风险管理 系统。交易程序的代码将会自动创建,您可以编译它,并在 MetaTrader 5 客户端的 策略测试员 中测试它。


测试结果

让我们来讨论交易程序回测,历史数据基于(EURUSD H1, 测试周期: 1.1.2010-05.01.2011, JawPeriod=13, JawShift=8, TeethPeriod=8, TeethShift=5, LipsPeriod=5, LipsShift=3, MaMethod=2, Applied=5, CrossMeasure=5)。

在创建交易程序时,我们使用固定手数(固定手数交易, 0.1),移动止损算法未使用(移动止损未使用)。

图例 3. 基于 Alligator 指标的交易信号的交易程序的测试结果

图例 3. 基于 Alligator 指标的交易信号的交易程序的测试结果


如果您对交易进行一些过滤和考虑一些市场特点,时间限制等等,收益还可增加。标准类库中的 CSignalITF 类将允许您加入日内时间过滤。最佳时间可借助 MQL5 客户端的 策略测试员 找到。参看例子 MQL5 向导 - 基于两条交叉 EMA 均线,及日内时间过滤的交易信号


附件: 这个 SignalAlligator.mqh 及 CSignalAlligator 类(位于 terminal_data_folder\MQL5\Include\Expert\Signal 目录。

这个 expert_alligator.mq5 包含使用 MQL5 向导创建的交易程序代码。


本文译自 MetaQuotes Software Corp. 撰写的俄文原文
官方代码: https://www.mql5.com/ru/code/267

随机震荡 随机震荡

随机震荡技术指标用来比较给定时间段内,交易对象的收盘价格相对于它价格区间的位置。

标准偏差(StdDev) 标准偏差(StdDev)

标准差(StdDev)衡量市场的波动性。该指标和移动平均一起表征了价格变化的范围。

MQL5向导 - 基于反转 K 线形态的交易信号 MQL5向导 - 基于反转 K 线形态的交易信号

基于反转 K 线形态的交易信号。基于此策略的交易程序代码,可由 MQL5 向导自动生成。

MQL5 向导 - 基于 3 乌鸦/3 白兵 + Stochastic MQL5 向导 - 基于 3 乌鸦/3 白兵 + Stochastic

基于 "3 乌鸦/3 白兵" K 线形态的交易信号,考虑用 Stochastic (随机振荡)指标进行确认。基于此策略的交易程序代码,可由 MQL5 向导自动生成。