下载MetaTrader 5

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

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

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

2013.10.22 09:20
EA

MQL5 向导 - 基于乌云盖顶(Dark Cloud Cover)/刺穿线(PiercingLine)和RSI的交易信号。 - MetaTrader 5EA

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

显示:
768
等级:
投票: 12
\MQL5\Include\Expert\Signal\MySignals\

MQL5向导允许基于与客户终端一起提供的 标准库 类快速创建EA交易。 (详细信息参考 使用MQL5 向导快速创建EA交易)。它允许快速检测你的交易想法,你所要做的只是创建你自己的交易信号类。这个类的结构和例子可以在MQL5向导:如何创建交易信号的一个模块一文中找到。

总的思想如下:交易信号的类继承CExpertSignal,下一步,需要使用你自己的方法覆盖 LongCondition()ShortCondition() 这两个虚拟方法。

有一本书叫"最佳交易者的策略", 其中讨论了许多交易策略,我们将集中在由 Stochastic, CCI, MFIRSI这些震荡指标确认的反转K线图模式。

最好的方式是创建继承自CExpertSignal的单独类来检查K线图模式的形成。为确认由K线图模式产生的交易信号,编写继承于CCandlePattern的类并在其中增加必要的特性(比如:由oscillators确认)就可以了。

这里我们将讨论基于 "乌云盖顶(Dark Cloud Cover)/刺穿线(PiercingLine) " K线图反转模式并由RSI指标确认的信号。. 交易信号模块基于 CCandlePattern 类,它是使用K线图模式创建交易信号的简单实例。


1. K线图反转模式“乌云盖顶(Dark Cloud Cover)”和“刺穿线(PiercingLine) ”

1.1. 乌云盖顶

它是发生在上升趋势末尾转熊的K线图反转。前一天是一根大阳线,第二天跳空高开。然后,第二天收盘在前一天的中点之下。

Fig. 1. "乌云盖顶" K线图模式

图1. "乌云盖顶" K线图模式

"乌云盖顶" 模式的识别实现在CCandlePattern类的CheckPatternDarkCloudCover()方法:

//+------------------------------------------------------------------+
//| 检测"乌云盖顶" K线图模式的形成                                       |
//+------------------------------------------------------------------+
bool CCandlePattern::CheckPatternDarkCloudCover()
  {
//--- 乌云盖顶 
   if((Close(2)-Open(2)>AvgBody(1))  && // (大阳线)
      (Close(1)<Close(2))            && // 
      (Close(1)>Open(2))             && // (在前一个实体内收盘)
      (MidOpenClose(2)>CloseAvg(1))  && // (上升趋势)
      (Open(1)>High(2)))                // (跳空高开)
      return(true);
//---
   return(false);
  }

CCandlePattern类的 CheckCandlestickPattern(CANDLE_PATTERN_DARK_CLOUD_COVER) 方法被用来检测"乌云盖顶" K线图模式的形成。


1.2. Piercing Line

在第二日的下跌缺口延续了跌势。然而,第二天的收盘在前一天的中点之上。这表明熊的底部可能正在形成。用柱图时没有用K线图时价格动向看起来那么清晰。第二天的收盘向上一天的实体渗透的越多,反转信号越可能成功。.

Fig. 2. "刺穿线" K线图模式

Fig. 2. "刺穿线" K线图模式

“刺穿线”模式的识别实现在CCandlePattern类的CheckPatternPiercingLine()方法:

//+------------------------------------------------------------------+
//| 检测"刺穿线" K线图模式的形成                                        |
//+------------------------------------------------------------------+
bool CCandlePattern::CheckPatternPiercingLine()
  {
//--- 刺穿线
   if((Close(1)-Open(1)>AvgBody(1)) && // (大阳线)
      (Open(2)-Close(2)>AvgBody(1)) && // (大阴线)
      (Close(1)>Close(2))           && //  
      (Close(1)<Open(2))            && // (在前一个实体内收盘) 
      (MidOpenClose(2)<CloseAvg(2)) && // (下降趋势)
      (Open(1)<Low(2)))                // (以比前一个柱线最低价更低的价格开盘) 
      return(true);
//---
   return(false);
  }

CCandlePattern类的 CheckCandlestickPattern(CANDLE_PATTERN_PIERCING_LINE) 方法被用来检测"刺穿线" K线图模式的形成。


