使用 MQL5 Wizard 创建基于锤形线与吊人线的交易信号

Mike 2011.03.21 23:10 64 0 0
附件

大家好!今天我们来聊聊如何使用 MQL5 Wizard 创建交易信号,具体是基于锤形线(Hammer)和吊人线(Hanging Man)的反转形态,结合 MFI 指标来确认交易信号。

MQL5 Wizard 允许我们快速生成专家顾问(EA),通过标准库类来实现交易信号的创建。您只需构建自己的交易信号类,就可以方便地验证您的交易想法,具体的结构和示例可以参考 MQL5 Wizard: 如何创建交易信号模块

这里有一个基本思路:交易信号类需要继承自 CExpertSignal,接着我们需要重写 LongCondition()ShortCondition() 方法,来实现自己的逻辑。

有一本书 《最佳交易者策略》(俄文),书中提到了许多交易策略,我们将重点关注由 随机指标(Stochastic)CCIMFIRSI 等指标确认的反转蜡烛形态。

最佳实践是创建一个单独的类,继承自 CExpertSignal,用于检查蜡烛形态的形成。为了确认由蜡烛形态生成的交易信号,我们只需编写一个继承自 CCandlePattern 的类,并添加必要的功能(例如,使用指标来确认信号)。

接下来,我们将关注基于锤形线和吊人线反转形态的信号,并用 MFI 指标进行确认。交易信号模块基于 CCandlePattern 类,下面是其使用的简单示例。

1. 锤形线与吊人线反转蜡烛形态

1.1 锤形线

锤形线是一根小实体、长下影线的蜡烛,通常在下跌趋势后形成。锤形线表明看跌趋势的结束。

蜡烛的颜色并不重要,但如果是看涨锤形线则表明更高的看涨潜力。锤形线的实体通常形成在前一根蜡烛的最低点附近。长下影线和短上影线的组合使反转形态的潜力更高。

锤形线蜡烛图

图 1. 锤形线蜡烛图

锤形线的识别通过 CCandlePattern 类中的 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)2)) && (Open(1)2))) {// 实体间隙
            return(true);
        }
    //---
    return(false);
}

CheckCandlestickPattern(CANDLE_PATTERN_HAMMER) 方法用于检查锤形线蜡烛形态的形成。

1.2 吊人线

吊人线是一根小实体、长下影线的蜡烛,通常在上涨趋势后形成。吊人线表明看涨趋势的结束。

蜡烛的颜色并不重要,但如果是看跌的蜡烛则表明更高的看跌潜力。吊人线的实体通常形成在前一根蜡烛的最高点附近。长下影线和短上影线的组合使反转形态的潜力更高。

吊人线蜡烛图

图 2. 吊人线蜡烛图

吊人线的识别通过 CCandlePattern 类中的 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. 用 MFI 指标确认交易信号

开仓或平仓的交易信号必须由 MFI 指标确认。MFI 指标的值必须低于 40(用于开多头位置)或高于 60(用于开空头位置)。

已开仓位的平仓依赖于 MFI 指标的值。可以在以下两种情况下进行平仓:

  • 当 MFI 达到相反的关键水平(多头为 70,空头为 30)
  • 当反转信号未得到确认(当 MFI 指标达到以下水平:多头为 30,空头为 70)

锤形线,确认通过 MFI 指标

图 3. 锤形线,确认通过 MFI 指标

  • int CH_HM_MFI::LongCondition() - 检查开多头位置的条件(返回 80)和关闭空头位置的条件(返回 40);
  • int CH_HM_MFI::ShortCondition() - 检查开空头位置的条件(返回 80)和关闭多头位置的条件(返回 40)。

2.1 开多头位置/平空头位置

  1. 锤形线的形成必须由 MFI 指标确认:MFI(1)<40(最后一根已完成蜡烛的 MFI 值必须小于 40)。

  2. 如果 MFI 指标向上突破关键水平(70 或 30),则需要平仓空头头寸。

//+------------------------------------------------------------------+
//| 检查市场的进出条件 |
//| 1) 市场进场(开多头位置,结果=80) |
//| 2) 市场出场(平空头位置,结果=40) |
//+------------------------------------------------------------------+
int CH_HM_MFI::LongCondition() {
    int result=0;
    //--- idx 可用于确定 EA 的工作模式
    //--- idx=0 - 在此情况下 EA 会在每个 tick 上检查交易条件
    //--- idx=1 - 在此情况下 EA 仅在新闻蜡烛上检查交易条件
    int idx = StartIndex();
    //--- 检查开多头位置的条件
    //--- 锤形线的形成和 MFI<40
    if(CheckCandlestickPattern(CANDLE_PATTERN_HAMMER) && (MFI(1)<40)) {
        result=80;
    }
    //--- 检查平空头位置的条件
    //--- 信号线突破超买/超卖水平(向上 30,向上 70)
    if(((MFI(1)>30) && (MFI(2)<30)) || ((MFI(1)>70) && (MFI(2)<70))) {
        result=40;
    }
    //--- 返回结果
    return(result);
}


2.2 开空头位置/平多头位置

  1. 吊人线的形成必须由 MFI 指标确认:MFI(1)>60(最后一根已完成蜡烛的 MFI 值必须大于 60)。

  2. 如果 MFI 指标向下突破关键水平(70 或 30),则需要平仓多头头寸。

//+------------------------------------------------------------------+
//| 检查市场的进出条件 |
//| 1) 市场进场(开空头位置,结果=80) |
//| 2) 市场出场(平多头位置,结果=40) |
//+------------------------------------------------------------------+
int CH_HM_MFI::ShortCondition() {
    int result=0;
    //--- idx 可用于确定 EA 的工作模式
    //--- idx=0 - 在此情况下 EA 会在每个 tick 上检查交易条件
    //--- idx=1 - 在此情况下 EA 仅在新闻蜡烛上检查交易条件
    int idx = StartIndex();
    //--- 检查开空头位置的条件
    //--- 吊人线的形成和 MFI>60
    if(CheckCandlestickPattern(CANDLE_PATTERN_HANGING_MAN) && (MFI(1)>60)) {
        result=80;
    }
    //--- 检查平多头位置的条件
    //--- 信号线突破超买/超卖水平(向上 70,向下 30)
    if(((MFI(1)>70) && (MFI(2)<70)) || ((MFI(1)<30) && (MFI(2)>30))) {
        result=40;
    }
    //--- 返回结果
    return(result);
}


2.3 使用 MQL5 Wizard 创建专家顾问

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

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

使用 MQL5 Wizard 创建专家顾问

图 4. 使用 MQL5 Wizard 创建专家顾问

接下来,我们需要指定专家顾问的名称:

专家顾问的一般属性

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

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

专家顾问的信号属性

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

在我们的案例中,我们只使用一个交易信号模块。
添加“基于锤形线和吊人线的信号,确认通过 MFI”的交易信号模块:

专家顾问的信号属性

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

交易信号模块已添加:

专家顾问的信号属性

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

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

专家顾问的跟踪属性

图 9. 专家顾问的跟踪属性

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

专家顾问的资金管理属性

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

点击“完成”按钮,我们将得到生成的专家顾问代码,位于 Expert_AH_HM_MFI.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 生成的专家顾问使用“投票”来开仓和平仓,所有模块的投票结果会平均计算。在我们的案例中,主模块 + 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,PeriodMFI=47,MA_period=5)。

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

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

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


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

通过 MQL5 Wizard 创建的专家顾问的代码附在 expert_ah_hm_mfi.mq5 中。


列表
评论 0