MQL5向导 - 基于反转 K 线形态的交易信号 - MetaTrader 5EA
- 显示:
- 5877
- 等级:
- 已发布:
- 2013.09.30 11:01
- 已更新:
- 2016.11.22 07:33
- 需要基于此代码的EA交易或指标吗?请在自由职业者服务中订购 进入自由职业者服务
MQL5 向导 提供自动创建交易程序(参见 在 MQL5 向导中创建现成交易程序)。
CSignalCandles 类提供的交易信号,均基于反转 K 线形态。此策略可称为 "基于反转 K 线形态的信号"(当在 MQL5 向导中自动创建 EA 时)。
这个系统的思路是计算复合 K 线来辨别反向形态。反向形态类似日本蜡烛图分析中的 "锤头" 和 "上吊线" 形态。 但是它使用复合 K 线来替代单一 K 线,并且不需要用复合线的小实体来确认反转。
输入参数:
- Range - 最大柱线数量,用于计算复合 K 线。
- Minimum - 最小复合 K 线尺寸 (通常为点数)。
- ShadowBig 和 ShadowSmall - 阴影(以复合 K 线为单位)。
- Limit, StopLoss 和 TakeProfit - 开单,止损 和 止盈 位置,这些值的定义均相对于复合 K 线的收盘价(复合 K 线单元)。
- Expiration - 订单过期时间 (柱线个数),用于挂单交易(Limit!=0.0)。
以下用来检测反转 K 线形态。
复合 K 线的计算,从最近一个完整柱线(索引值为 1)开始,到 Range 输入参数指定数量的柱线(参见 复合 K 线计算)。如果复合 K 线的尺寸值大于 Minimum 输入参数指定的值,则分析复合 K 线的阴影作为检测反转信号的条件。
做空力量的特征为复合 K 线的上影线尺寸,做多力量的特征为下影线的尺寸。
- 为确认空头趋势反转(换言之多头趋势开始)需要以下条件:下影线尺寸(做多力量)必须大于由 ShadowBig 输入参数定义的值。上影线尺寸(做空力量)必须小于由 ShadowSmall 输入参数定义的值。
- 为确认多头趋势反转(换言之空头趋势开始)需要以下条件:上影线尺寸(做空力量)必须大于由 ShadowBig 输入参数定义的值。下影线尺寸(做多力量)必须小于由 ShadowSmall 输入参数定义的值。
反转策略的附加条件,可能是当 Limit 输入参数为负值时的突破策略(参见 MQL5 向导 - 基于两条 EMA 均线交叉 + 日内时间过滤的交易信号).
依据 Limit,可采用三种不同方式进入市场:
- Limit>0. 价格反向移动时入场,优于市场现价入场(依据交易信号,放置 Buy Limit 或 Sell Limit 的挂单)
- Limit<0. 价格正向移动入场(依据交易信号,放置 Buy Stop 或 Sell Stop 的挂单)。
- Limit=0. 以市场现价即时入场。
图例 1. 基于反转 K 线形态的交易信号
交易信号
这些交易信号已在 CSignalCandles 类中实现,这个 Candle() 函数,用于进行分析:
int Candle(int ind); // Returns the positive/negative number depending on type of the composite candle // the returned value is the number of bars (candles) in the composite candle (starting from ind)
若干 K 线可用来构造复合 K 线。最小柱线数量由 Range 参数定义,在有些情况下,小于 Range(当尺寸/阴影 条件满足)时,这个复合 K 线可形成。Candle 函数返回 0, 如果复合 K 线不能形成。
1. 开多单
要开多单,需要一个多头复合 K 线。此函数检查复合 K 线是否已形成,或是否为空头。否则,计算复合 K 线尺寸(需要计算开单,止损,和止盈位置),并且计算挂单的价位。
注意,这个挂单类型(Buy Limit 或 Buy Stop)依赖于 Limit 输入参数的指示(如果 Limit=0 或 |price-ask|<stops levels(限价位),则将开即时多单,如果 Limit>0,则将放置 Buy Limit 挂单,如果 Limit<0,放置 Buy Stop 挂单)。
//+------------------------------------------------------------------+ //| Checks conditions to open long position (buy) | //+------------------------------------------------------------------+ bool CSignalCandles::CheckOpenLong(double& price,double& sl,double& tp,datetime& expiration) { //--- 检查牛市形态形状 if(Candle(1)<=0) return(false); //--- 得到复合形态尺寸 double size=m_high_composite-m_low_composite; //--- 计算挂单价位 price=m_symbol.NormalizePrice(m_symbol.Ask()-m_limit*size); //--- 计算止损价位 sl =m_symbol.NormalizePrice(price-m_stop_loss*size); //--- 计算止盈价位 tp =m_symbol.NormalizePrice(price+m_take_profit*size); //--- 设置订单过期时间 expiration+=m_expiration*PeriodSeconds(m_period); //--- 条件满足, 返回真 return(true); }
2. 平多仓
如果空头复合 K 线已形成,多单被平仓。
//+------------------------------------------------------------------+ //| Checks conditions to close long position | //+------------------------------------------------------------------+ bool CSignalCandles::CheckCloseLong(double& price) { //--- 检查熊市形态形状 if(Candle(1)>=0) return(false); //--- price=0.0; //--- 条件满足, 返回真 return(true); }
3. 开空单
空头复合 K 线必须形成才能开空单。如果复合 K 线没有形成,或不是空头,返回。否则我们检测它的尺寸,并计算挂单价位
(挂单类型依赖 Limit 输入参数的指示,参见 "开多单")。
//+------------------------------------------------------------------+ //| Checks conditions to open short position (sell) | //+------------------------------------------------------------------+ bool CSignalCandles::CheckOpenShort(double& price,double& sl,double& tp,datetime& expiration) { //--- 检查熊市形态形状 if(Candle(1)>=0) return(false); //--- 得到复合形态尺寸 double size=m_high_composite-m_low_composite; //--- 计算挂单价位 price=m_symbol.NormalizePrice(m_symbol.Bid()+m_limit*size); //--- 计算止损价位 sl =m_symbol.NormalizePrice(price+m_stop_loss*size); //--- 计算止盈价位 tp =m_symbol.NormalizePrice(price-m_take_profit*size); //--- 设置订单过期时间 expiration+=m_expiration*PeriodSeconds(m_period); //--- 条件满足, 返回真 return(true); }
4. 平空仓
如果多头复合 K 线已经形成,则空单被平仓。
//+------------------------------------------------------------------+ //| Checks conditions to close short position | //+------------------------------------------------------------------+ bool CSignalCandles::CheckCloseShort(double& price) { //--- 检查牛市形态形状 if(Candle(1)<=0) return(false); //--- price=0.0; //--- 条件满足, 返回真 return(true); }
使用 MQL5 向导中创建交易程序
为了创建基于策略的交易机器人,您需要在 MQL5 向导,"创建现成交易程序" 中选择信号属性作为 "基于反转 K 线形态的信号" 的选项:
图例 2. 在 MQL5 向导中选择 "基于反转 K 线形态的信号"
之后您应该需要特别的 移动止损 算法和 资金与风险管理 系统。交易程序的代码将会自动创建,您可以编译它,并在 MetaTrader 5 客户端的 策略测试员 中测试它。
测试结果
让我们来讨论交易程序回测,历史数据基于(EURUSD M15, 测试周期: 1.1.2010-05.01.2011, Range=3, Minimum=50, ShadowBig=0.5, ShadowSmall=0.2, Limit=0, StopLoss=2.0, TakeProfit=1.0, Expiration=4)。
在创建交易程序时,我们使用固定手数(固定手数交易, 0.1),移动止损算法未使用(移动止损未使用)。
图例 3. 基于反转 K 线形态交易信号的交易程序的测试结果
附件: 这个 SignalCandles.mqh 及 CSignalCandles 类中,位置在 MQL5\Include\Expert\Signal 目录。
这个 expert_candles.mq5 包括创建于 MQL5 向导的交易程序代码。
由MetaQuotes Ltd译自俄语
原代码: https://www.mql5.com/ru/code/268
讨论基于Alligator(鳄鱼)指标交叉线的交易信号。基于此策略的交易程序代码,可由 MQL5 向导自动生成。
随机震荡随机震荡技术指标用来比较给定时间段内,交易对象的收盘价格相对于它价格区间的位置。
基于 "3 乌鸦/3 白兵" K 线形态的交易信号,考虑用 Stochastic (随机振荡)指标进行确认。基于此策略的交易程序代码,可由 MQL5 向导自动生成。
MQL5 向导 - 基于 3 乌鸦/3 白兵 + CCI 的交易信号基于 "3 乌鸦/3 白兵" K 线形态的交易信号,考虑用 Commodity Channel Index (CCI - 商品通道指数,又名顺势指数)指标进行确认。基于此策略的交易程序代码,可由 MQL5 向导自动生成。