使用MQL5 Wizard创建基于RSI的牛市与熊市会面线交易信号

Mike 2011.03.24 20:39 48 0 0
附件

大家好!今天我们来聊聊 MQL5 Wizard,这是一个帮助我们快速创建交易系统的工具。利用这个工具,我们可以基于 标准库 的类,快速生成可以运行的交易信号。

想要验证你的交易思路,只需创建一个属于自己的交易信号类。关于这个类的结构和示例,可以参考这篇文章 MQL5 Wizard: 如何创建交易信号模块

我们先了解一下基本思路:交易信号类是从 CExpertSignal 派生的,接下来,我们需要重写 LongCondition()ShortCondition() 这两个虚方法,使用我们自己的逻辑。

在这里,我想推荐一本书 《最佳交易者的策略》(俄文),里面有很多交易策略,我们将集中讨论反转蜡烛图形,特别是经过 随机指标CCIMFIRSI 等指标的确认。

最佳的做法是创建一个单独的类,继承自 CExpertSignal,用来检查蜡烛图形的形成。为了确认由蜡烛图形生成的交易信号,只需要编写一个继承自 CCandlePattern 的类,并在其中添加必要的特性(例如,通过振荡器确认)。

接下来,我们将讨论基于“牛市会面线”反转蜡烛图形的信号,并用 RSI 指标进行确认。这个交易信号模块是基于 CCandlePattern 类的一个简单示例,展示了如何使用蜡烛图形创建交易信号。

1. “会面线”反转蜡烛图形

1.1. 牛市会面线

这个形态由两根蜡烛(熊市和牛市)组成,收盘价相等(或非常接近)。这两根蜡烛的实体必须大于平均实体长度。

“牛市会面线”形态表明了下跌趋势的反转。

图1. 牛市会面线形态

图1. 牛市会面线形态

“牛市会面线”形态的识别是在 CheckPatternBullishMeetingLines() 方法中实现的:

//+--------------------------------------------------------------------+
//| 检查“牛市会面线”蜡烛图形的形成 |
//+--------------------------------------------------------------------+
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)))   // doji 收盘
      return(true);
//---
   return(false);
  }

CheckCandlestickPattern(CANDLE_PATTERN_BULLISH_MEETING_LINES) 方法用于检查“牛市会面线”蜡烛图形的形成。


1.2. 熊市会面线

这个形态由两根蜡烛(牛市和熊市)组成,收盘价相等(或非常接近)。这两根蜡烛的实体必须大于平均实体长度。

“熊市会面线”形态表明了上涨趋势的反转。

图2. 熊市会面线形态

图2. 熊市会面线形态

“熊市会面线”形态的识别是在 CheckPatternBearishMeetingLines() 方法中实现的:

//+--------------------------------------------------------------------+
//| 检查“熊市会面线”蜡烛图形的形成 |
//+--------------------------------------------------------------------+
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)))  // doji 收盘
      return(true);
//---
   return(false);
  }

CheckCandlestickPattern(CANDLE_PATTERN_BEARISH_MEETING_LINES) 方法用于检查“熊市会面线”蜡烛图形的形成。



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

打开多头或空头仓位的交易信号必须通过 RSI 指标确认。RSI的值必须低于/高于关键水平(多头仓位为40,空头仓位为60)。

已开仓位的关闭取决于 RSI 的值。可以在以下两种情况下进行关闭:

  • 如果RSI达到相反的关键水平(多头仓位为70,空头仓位为30)
  • 如果反向信号未得到确认(当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,则必须关闭空头仓位。

//+------------------------------------------------------------------+
//| 检查市场的进出条件 |
//| 1) 市场入场(开多头仓位,结果=80) |
//| 2) 市场退出(关闭空头仓位,结果=40) |
//+------------------------------------------------------------------+
int CML_RSI::LongCondition()
  {
   int result=0;
//--- idx可以用来确定专家顾问的工作模式
//--- idx=0 - 在这种情况下,EA在每个tick上检查交易条件
//--- 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,则必须关闭多头仓位。

//+------------------------------------------------------------------+
//| 检查市场的进出条件 |
//| 1) 市场入场(开空头仓位,结果=80) |
//| 2) 市场退出(关闭多头仓位,结果=40) |
//+------------------------------------------------------------------+
int CML_RSI::ShortCondition()
  {
   int result=0;
//--- idx可以用来确定专家顾问的工作模式
//--- idx=0 - 在这种情况下,EA在每个tick上检查交易条件
//--- 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 Wizard创建专家顾问

CML_RSI 类不包含在标准库中,使用它前需要下载 acml_rsi.mqh 文件(见附件),并将其保存到 client_terminal_data_folder\MQL5\Include\Expert\Signal\MySignals。对 acandlepatterns.mqh 文件也要做同样处理。重启 MetaEditor 后即可在 MQL5 Wizard 中使用这些文件。

启动 MQL5 Wizard 创建专家顾问:

图4. 使用MQL5 Wizard创建专家顾问

图4. 使用MQL5 Wizard创建专家顾问

接下来,指定专家顾问的名称:

图5. 专家顾问的一般属性

图5. 专家顾问的一般属性

然后,我们需要选择使用的交易信号模块。

图6. 专家顾问的信号属性

图6. 专家顾问的信号属性

在我们的案例中,只使用一个交易信号模块。
添加基于“牛市/熊市会面线确认的RSI”模块的交易信号:

图7. 专家顾问的信号属性

图7. 专家顾问的信号属性

交易信号模块已添加:

图8. 专家顾问的信号属性

图8. 专家顾问的信号属性

可以选择任何跟踪属性,但我们将使用“未使用跟踪止损”:

图9. 专家顾问的跟踪属性

图9. 专家顾问的跟踪属性

关于资金管理属性,我们将使用“以固定交易量进行交易”:

图10. 专家顾问的资金管理属性

图10. 专家顾问的资金管理属性

点击“完成”按钮后,我们将得到生成的专家顾问代码,位于 Expert_AML_RSI.mq5 中,保存于 terminal_data_folder\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 Wizard 生成的专家顾问是通过信号模块的“投票”来开仓和平仓的。主模块的投票结果(作为容器,它包含所有添加的模块)也会被使用,但其 LongCondition() 和 ShortCondition() 方法始终返回 0。

主模块的投票结果也用于“投票”平均。在我们的案例中,我们有:主模块 + 1 个交易信号模块,因此在设置阈值时需要考虑这一点。因为这个原因,ThresholdOpen 和 ThresholdClose 必须设置为 40=(0+80)/2 和 20=(0+40)/2。

Signal_StopLevel 和 Signal_TakeLevel 输入参数的值设置为 0,意味着只有在满足平仓条件时才能关闭仓位。


2.4. 历史回测结果

接下来,让我们看看在历史数据(EURUSD H1,测试期间:2000.01.01-2011.03.01,PeriodRSI=11,MA_period=3)上进行的专家顾问回测。

在创建专家顾问时,我们使用了固定交易量(固定手数交易,0.1),未使用跟踪止损算法(未使用跟踪止损)。

图11. 基于牛市/熊市会面线和RSI的专家顾问测试结果

图11. 基于牛市/熊市会面线和RSI的专家顾问测试结果


最佳输入参数集可以通过 MetaTrader 5 客户端终端的策略测试器 找到。

使用 MQL5 Wizard 创建的专家顾问代码已经附在 expert_aml_rsi.mq5 文件中。

列表
评论 0