使用MQL5 Wizard创建基于吞没形态和RSI的交易信号

Mike 2011.03.10 19:55 52 0 0
附件

大家好,今天我们来聊聊如何使用MQL5 Wizard来创建基于吞没形态和RSI指标的交易信号。这个工具可以帮助我们快速生成交易系统,尤其适合那些想要验证交易思路的朋友。

在使用MQL5 Wizard之前,我们需要了解如何创建自己的交易信号类。关于这一点的详细信息可以参考MQL5 Wizard: 如何创建交易信号模块。基本思路是,我们的交易信号类需要继承自CExpertSignal。然后,我们需要重写LongCondition()ShortCondition()这两个虚方法。

我们将重点讨论“看涨吞没”和“看跌吞没”这两种反转蜡烛形态,并结合RSI指标进行确认。这里我们将利用CCandlePattern类来实现信号的生成。

1. 吞没形态的识别

1.1. 看涨吞没

看涨吞没形态是在下跌趋势中形成的,当一根小黑蜡烛后面跟随一根大白蜡烛,且大蜡烛完全吞没了前一天的蜡烛。小蜡烛的影线较短,使得大蜡烛的实体能够覆盖前一天的蜡烛。

看涨吞没形态

图1. 看涨吞没蜡烛形态

CCandlePattern类中的CheckPatternBullishEngulfing()方法实现了看涨吞没形态的识别。

//+------------------------------------------------------------------+
//| 检查“看涨吞没”蜡烛形态的形成 |
//+------------------------------------------------------------------+
bool CCandlePattern::CheckPatternBullishEngulfing()
  {
//--- 看涨吞没
   if((Open(2)>Close(2))             &&  // 前一根蜡烛是看跌
      (Close(1)-Open(1)>AvgBody(1))  &&  // 看涨蜡烛的实体大于平均实体
      (Close(1)>Open(2))             &&  // 看涨蜡烛的收盘价高于看跌蜡烛的开盘价
      (MidOpenClose(2)<CloseAvg(2))  &&  // 下跌趋势
      (Open(1)<Close(2)))                // 看涨蜡烛的开盘价低于看跌蜡烛的收盘价
      return(true);
//---
   return(false);
  }

CheckCandlestickPattern(CANDLE_PATTERN_BULLISH_ENGULFING)方法用于检查“看涨吞没”蜡烛形态的形成。


1.2. 看跌吞没

看跌吞没形态是在上涨趋势中形成的,当一根小白蜡烛后面跟随一根大黑蜡烛,且大蜡烛完全吞没了前一天的蜡烛。小蜡烛的影线较短,使得大蜡烛的实体能够覆盖前一天的蜡烛。

看跌吞没形态

图2. 看跌吞没蜡烛形态

CCandlePattern类中的CheckPatternBearishEngulfing()方法实现了看跌吞没形态的识别。

//+------------------------------------------------------------------+
//| 检查“看跌吞没”蜡烛形态的形成 |
//+------------------------------------------------------------------+
bool CCandlePattern::CheckPatternBearishEngulfing()
  {
//--- 看跌吞没
   if((Open(2)<Close(2))            &&  // 前一根蜡烛是看涨
      (Open(1)-Close(1)>AvgBody(1)) &&  // 看跌蜡烛的实体大于平均实体
      (Close(1)<Open(2))            &&  // 看跌蜡烛的收盘价低于看涨蜡烛的开盘价
      (MidOpenClose(2)>CloseAvg(2)) &&  // 上涨趋势
      (Open(1)>Close(2)))               // 看跌蜡烛的开盘价高于看涨蜡烛的收盘价
      return(true);
//---
   return(false);
  }

CheckCandlestickPattern(CANDLE_PATTERN_BEARISH_ENGULFING)方法用于检查“看跌吞没”蜡烛形态的形成。


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

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

已开头寸的平仓取决于RSI的值,平仓可以在以下两种情况下进行:

  1. 如果RSI达到相反的关键水平(多头为70,空头为30)
  2. 如果反转信号未确认(当RSI达到以下水平时:多头为30,空头为70)

看涨吞没形态,RSI确认

图3. 看涨吞没形态,RSI确认


  • int CBE_BE_RSI::LongCondition() - 检查开多头条件(返回80)和平空头条件(返回40);
  • int CBE_BE_RSI::ShortCondition() - 检查开空头条件(返回80)和平多头条件(返回40)。

2.1. 开多头/平空头

  1. “看涨吞没”形态的形成必须经过RSI的确认:RSI(1)<40(最近完成的蜡烛的RSI值必须小于40)。

  2. RSI指标向上突破关键水平70或30时,必须平空头头寸。

//+------------------------------------------------------------------+
//| 检查市场进出条件 |
//| 1) 市场进场(开多头,结果=80) |
//| 2) 市场出场(平空头,结果=40) |
//+------------------------------------------------------------------+
int CBE_BE_RSI::LongCondition()
  {
   int result=0;
   //--- idx用于确定EA工作模式
   //--- idx=0 - EA每个tick检查交易条件
   //--- idx=1 - EA仅在新闻蜡烛时检查交易条件
   int idx   =StartIndex();
   //--- 检查开多头条件
   //--- 看涨吞没形态和RSI<30
  if(CheckCandlestickPattern(CANDLE_PATTERN_BULLISH_ENGULFING) && (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 CBE_BE_RSI::ShortCondition()
  {
   int result=0;
   //--- idx用于确定EA工作模式
   //--- idx=0 - EA每个tick检查交易条件
   //--- idx=1 - EA仅在新闻蜡烛时检查交易条件
   int idx   =StartIndex();
   //--- 检查开空头条件
   //--- 看跌吞没形态和RSI>60
  if(CheckCandlestickPattern(CANDLE_PATTERN_BEARISH_ENGULFING) && (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创建专家顾问

CBE_BE_RSI类不在标准库类中使用,要想使用它,需要下载acml_rsi.mqh文件(见附件)并将其保存到client_terminal_data\MQL5\Include\Expert\Signal\MySignals文件夹中。同样需要对acandlepatterns.mqh文件进行相同的操作。重启MetaEditor后即可在MQL5 Wizard中使用。

创建专家顾问的步骤如下:启动MQL5 Wizard

使用MQL5 Wizard创建专家顾问

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

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

专家顾问的基本属性

图5. 专家顾问的基本属性

之后需要选择所用的交易信号模块。

专家顾问的信号属性

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

在我们的案例中,只使用一个交易信号模块。
添加“基于RSI确认的看涨吞没/看跌吞没信号”交易信号模块:

专家顾问的信号属性

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

信号模块已添加:

专家顾问的信号属性

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

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

专家顾问的跟踪属性

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

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

专家顾问的资金管理属性

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

按下“完成”按钮后,我们将得到生成的专家顾问代码,保存在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,测试周期:2010.01.01-2011.03.04,PeriodRSI=11,MA_period=5)。

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

专家顾问的回测结果

图11. 基于看涨吞没/看跌吞没+RSI的专家顾问测试结果


使用MetaTrader 5的策略测试器可以找到最佳的输入参数设置。

由MQL5 Wizard创建的专家顾问代码附在expert_abe_be_rsi.mq5中。


列表
评论 0