大家好!今天我们来聊聊如何使用 MQL5 Wizard 来生成基于锤形线(Hammer)和吊人线(Hanging Man)的交易信号。这个工具让我们能够快速创建适合自己交易策略的专家顾问(EA)。
在开始之前,首先我们需要了解什么是锤形线和吊人线。这两种形态都是反转信号图形,分别出现在市场下跌和上涨趋势的末尾,能够帮助我们判断潜在的市场反转。
1. 锤形线和吊人线
1.1 锤形线
锤形线是一根具有小实体和长下影线的K线,通常是在下跌趋势后形成,预示着市场可能反转向上。锤形线的颜色并不是关键,但若是阳线,则反转的潜力更大。

图1. 锤形线 K线模式
锤形线的识别可以通过 CheckPatternHammer() 方法来实现。
//+------------------------------------------------------------------+ //| 检查锤形线的形成 | //+------------------------------------------------------------------+ bool CCandlePattern::CheckPatternHammer() { //--- 锤形线 if((MidPoint(1) < CloseAvg(2)) && // 下跌趋势 (MathMin(Open(1), Close(1) > (High(1) - (High(1) - Low(1)) / 3.0)) && // 实体位于上1/3 (Close(1) < Close(2)) && (Open(1) < Open(2))) return(true); //--- return(false); }
通过 CheckCandlestickPattern(CANDLE_PATTERN_HAMMER) 方法可以检查锤形线的形成。
1.2 吊人线
吊人线同样是一根小实体和长下影线的K线,但它是在上涨趋势后形成,表明可能会反转向下。吊人线的颜色也不重要,但若是阴线,会增强其反转的可能性。

图2. 吊人线 K线模式
吊人线的识别可以通过 CheckPatternHangingMan() 方法来实现。
//+------------------------------------------------------------------+ //| 检查吊人线的形成 | //+------------------------------------------------------------------+ bool CCandlePattern::CheckPatternHangingMan() { //--- 吊人线 if((MidPoint(1) > CloseAvg(2)) && // 上涨趋势 (MathMin(Open(1), Close(1) > (High(1) - (High(1) - Low(1)) / 3.0)) && // 实体位于上1/3 (Close(1) > Close(2)) && (Open(1) > Open(2))) return(true); //--- return(false); }
通过 CheckCandlestickPattern(CANDLE_PATTERN_HANGING_MAN) 方法可以检查吊人线的形成。
2. CCI指标确认的交易信号
在开仓或平仓之前,必须确认CCI指标的信号。CCI的值需高于50(开空)或低于-50(开多)。
平仓条件有两种:
- 当CCI线达到相反的临界水平(多单为80,空单为-80);
- 当相反信号未得到确认时(例如CCI达到-80时平多,达到80时平空)。

图3. 锤形线模式与CCI指标确认
2.1 开多单/平空单
锤形线的形成需得到CCI指标的确认:CCI(1) < -50(最后一根K线的CCI值必须小于-50)。
若CCI指标上穿-80或下穿80,则平空单。
//+------------------------------------------------------------------+ //| 检查市场进出条件 | //| 1) 市场进场(开多单,返回80) | //| 2) 市场出场(平空单,返回40) | //+------------------------------------------------------------------+ int CH_HM_CCI::LongCondition() { int result = 0; //--- 检查开多单条件 //--- 锤形线与CCI < -50 if(CheckCandlestickPattern(CANDLE_PATTERN_HAMMER) && (CCI(1) < -50)) result = 80; //--- 检查平空单条件 if(((CCI(1) > -80) && (CCI(2) < -80)) || ((CCI(1) < -80) && (CCI(2) > -80))) result = 40; //--- 返回结果 return(result); }
2.2 开空单/平多单
吊人线的形成需得到CCI指标的确认:CCI(1) > 50(最后一根K线的CCI值必须大于50)。
若CCI指标下穿-80或上穿80,则平多单。
//+------------------------------------------------------------------+ //| 检查市场进出条件 | //| 1) 市场进场(开空单,返回80) | //| 2) 市场出场(平多单,返回40) | //+------------------------------------------------------------------+ int CH_HM_CCI::ShortCondition() { int result = 0; //--- 检查开空单条件 //--- 吊人线与CCI > 50 if(CheckCandlestickPattern(CANDLE_PATTERN_HANGING_MAN) && (CCI(1) > 50)) result = 80; //--- 检查平多单条件 if(((CCI(1) < 80) && (CCI(2) > 80)) || ((CCI(1) < -80) && (CCI(2) > -80))) result = 40; //--- 返回结果 return(result); }
2.3 使用MQL5 Wizard创建专家顾问
CH_HM_CCI类不包含在标准库中,使用前需下载ach_hm_cci.mqh文件并保存到client_terminal_data\MQL5\Include\Expert\Signal\MySignals目录下。相同操作对candlepatterns.mqh文件也要进行。重启MetaEditor后,便可以在MQL5 Wizard中使用这些文件。
创建专家顾问的步骤如下:

图4. MQL5 Wizard创建专家顾问
输入专家顾问的名称:

图5. 专家顾问基本属性
接下来选择所使用的交易信号模块。

图6. 专家顾问信号属性
在我们的案例中,只使用一个信号模块。
添加“基于锤形线/吊人线的CCI信号”交易信号模块:

图7. 专家顾问信号模块
信号模块已添加:

图8. 专家顾问信号模块
接下来,可以选择任何跟踪属性,但我们将选择“不使用跟踪止损”:

图9. 专家顾问跟踪属性
关于资金管理的属性,我们将使用“固定交易量交易”:

图10. 专家顾问资金管理属性
点击“完成”按钮后,我们将获得生成的专家顾问代码,位于Expert_AH_HM_CCI.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.16,PeriodCCI=25,MA_period=5)上的回测结果。
在创建专家顾问时,我们使用了固定交易量(固定交易手数,0.1),未使用跟踪止损算法(未使用跟踪)。

图11. 基于锤形线/吊人线 + CCI的专家顾问测试结果
最佳的输入参数组合可以通过 MetaTrader 5的策略测试器 找到。
由MQL5 Wizard生成的专家顾问代码已附在expert_ah_hm_cci.mq5中。