大家好!今天我们要聊聊如何使用 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 反转模式出现在下跌趋势中,通常是一个大蜡烛后面跟随一个小蜡烛,且其实体位于大蜡烛的垂直范围内。这表明下跌趋势可能会反转,是时候考虑入场做多了。第二根蜡烛在开盘时会出现向上跳空。第二根蜡烛越小,反转的可能性越大。

图 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 反转模式出现在上涨趋势中,表现为一个大的蜡烛后面跟随一个小蜡烛,且其实体位于大蜡烛的垂直范围内。这表明上涨趋势可能会反转,是时候考虑入场做空了。第二根蜡烛在开盘时会出现向下跳空。
第二根(黑色)蜡烛越小,反转的可能性越大。

图 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 的值,可以在以下两种情况下进行:
- 如果 CCI 线达到了相反的关键水平(长仓 80,短仓 -80)
- 如果反转信号未得到确认(当 CCI 达到以下水平时:长仓 -80,短仓 80)

图 3. Bullish Harami 模式,CCI 指标确认
int CBH_BH_CCI::LongCondition()- 检查开多仓的条件(返回 80)和关闭短仓的条件(返回 40);int CBH_BH_CCI::ShortCondition()- 检查开短仓的条件(返回 80)和关闭多仓的条件(返回 40)。
2.1. 开多仓/关闭短仓
Bullish Harami 模式的形成必须由 CCI 指标确认:
CCI(1)<-50(最近完成的蜡烛的 CCI 值必须小于 -50)。当 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. 开短仓/关闭多仓
Bearish Harami 模式的形成必须由 CCI 指标确认:
CCI(1)>50(最近完成的蜡烛的 CCI 值必须大于 50)。当 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
接下来,请指定 Expert Advisor 的名称:

图 5. Expert Advisor 的一般属性
然后,我们需要选择所使用的交易信号模块。

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

图 7. Expert Advisor 的信号属性
信号模块已添加:

图 8. Expert Advisor 的信号属性
您可以选择任何跟随特性,但我们将使用“未使用跟随止损”:

图 9. 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 个交易信号模块,因此在设置阈值时需要考虑这一点。因为这个原因,ThresholdOpen 和 ThresholdClose 必须设置为 40=(0+80)/2 和 20=(0+40)/2。
Signal_StopLevel 和 Signal_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 测试结果
最佳输入参数组合可以通过 MetaTrader 5 客户端终端的 策略测试器 找到。
通过 MQL5 Wizard 创建的 Expert Advisor 代码已附在 expert_abh_bh_cci.mq5 中。