首页 系统交易 帖子

基于锤形线与吊人线的CCI交易信号生成- MQL5专家顾问

附件
315.zip (6.48 KB, 下载 0次)

大家好!今天我们来聊聊如何使用 MQL5 Wizard 来生成基于锤形线(Hammer)和吊人线(Hanging Man)的交易信号。这个工具让我们能够快速创建适合自己交易策略的专家顾问(EA)。

在开始之前,首先我们需要了解什么是锤形线和吊人线。这两种形态都是反转信号图形,分别出现在市场下跌和上涨趋势的末尾,能够帮助我们判断潜在的市场反转。

1. 锤形线和吊人线

1.1 锤形线

锤形线是一根具有小实体和长下影线的K线,通常是在下跌趋势后形成,预示着市场可能反转向上。锤形线的颜色并不是关键,但若是阳线,则反转的潜力更大。

锤形线 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线,但它是在上涨趋势后形成,表明可能会反转向下。吊人线的颜色也不重要,但若是阴线,会增强其反转的可能性。

吊人线 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时平空)。

锤形线模式与CCI指标确认

图3. 锤形线模式与CCI指标确认

2.1 开多单/平空单

  1. 锤形线的形成需得到CCI指标的确认:CCI(1) < -50(最后一根K线的CCI值必须小于-50)。

  2. 若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 开空单/平多单

  1. 吊人线的形成需得到CCI指标的确认:CCI(1) > 50(最后一根K线的CCI值必须大于50)。

  2. 若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中使用这些文件。

创建专家顾问的步骤如下:

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),未使用跟踪止损算法(未使用跟踪)。

基于锤形线/吊人线 + CCI的专家顾问测试结果

图11. 基于锤形线/吊人线 + CCI的专家顾问测试结果


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

由MQL5 Wizard生成的专家顾问代码已附在expert_ah_hm_cci.mq5中。

相关帖子

评论 (0)