下载MetaTrader 5

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

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

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

2013.10.11 13:14
EA

MQL5 向导 - 基于 牛市约会线 / 熊市约会线形态的交易信号 + RSI - MetaTrader 5EA

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

显示:
683
等级:
投票: 18
\MQL5\Include\Expert\Signal\MySignals\
acml_rsi.mqh (7.96 KB)预览

MQL5 向导 可创建现成的交易程序,此程序基于客户端附带的 标准类库 (参见 在 MQL5 向导中创建现成交易程序 具体内容)。它可以快速验证您的交易想法,所有您需要做的就是创建您自己的交易信号类。这个类的结构及用例可参阅文章 MQL5 向导:如何创建交易信号模块

通常做法如下:交易信号子类由 CExpertSignal衍生出来,之后,必须用您自己的方法重写类中的 LongCondition()ShortCondition() 虚方法。

有本书 "Strategies of best traders(交易者最佳策略)" (俄语版),书中论述了许多交易策略,我们将注意力集中在反转 K 线形态上,并用 Stochastic, CCI, MFIRSI 振荡指标来确认。

最佳途径是创建分离的子类,此类由 CExpertSignal 中衍生,用于检查 K 线的形态结构。用于验证 K 线形态生成的交易信号,写一个 CCandlePattern 的衍生子类就足够了,并加入必要的特性(如,振荡指标确认)。

此处我们讨论的信号,基于 "牛市约会 / 熊市约会" 反转 K 线形态,确认则依赖 RSI(相对强度指数) 指标。这个交易信号模块基于 CCandlePattern 类,这是一个利用 K 线形态创建交易信号的简单例子。


1. "约会线" 反转 K 线形态

1.1. 牛市约会线

这个形态由两根收盘价相等(或相近)的阴线和阳线组成。这两根 K 线的实体必须大于平均实体长度。

"牛市约会线" 形态表明下行趋势可能反转。

图例. 1. "牛市约会线" 形态

图例. 1. "牛市约会线" 形态

识别 "牛市约会线" 形态已经在 CCandlePattern 类的 CheckPatternCheckPatternBullishMeetingLines() 方法中实现:

//+--------------------------------------------------------------------+
//| Checks formation of "Bullish Meeting Lines" candlestick pattern    |            
//+--------------------------------------------------------------------+
bool CCandlePattern::CheckPatternBullishMeetingLines()
  {
//--- 牛市约会线
   if((Open(2)-Close(2)>AvgBody(1))              && // 长阴
     ((Close(1)-Open(1))>AvgBody(1))             && // 长阳
      (MathAbs(Close(1)-Close(2))<0.1*AvgBody(1)))   // 接近十字星收盘
      return(true);
//---
   return(false);
  }

CCandlePattern 类的 CheckCandlestickPattern(CANDLE_PATTERN_BULLISH_MEETING_LINES) 方法用于检查 "牛市约会线" 形态的形状。


1.1. 熊市约会线

这个形态由两根收盘价相等(或相近)的阳线和阴线组成。这两根 K 线的实体必须大于平均实体长度。

"熊市约会线" 形态表明上行趋势可能反转。

图例. 2. "熊市约会线" 形态

图例. 2. "熊市约会线" 形态

识别 "熊市约会线" 形态已经在 CCandlePattern 类的 CheckPatternBearishMeetingLines() 方法中实现:

//+--------------------------------------------------------------------+
//| Checks formation of "Bearish Meeting Lines" candlestick pattern    |
//+--------------------------------------------------------------------+
bool CCandlePattern::CheckPatternBearishMeetingLines()
  {
//--- 熊市约会线
   if((Close(2)-Open(2)>AvgBody(1))             && // 长阳
     ((Open(1)-Close(1))>AvgBody(1))            && // 长阴
      (MathAbs(Close(1)-Close(2))<0.1*AvgBody(1)))  // 接近十字星收盘
      return(true);
//---
   return(false);
  }

CCandlePattern 类的 CheckCandlestickPattern(CANDLE_PATTERN_BEARISH_MEETING_LINES) 方法用于检查 "熊市约会线" 形态的形状。



2. RSI 指标确认交易信号

采用交易信号来开多单或空单,必须用 RSI 指标来确认。RSI 指标的数值必须低于/ 高于临界水平 (40 为多单,以及 60 为空单)。

已建仓位的平仓同样依靠 RSI 指标。可分 2 种情况完成:

  1. 如果 RSI 已经到达反向临界水平 (70 为多单 ,以及 30 为空单)
  2. 如果反转信号未被确认 (当 RSI 指标到达如下水平:30 为多单,以及 70 为空单)

图例 3. "熊市约会线" 形态,由 RSI 指标确认

图例. 3. "熊市约会线" 形态, 由 RSI 指标确认


  • int CML_RSI::LongCondition() - 检测开多单条件 (返回 80) 以及平空仓 (返回 40);
  • int CML_RSI::ShortCondition() - 检测开空单条件 (返回 80) 以及平多仓 (返回 40)。

2.1. 开多单/平空仓

  1. 这个 "牛市约会线" 形态的形状必须由 RSI 指标确认: RSI(1)<40 (最后完整的 RSI 指标数值必须小于 40)。

  2. 空单必须被平仓如果 RSI 指标上穿临界水平 (70 或 30)。

