MQL5 向导 - 基于Alligator(鳄鱼)指标交叉线的交易信号 - MetaTrader 5EA
- 显示:
- 5367
- 等级:
- 已发布:
- 2013.09.30 10:54
- 已更新:
- 2016.11.22 07:33
- 需要基于此代码的EA交易或指标吗?请在自由职业者服务中订购 进入自由职业者服务
MQL5 向导 提供自动创建交易程序(参见 MQL5 向导:免编程创建交易程序)。
是时候讨论基于 Alligator (鳄鱼)技术指标的交易信号了, Alligator 指标由 B.Williams 在 "Trading Chaos(混沌交易法)" 中提出。此策略称为 "基于 Alligator 指标的信号" (当在 MQL5 向导中自动创建交易程序时)。
这个系统基于三条移动平均线(唇,牙与颌线),振荡器,计算它们的不同。交易信号在 Alligator 多条线相互交叉后产生,依据趋势,检测这些线的顺序。在上升趋势中,唇线(周期最小)应该最高,之下是牙线,最低的是颌线。在下降趋势中是相似的反向条件。
交易信号:
- 开多单:上升趋势中 Alligator 多线交叉,且线间距离拉大;
- 平多仓:颌线上穿唇线;
- 开空单:下降趋势中 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 指标的信号"
之后您应该需要特别的 移动止损 算法和 资金与风险管理 系统。交易程序的代码将会自动创建,您可以编译它,并在 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 指标的交易信号的交易程序的测试结果
如果您对交易进行一些过滤和考虑一些市场特点,时间限制等等,收益还可增加。标准类库中的 CSignalITF 类将允许您加入日内时间过滤。最佳时间可借助 MQL5 客户端的 策略测试员 找到。参看例子 MQL5 向导 - 基于两条交叉 EMA 均线,及日内时间过滤的交易信号。
附件: 这个 SignalAlligator.mqh 及 CSignalAlligator 类(位于 terminal_data_folder\MQL5\Include\Expert\Signal 目录。
这个 expert_alligator.mq5 包含使用 MQL5 向导创建的交易程序代码。
由MetaQuotes Ltd译自俄语
原代码: https://www.mql5.com/ru/code/267
随机震荡技术指标用来比较给定时间段内,交易对象的收盘价格相对于它价格区间的位置。
标准偏差(StdDev)标准差(StdDev)衡量市场的波动性。该指标和移动平均一起表征了价格变化的范围。
基于反转 K 线形态的交易信号。基于此策略的交易程序代码,可由 MQL5 向导自动生成。
MQL5 向导 - 基于 3 乌鸦/3 白兵 + Stochastic基于 "3 乌鸦/3 白兵" K 线形态的交易信号,考虑用 Stochastic (随机振荡)指标进行确认。基于此策略的交易程序代码,可由 MQL5 向导自动生成。