首页 系统交易 帖子

使用 MQL5 Wizard 创建基于 Bullish Harami/Bearish Harami 和 CCI 的交易信号

附件
311.zip (6.48 KB, 下载 2次)

大家好!今天我们要聊聊如何使用 MQL5 Wizard 创建交易信号,尤其是基于 Bullish Harami 和 Bearish Harami 的反转蜡烛图模式,并结合 CCI 指标 的信号确认。

MQL5 Wizard 允许我们快速创建基于标准库类的现成交易顾问(Expert Advisors)。你只需要创建自己的交易信号类,就能迅速验证你的交易想法。详细的结构和示例可以参考文章 MQL5 Wizard: 如何创建交易信号模块

我们首先需要了解 Bullish Harami 和 Bearish Harami 这两个反转蜡烛图模式。

1. Bullish Harami 和 Bearish Harami 反转蜡烛图模式

1.1. Bullish Harami

Bullish Harami 反转模式出现在下跌趋势中,通常是一个大蜡烛后面跟随一个小蜡烛,且其实体位于大蜡烛的垂直范围内。这表明下跌趋势可能会反转,是时候考虑入场做多了。第二根蜡烛在开盘时会出现向上跳空。第二根蜡烛越小,反转的可能性越大。

Bullish Harami 反转模式

图 1. Bullish Harami 蜡烛图模式

“Bullish Harami”模式的识别在 CheckPatternBullishHarami() 方法中实现,具体代码如下:

//+------------------------------------------------------------------+
//| 检查 Bullish Harami 蜡烛图模式的形成 |
//+------------------------------------------------------------------+
bool CCandlePattern::CheckPatternBullishHarami()
  {
//--- Bullish Harami
   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) 方法中检查 Bullish Harami 蜡烛图模式的形成。

1.2. Bearish Harami

Bearish Harami 反转模式出现在上涨趋势中,表现为一个大的蜡烛后面跟随一个小蜡烛,且其实体位于大蜡烛的垂直范围内。这表明上涨趋势可能会反转,是时候考虑入场做空了。第二根蜡烛在开盘时会出现向下跳空。

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

Bearish Harami 反转模式

图 2. Bearish Harami 蜡烛图模式

“Bearish Harami”模式的识别在 CheckPatternBearishHarami() 方法中实现,具体代码如下:

//+------------------------------------------------------------------+
//| 检查 Bearish Harami 蜡烛图模式的形成 |
//+------------------------------------------------------------------+
bool CCandlePattern::CheckPatternBearishHarami()
  {
//--- Bearish Harami
   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) 方法中检查 Bearish Harami 蜡烛图模式的形成。

2. CCI 指标确认的交易信号

为了开多仓或空仓,交易信号必须由 CCI 指标确认。CCI 值必须高于/低于关键水平(长仓的 -50 和短仓的 50)。

关闭开仓的条件取决于 CCI 的值,可以在以下两种情况下进行:

  1. 如果 CCI 线达到了相反的关键水平(长仓 80,短仓 -80)
  2. 如果反转信号未得到确认(当 CCI 达到以下水平时:长仓 -80,短仓 80)

图 3. Bullish Harami 模式,CCI 指标确认

图 3. Bullish Harami 模式,CCI 指标确认

  • int CBH_BH_CCI::LongCondition() - 检查开多仓的条件(返回 80)和关闭短仓的条件(返回 40);
  • int CBH_BH_CCI::ShortCondition() - 检查开短仓的条件(返回 80)和关闭多仓的条件(返回 40)。

2.1. 开多仓/关闭短仓

  1. Bullish Harami 模式的形成必须由 CCI 指标确认:CCI(1)<-50(最近完成的蜡烛的 CCI 值必须小于 -50)。

  2. 当 CCI 指标向上穿越关键水平 -80 或向下穿越关键水平 80 时,必须关闭短仓。

//+------------------------------------------------------------------+
//| 检查市场的进出条件 |
//| 1) 市场进场(开多仓,结果=80) |
//| 2) 市场出场(关闭短仓,结果=40) |
//+------------------------------------------------------------------+
int CBH_BH_CCI::LongCondition()
  {
   int result=0;
   //--- idx 用于确定 EA 的工作模式
   //--- idx=0 - 在这种情况下 EA 每次更新时检查交易条件
   //--- idx=1 - 在这种情况下 EA 只在新闻蜡烛时检查交易条件
   int idx   =StartIndex();
   //--- 检查开多仓的条件
   //--- Bullish Harami 模式和 CCI<-50
   if(CheckCandlestickPattern(CANDLE_PATTERN_BULLISH_HARAMI) && (CCI(1)<-50))
     result=80;
   //--- 检查关闭短仓的条件
   //--- 超买/超卖水平的信号线交叉(向下 -80,向下 -80)
   if(((CCI(1)>-80) && (CCI(2)<-80)) || ((CCI(1)<80) && (CCI(2)>80)))
     result=40;
   //--- 返回结果
   return(result);
  }