//+------------------------------------------------------------------+
//| Checks conditions for entry and exit from market                 |
//| 1) Market entry (open long position, result=80)                  |
//| 2) Market exit (close short position, result=40)                 |
//+------------------------------------------------------------------+
int CML_RSI::LongCondition()
  {
   int result=0;
//--- idx 可用于检测交易程序工作模式
//--- idx=0 - EA 在每个即时价格都检查交易条件
//--- idx=1 - EA 仅在每个新柱线建立时检查交易条件
   int idx   =StartIndex();
//--- 检查开多单条件
//--- 牛市约会线形态形状及 RSI<30
  if(CheckCandlestickPattern(CANDLE_PATTERN_BULLISH_MEETING_LINES) && (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)。

//+------------------------------------------------------------------+
//| Checks conditions for entry and exit from market                 |
//| 1) Market entry (open short position, result=80)                 |
//| 2) Market exit (close long position, result=40)                  |
//+------------------------------------------------------------------+
int CML_RSI::ShortCondition()
  {
   int result=0;
//--- idx 可用于检测交易程序工作模式
//--- idx=0 - EA 在每个即时价格都检查交易条件
//--- idx=1 - EA 仅在每个新柱线建立时检查交易条件
   int idx   =StartIndex();
//--- 检查开空单条件
//--- 熊市约会线形态及 RSI>60
  if(CheckCandlestickPattern(CANDLE_PATTERN_BEARISH_MEETING_LINES) && (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 向导创建交易程序

这个 CML_RSI 类没有包含在标准类库中,若要使用它,必须下载 acml_rsi.mqh 文件(参见附件)并且保存至 客户端目录\MQL5\Include\Expert\Signal\MySignals。同样处理 acandlepatterns.mqh 文件。重启 MetaEditor 代码编辑器之后,您就可以在 MQL5 向导中使用它们了。

为创建交易程序,启动 MQL5 向导

图例. 4. 使用 MQL5 向导创建交易程序

图例. 4. 使用 MQL5 向导创建交易程序

为交易程序起个特别名称:

图例. 5. 交易程序的一般属性

图例. 5. 交易程序的一般属性

之后我们要选择交易信号将会使用的模块。

图例. 6. 交易程序的信号属性

图例. 6. 交易程序的信号属性

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

加入 "基于 牛市约会线 / 熊市约会线 信号,由 RSI 指标确认" 信号模块:

图例. 7. 交易程序的信号属性

图例. 7. 交易程序的信号属性

交易信号模块被加入:

图例. 8. 交易程序的信号属性

图例. 8. 交易程序的信号属性

您可以选择任何移动属性,但是我们选择 "不使用移动止损":

图例. 9. 交易程序的移动属性

图例. 9. 交易程序的移动属性

关注资金管理属性,我们将使用 "固定手数交易":

图例. 10.  交易程序的资金管理属性

图例. 10. 交易程序的资金管理属性

通过点击 "完成" 按钮,我们将会得到生成的交易程序代码,名为 Expert_AML_RSI.mq5,它会被保存在 客户端目录\MQL5\Experts\。

交易程序生成的省缺输入参数:

//--- 主信号线输入参数
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// 止盈位 (点数)

必须替换为:

//--- 主信号线输入参数
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 向导生成的交易程序使用交易信号模块的 "投票数" 来决定开、平单。主模块(作为容器,它由所有添加模块组成)的表决功能也被使用,但它的 LongCondition() 和 ShortCondition() 方法永远返回 0。

这个主模块的投票结果也被用于对 "投票数" 进行平均。在我们的例子中我们已有: 主模块 + 1 个交易信号模块,所以我们在设置阀值时,将此事实加入。因为这个事实,用于开、平单的阀值必须设为 40=(0+80)/2 和 20=(0+40)/2。

Signal_StopLevel 和 Signal_TakeLevel 输入参数的值设为 0,它意味着无需止盈、止损,仅当平仓条件为真时才会平仓。


2.4. 历史回测结果

我们来讨论交易程序基于历史数据的回测 (EURUSD H1, 测试周期: 2010.01.01-2011.03.01, PeriodRSI=11, MA_period=3)。

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

图例. 11. 交易程序的测试结果,基于 牛市约会线 / 熊市约会线 + RSI

图例. 11. 交易程序的测试结果,基于 牛市约会线 / 熊市约会线 + RSI


最佳输入参数集合可借助 MetaTrader 5 客户端的 策略测试员 发现。

由 MQL5 向导创建的交易程序代码,附加在 expert_aml_rsi.mq5。

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

MQL5 向导 - 基于 牛市约会线 / 熊市约会线形态的交易信号 + MFI MQL5 向导 - 基于 牛市约会线 / 熊市约会线形态的交易信号 + MFI

基于 牛市约会线 / 熊市约会线形态的交易信号,由 MFI (市场促进指数)指标确认.基于此交易策略的交易程序代码可使用 MQL5 向导自动生成。

MQL5 向导 - 基于 牛市约会线 / 熊市约会线形态的交易信号 + CCI MQL5 向导 - 基于 牛市约会线 / 熊市约会线形态的交易信号 + CCI

基于 牛市约会线 / 熊市约会线形态的交易信号,由 CCI (商品通道指数)指标确认.基于此交易策略的交易程序代码可使用 MQL5 向导自动生成。

MQL5 向导 - 基于 早晨之星 / 黄昏之星形态的交易信号 + CCI MQL5 向导 - 基于 早晨之星 / 黄昏之星形态的交易信号 + CCI

基于 早晨之星 / 黄昏之星形态的交易信号,由 Commodity Channel Index (CCI - 商品通道指数) 指标确认。基于此交易策略的交易程序代码可使用 MQL5 向导自动生成。

MQL5 向导 -  基于Dark Cloud Cover/Piercing Line 和 Stochastic 的交易信号。 MQL5 向导 - 基于Dark Cloud Cover/Piercing Line 和 Stochastic 的交易信号。

本节讨论基于蜡烛图模式 "乌云盖顶(Dark Cloud Cover)/刺穿线(PiercingLine) " 并由Stochastic指标确认的交易信号。基于该策略的EA交易的代码可以被MQL5向导自动生成