下载MetaTrader 5

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

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

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

2013.09.30 11:01
EA

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

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

显示:
1274
等级:
投票: 23
\MQL5\Include\Expert\Signal\

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,可采用三种不同方式进入市场:

  1. Limit>0. 价格反向移动时入场,优于市场现价入场(依据交易信号,放置 Buy Limit 或 Sell Limit 的挂单)
  2. Limit<0. 价格正向移动入场(依据交易信号,放置 Buy Stop 或 Sell Stop 的挂单)。
  3. Limit=0. 以市场现价即时入场。

图例 1. 基于反转 K 线形态的交易信号

图例 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 线形态的信号"

图例 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 线形态交易信号的交易程序的测试结果

图例 3. 基于反转 K 线形态交易信号的交易程序的测试结果


附件: 这个 SignalCandles.mqh 及 CSignalCandles 类中,位置在 MQL5\Include\Expert\Signal 目录。

这个 expert_candles.mq5 包括创建于 MQL5 向导的交易程序代码。


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

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

讨论基于Alligator(鳄鱼)指标交叉线的交易信号。基于此策略的交易程序代码,可由 MQL5 向导自动生成。

随机震荡 随机震荡

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

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

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

MQL5 向导 - 基于 3 乌鸦/3 白兵 + CCI 的交易信号 MQL5 向导 - 基于 3 乌鸦/3 白兵 + CCI 的交易信号

基于 "3 乌鸦/3 白兵" K 线形态的交易信号,考虑用 Commodity Channel Index (CCI - 商品通道指数,又名顺势指数)指标进行确认。基于此策略的交易程序代码,可由 MQL5 向导自动生成。