2.2. 开短仓/关闭多仓

  1. Bearish Harami 模式的形成必须由 CCI 指标确认:CCI(1)>50(最近完成的蜡烛的 CCI 值必须大于 50)。

  2. 当 CCI 指标向下穿越 -80 或 80 水平时,必须关闭多仓。

//+------------------------------------------------------------------+
//| 检查市场的进出条件 |
//| 1) 市场进场(开短仓,结果=80) |
//| 2) 市场出场(关闭多仓,结果=40) |
//+------------------------------------------------------------------+
int CBH_BH_CCI::ShortCondition()
  {
   int result=0;
   //--- idx 用于确定 EA 的工作模式
   //--- idx=0 - 在这种情况下 EA 每次更新时检查交易条件
   //--- idx=1 - 在这种情况下 EA 只在新闻蜡烛时检查交易条件
   int idx   =StartIndex();
   //--- 检查开短仓的条件
   //--- Bearish Harami 模式和 CCI>50
   if(CheckCandlestickPattern(CANDLE_PATTERN_BEARISH_HARAMI) && (CCI(1)>50))
     result=80;
   //--- 检查关闭多仓的条件
   //--- 超买/超卖水平的信号线交叉(向下 -80,向下 80)
   if(((CCI(1)<80) && (CCI(2)>80)) || ((CCI(1)<-80) && (CCI(2)>-80)))
     result=40;
   //--- 返回结果
   return(result);
  }

2.3. 使用 MQL5 Wizard 创建 Expert Advisor

需要注意的是,CBH_BH_CCI 类不包含在标准库类中,因此我们需要下载 acbh_bh_cci.mqh 文件(见附件)并将其保存到 client_terminal_data\MQL5\Include\Expert\Signal\MySignals 目录下。对于 candlepatterns.mqh 文件也要进行同样的操作。重启 MetaEditor 后,可以在 MQL5 Wizard 中使用它。

要创建 Expert Advisor,请启动 MQL5 Wizard

图 4. 使用 MQL5 Wizard 创建 Expert Advisor

图 4. 使用 MQL5 Wizard 创建 Expert Advisor

接下来,请指定 Expert Advisor 的名称:

图 5. Expert Advisor 的一般属性

图 5. Expert Advisor 的一般属性

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

图 6. Expert Advisor 的信号属性

图 6. Expert Advisor 的信号属性

在我们的案例中,我们只使用一个交易信号模块。
添加“基于 Bullish Harami/Bearish Harami 并由 CCI 确认的信号”交易信号模块:

图 7. Expert Advisor 的信号属性

图 7. Expert Advisor 的信号属性

信号模块已添加:

图 8. Expert Advisor 的信号属性

图 8. Expert Advisor 的信号属性

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

图 9. Expert Advisor 的跟随属性

图 9. Expert Advisor 的跟随属性

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

图 10. Expert Advisor 的资金管理属性

图 10. Expert Advisor 的资金管理属性

点击“完成”按钮后,我们将获得生成的 Expert Advisor 的代码,位于 Expert_ABH_BH_CCI.mq5 中,将保存在 terminal_data_folder\MQL5\Experts\ 中。

生成的 Expert Advisor 的默认输入参数:

//--- 主要信号的输入参数
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 生成的 Expert Advisor 使用交易信号模块的“投票”来开仓和闭仓。主模块的投票(作为容器,包含所有添加的模块)也被使用,但其 LongCondition()ShortCondition() 方法始终返回 0。

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

Signal_StopLevelSignal_TakeLevel 输入参数的值设置为 0,这意味着只有在满足关闭条件时才会关闭仓位。

2.4. 历史回测结果

现在让我们来看一下 Expert Advisor 在历史数据上的回测结果(EURUSD H1,测试周期:2010.01.01-2011.03.16,PeriodCCI=11,MA_period=5)。

在创建 Expert Advisor 时,我们使用了固定的交易量(固定手数交易,0.1),未使用跟随止损算法(未使用跟随)。

图 11. 基于 Bullish Harami/Bearish Harami + CCI 的 Expert Advisor 测试结果

图 11. 基于 Bullish Harami/Bearish Harami + CCI 的 Expert Advisor 测试结果

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

通过 MQL5 Wizard 创建的 Expert Advisor 代码已附在 expert_abh_bh_cci.mq5 中。

相关帖子

评论 (0)