2. 由RSI指标确认的交易信号

建立多头或空头头寸的交易信号必须由RSI指标确认。RSI值必须小于/大于临界水平(多头头寸为40而空头头寸为60)。

平掉持仓头寸取决于RSI的值。它有两种情况:

  1. 如果RSI达到相反的临界水平(多头头寸为70而空头头寸为30)
  2. 如果反转信号没有被确认(RSI达到以下水平:多头头寸为30而空头头寸为70)

Fig. 3. 由RSI指标确认的"乌云盖顶" 模式

Fig. 3. 由RSI指标确认的"乌云盖顶" 模式


  • int CDC_PL_RSI::LongCondition() - 检查建立多头头寸 (返回80) 和平掉空头头寸(返回40)的条件;
  • int CDC_PL_RSI::ShortCondition() - 检查建立空头头寸 (返回80) 和平掉多头头寸(返回40)的条件。

2.1. 建立多头头寸/平掉空头头寸

  1. “刺穿线”模式的形成必须由 RSI 指标确认: RSI(1)<-40 (最后结束柱线的RSI值必须小于40)。

  2. 如果RSI 指标向上穿越临界水平(70或30),空头头寸必须被平仓.

//+------------------------------------------------------------------+
//| 检测进入和退出市场的条件                                             |
//| 1) 市场进入 (建立多头头寸, result=80)                               |
//| 2) 市场退出 (平掉空头头寸, result=40)                               |
//+------------------------------------------------------------------+
int CDC_PL_RSI::LongCondition()
  {
   int result=0;
//--- idx可被用来决定EA交易工作模式
//--- idx=0 - 此种情况EA在每个即时价位检查交易条件
//--- idx=1 - 此种情况EA 只在新建柱线时检查交易条件
   int idx   =StartIndex();
//--- 检查建立多头头寸的条件
//--- 刺穿线模式形成并且RSI小于30
  if(CheckCandlestickPattern(CANDLE_PATTERN_PIERCING_LINE) && (RSI(1)<40))
     result=80;
//--- 检查平掉空头头寸的条件
//--- 信号线跨越超买超卖水平( 向上超过30, 向上超过70) 
  if(((RSI(1)>30) && (RSI(2)<30)) || ((RSI(1)>70) && (RSI(2)<70)))
     result=40;
//---返回结果
   return(result);
  }

2.2. 建立空头尺寸/平掉多头尺寸

  1. “乌云盖顶”模式的形成必须由 RSI 指标确认: RSI(1)>60 (最后结束柱线的RSI指标值必须大于60)。

  2. 如果RSI 指标向下穿越临界水平(70或30),多头头寸必须被平仓.

//+------------------------------------------------------------------+
//| 检测进入和退出市场的条件                                            |
//| 1) 市场进入 (建立空头头寸, result=80)                               |
//| 2) 市场退出 (平掉多头头寸, result=40)                               |
//+------------------------------------------------------------------+
int CDC_PL_RSI::ShortCondition()
  {
   int result=0;
//--- idx可被用来决定EA交易工作模式
//--- idx=0 - 此种情况EA在每个即时价位检查交易条件
//--- idx=1 - 此种情况EA 只在新建柱线时检查交易条件
   int idx   =StartIndex();
//---检查建立空头头寸的条件
//--- 乌云盖顶模式形成并且RSI大于60
  if(CheckCandlestickPattern(CANDLE_PATTERN_DARK_CLOUD_COVER) && (RSI(1)>60))
     result=80;
//---检查平掉多头头寸的条件
//---信号线跨越超买超卖水平( 向下穿越70, 向下穿越30) 
   if(((RSI(1)<70) && (RSI(2)>70)) || ((RSI(1)<30) && (RSI(2)>30)))
     result=40;
//---返回结果
   return(result);
  }


2.3. 使用MQL5向导创造EA 交易

CDC_PL_RSI类不包括在标准库类中, 为使用它, 必需下载adc_pl_rsi.mqh文件(见附件)并将它保存到client_terminal_data\folder\MQL5\Include\Expert\Signal\MySignals。acandlepatterns.mqh文件也一样。你可以在重启MetaEditor之后在MQL5向导中使用它。

为创建EA交易请启动 MQL5向导:

Fig. 4. 使用MQL5向导创造EA 交易

Fig. 4. 使用MQL5向导创造EA 交易

