首页 系统交易 帖子

利用MQL5 Wizard创建基于牛市与熊市哈拉米形态的交易信号与RSI策略

附件
313.zip (6.47 KB, 下载 0次)

今天,我们来聊聊如何利用MQL5 Wizard创建基于牛市与熊市哈拉米形态的交易信号,同时结合RSI指标进行确认。这种方法可以帮助我们快速验证交易理念,构建属于自己的交易信号类。

要实现这一点,我们的交易信号类需要继承自CExpertSignal。接下来,我们需要重写LongCondition()ShortCondition()这两个虚拟方法,以便实现自己的交易逻辑。

参考一本关于交易策略的书籍《最佳交易者的策略》,其中讨论了许多交易策略。我们将重点关注反转蜡烛形态,并通过RSI等指标进行确认。

1. 牛市与熊市哈拉米反转蜡烛形态

1.1 牛市哈拉米

牛市哈拉米反转形态通常出现在下跌趋势中,由一根大蜡烛后跟随一根小蜡烛,且小蜡烛的实体位于大蜡烛的实体范围内。这种形态提示我们下跌趋势可能会反转,是进入多头仓位的好时机。第二根蜡烛通常是向上跳空开盘的。

第二根(白色)蜡烛越小,反转的可能性越大。

牛市哈拉米蜡烛形态

图1. 牛市哈拉米蜡烛形态

“牛市哈拉米”形态的识别方法实现于CCandlePattern类中的CheckPatternBullishHarami()方法。

//+------------------------------------------------------------------+
//| 检查"牛市哈拉米"蜡烛形态的形成         |
//+------------------------------------------------------------------+
bool CCandlePattern::CheckPatternBullishHarami()
  {
//--- 牛市哈拉米
   if((Close(1)>Open(1))              && // 最后一根蜡烛是上涨的(白天)
     ((Open(2)-Close(2)>AvgBody(1))  && // 前一根蜡烛是下跌的,且其实体大于平均值(长黑)
     ((Close(1)<Open(2))              && // 牛市蜡烛的收盘价低于熊市蜡烛的开盘价
      (Open(1)>Close(2)))              && // 牛市蜡烛的开盘价高于熊市蜡烛的收盘价
      (MidPoint(2)<CloseAvg(2)))         // 下跌趋势
      return(true);
//---
   return(false);
  }

CheckCandlestickPattern(CANDLE_PATTERN_BULLISH_HARAMI)方法用于检查“牛市哈拉米”蜡烛形态的形成。


1.2 熊市哈拉米

熊市哈拉米反转形态出现在上涨趋势中,由一根大蜡烛后跟随一根小蜡烛,且小蜡烛的实体位于大蜡烛的实体范围内。该形态提示我们上涨趋势可能会反转,是进入空头仓位的好时机。第二根蜡烛通常是向下跳空开盘的。

第二根(黑色)蜡烛越小,反转的可能性越大。

熊市哈拉米蜡烛形态

图2. 熊市哈拉米蜡烛形态

“熊市哈拉米”形态的识别方法实现于CCandlePattern类中的CheckPatternBearishHarami()方法。

//+------------------------------------------------------------------+
//| 检查"熊市哈拉米"蜡烛形态的形成         |
//+------------------------------------------------------------------+
bool CCandlePattern::CheckPatternBearishHarami()
  {
//--- 熊市哈拉米
   if((Close(1)<Open(1))              && // 最后一根蜡烛是下跌的(黑天)
     ((Close(2)-Open(2)>AvgBody(1))  && // 前一根蜡烛是上涨的,且其实体大于平均值(长白)
     ((Close(1)>Open(2))              && // 熊市蜡烛的收盘价高于牛市蜡烛的开盘价
      (Open(1)<Close(2)))              && // 熊市蜡烛的开盘价低于牛市蜡烛的收盘价
      (MidPoint(2)>CloseAvg(2)))         // 上涨趋势
      return(true);
//---
   return(false);
  }

CheckCandlestickPattern(CANDLE_PATTERN_BEARISH_HARAMI)方法用于检查“熊市哈拉米”蜡烛形态的形成。


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

打开多头或空头仓位的交易信号必须得到RSI指标的确认。RSI值需低于40(开多头)或高于60(开空头)。

平仓时机取决于RSI的值,主要有以下两种情况:

  1. 当RSI到达相反的临界水平(多头仓位70,空头仓位30)
  2. 当反转信号未能确认(RSI达到30(多头)或70(空头))

RSI确认的牛市哈拉米形态

图3. 通过RSI确认的“牛市哈拉米”形态

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

2.1. 打开多头仓位/平空头仓位

  1. “牛市哈拉米”形态必须得到RSI指标的确认:RSI(1)<40(最后一根蜡烛的RSI值必须低于40)。

  2. 如果RSI指标向上穿越临界水平70或30,则必需平空头仓位。

//+------------------------------------------------------------------+
//| 检查市场的入场与出场条件                 |
//| 1) 市场入场(打开多头仓位,结果=80)                  |
//| 2) 市场出场(平空头仓位,结果=40)                 |
//+------------------------------------------------------------------+
int CBH_BH_RSI::LongCondition()
  {
   int result=0;
//--- idx可以用于确定EA的工作模式
//--- idx=0 - EA在每个tick上检查交易条件
//--- idx=1 - EA仅在新闻蜡烛上检查交易条件
   int idx   =StartIndex();
//--- 检查打开多头仓位的条件
//--- 牛市哈拉米形态和RSI<30
  if(CheckCandlestickPattern(CANDLE_PATTERN_BULLISH_HARAMI) && (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 CBH_BH_RSI::ShortCondition()
  {
   int result=0;
//--- idx可以用于确定EA的工作模式
//--- idx=0 - EA在每个tick上检查交易条件
//--- idx=1 - EA仅在新闻蜡烛上检查交易条件
   int idx   =StartIndex();
//--- 检查打开空头仓位的条件
//--- 熊市哈拉米形态和RSI>60
  if(CheckCandlestickPattern(CANDLE_PATTERN_BEARISH_HARAMI) && (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创建专家顾问

CBH_BH_RSI类不包含在标准库中,要使用它,需要下载acml_rsi.mqh文件(见附件),并将其保存在client_terminal_data\folder\MQL5\Include\Expert\Signal\MySignals文件夹中。acandlepatterns.mqh文件也应如此处理。在重启MetaEditor后,可以在MQL5 Wizard中使用。

要创建一个专家顾问,启动MQL5 Wizard

创建专家顾问

图4. 创建专家顾问

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

专家顾问的一般属性

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

然后选择要使用的交易信号模块。

专家顾问的信号属性

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

在我们的案例中,我们只使用一个交易信号模块。
添加“基于牛市与熊市哈拉米形态确认的信号”交易信号模块:

专家顾问的信号属性

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

交易信号模块已添加:

专家顾问的信号属性

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

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

专家顾问的止损属性

图9. 专家顾问的止损属性

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

专家顾问的资金管理属性

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

按下“完成”按钮后,我们将获取生成的专家顾问代码,该代码位于Expert_ABH_BH_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,测试周期:2010.01.01-2011.03.11,PeriodRSI=37,MA_period=7)上的专家顾问回测。

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

基于牛市与熊市哈拉米形态的专家顾问测试结果

图11. 基于牛市与熊市哈拉米形态的专家顾问测试结果


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

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

相关帖子

评论 (0)