让我们指定EA交易的名称:

Fig. 5. EA交易的通用属性

Fig. 5. EA交易的通用属性

在这之后我们需要选择将被使用的交易信号模块。

Fig. 6. EA交易的信号属性

Fig. 6. EA交易的信号属性

在我们的例子中,我们只使用一个交易信号模块。

添加交易信号模块 "Signals based on Dark Cloud Cover/Piercing Line confirmed by RSI" :

Fig. 7. EA交易的信号属性

Fig. 7. EA交易的信号属性

添加的交易信号模块:

Fig. 8. EA交易的信号属性

Fig. 8. EA交易的信号属性

你可以选择任意的追踪属性, 但我们将使用 "Trailing Stop not used(不使用移动止损)":

Fig. 9. EA交易的追踪属性

Fig. 9. EA交易的追踪属性

关于资金管理属性,我们将使用“Trading with fixed trade volume(以固定交易手数交易)”:

Fig. 10. EA交易的资金管理属性

Fig. 10. EA交易的资金管理属性

通过按”Finish(完成)“按钮,我们将得到生成的EA交易的代码,代码放置在Expert_ADC_PL_RSI.mq5, 它将被保存到 terminal_data_folder\MQL5\Experts\.

所生成EA交易的默认输入参数:

//--- inputs for main signal
input int            Signal_ThresholdOpen   =10;     // 建仓的信号阈值 [0...100]
input int            Signal_ThresholdClose  =10;     //  平仓的信号阈 [0...100]
input double         Signal_PriceLevel      =0.0;    // 执行交易的价格水平
input double         Signal_StopLevel       =50.0;   // 止损水平 (点数)
input double         Signal_TakeLevel       =50.0// 止盈水平 (点数)

必须被替换为:

//--- inputs for main signal
input int            Signal_ThresholdOpen   =40;     // 建仓的信号阈值 [0...100]
input int            Signal_ThresholdClose  =20;     // 平仓的信号阈值 [0...100]
input double         Signal_PriceLevel      =0.0;    //  执行交易的价格水平
input double         Signal_StopLevel       =0.0;    // 止损水平 (点数)
input double         Signal_TakeLevel       =0.0;    // 止盈水平 (点数)

Signal_ThresholdOpen/Signal_ThresholdClose输入参数允许指定建仓和平仓的阈值水平。

在交易信号类的LongCondition() 和ShortCondition()方法的代码中我们指定了阈值的固定值:

  • 建立头寸: 80;
  • 平掉头寸: 40.

由MQL5向导创建的EA交易使用来自交易信号模块的“投票”建立和平掉头寸。主模块(作为容器,它由所有增加的模块组成)的投票也被使用, 但是它的LongCondition()和ShortCondition()方法总是返回0。

主模块的投票结果也被用在“投票”的均算中。在我们的例子中我们有:  主模块 + 1个交易信号模块, 所以我们需要在设置阀值时考虑这个事实。因为这个事实ThresholdOpen和ThresholdClose必须被设置为40=(0+80)/2和20=(0+40)/2。

Signal_StopLevel和Signal_TakeLevel输入参数的值被设置为0, 它意味着只有关闭条件为true时才平仓。


2.4. 历史回测结果

让我们来考察EA交易在历史数据(EURUSD H1,自定义时段:2010.01.01-2011.02.23, PeriodRSI=20, MA_period=14)上的回溯测试。

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

Fig. 11. 基于乌云盖顶/刺穿线和RSI的EA交易的测试结果

Fig. 11. 基于乌云盖顶/刺穿线和RSI的EA交易的测试结果


最优输入参数集合可使用MetaTrader 5客户端的 Strategy Tester找到。

由MQL5向导创建的EA交易代码附加在expert_ad_pl_rsi.mq5.

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

加速震荡(AC) 加速震荡(AC)

加速/减速技术指标(AC)用于衡量当前驱动力的加速和减速。

平均趋向指数(ADX) 平均趋向指数(ADX)

平均趋向指数指标(ADX)用来帮助判断市场是否存在趋势。

60 EMA profit 60 EMA profit

直观显示60EMA均线交易系统的赢利和亏损。

Ticks Volume 指标 Ticks Volume 指标

在期货市场上,交易量的数据会有一天的延迟,为了解决这个问题,许多分析员使用 tick volume 指标 (tick volume,订单交易量).