首页 系统交易 帖子

使用 MQL5 Wizard 创建基于牛市/熊市会晤线和 CCI 指标的交易信号

附件
319.zip (6.47 KB, 下载 0次)

在交易中,想要快速验证你的交易想法吗?MQL5 Wizard 提供了一种便捷的方法来创建基于标准库的现成专家顾问(EA)。只需创建你自己的交易信号类,便可快速检查交易思路。有关该类结构和示例,请参考文章 MQL5 Wizard: 如何创建交易信号模块

交易信号类通常是从 CExpertSignal 派生而来。接下来,你需要重写 LongCondition()ShortCondition() 虚方法,以便实现你自己的逻辑。

在这里,我们将重点介绍基于“牛市/熊市会晤线”反转蜡烛图形态的信号,这些信号由 CCI(商品通道指数)指标进行确认。交易信号模块基于 CCandlePattern 类,下面将详细介绍它的使用方法。

1. “会晤线”反转蜡烛图形态

1.1. 牛市会晤线

这一形态由两根蜡烛图(第一根为下跌,第二根为上涨)组成,其收盘价相等(或非常接近)。这两根蜡烛的实体长度必须大于平均实体长度。

牛市会晤线形态表示下跌趋势的反转。

Fig. 1. 牛市会晤线形态

图1. 牛市会晤线形态

牛市会晤线的识别是在 CheckPatternBullishMeetingLines() 方法中实现的,具体实现方式如下:

//+--------------------------------------------------------------------+
//| 检查“牛市会晤线”蜡烛图形态的形成  |
//+--------------------------------------------------------------------+
bool CCandlePattern::CheckPatternBullishMeetingLines()
  {
//--- 牛市会晤线
   if((Open(2)-Close(2)>AvgBody(1))              && // 长黑
     ((Close(1)-Open(1))>AvgBody(1))             && // 长白
      (MathAbs(Close(1)-Close(2))<0.1*AvgBody(1)))   // 十字星收盘
      return(true);
//---
   return(false);
  }

CheckCandlestickPattern(CANDLE_PATTERN_BULLISH_MEETING_LINES) 方法中检查“牛市会晤线”蜡烛图形态的形成。

1.2. 熊市会晤线

这一形态由两根蜡烛图(第一根为上涨,第二根为下跌)组成,其收盘价相等(或非常接近)。这两根蜡烛的实体长度也必须大于平均实体长度。

熊市会晤线形态表示上涨趋势的反转。

Fig. 2. 熊市会晤线形态

图2. 熊市会晤线形态

熊市会晤线的识别是在 CheckPatternBearishMeetingLines() 方法中实现的,具体实现方式如下:

//+--------------------------------------------------------------------+
//| 检查“熊市会晤线”蜡烛图形态的形成  |
//+--------------------------------------------------------------------+
bool CCandlePattern::CheckPatternBearishMeetingLines()
  {
//--- 熊市会晤线
   if((Close(2)-Open(2)>AvgBody(1))             && // 长白
     ((Open(1)-Close(1)>AvgBody(1))             && // 长黑
      (MathAbs(Close(1)-Close(2))<0.1*AvgBody(1)))  // 十字星收盘
      return(true);
//---
   return(false);
  }

CheckCandlestickPattern(CANDLE_PATTERN_BEARISH_MEETING_LINES) 方法中检查“熊市会晤线”蜡烛图形态的形成。

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

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

已开头寸的平仓依赖于 CCI 的值,平仓条件有两个:

  1. 当 CCI 线达到相反的关键水平(多头头寸为 80,空头头寸为 -80)
  2. 当反向信号未得到确认(当 CCI 达到以下水平:多头头寸为 -80,空头头寸为 80)

Fig. 3. 牛市会晤线形态,由 CCI 指标确认

图3. 牛市会晤线形态,由 CCI 指标确认

  • int CML_CCI::LongCondition() - 检查开多头寸的条件(返回 80)和空头头寸的平仓条件(返回 40);
  • int CML_CCI::ShortCondition() - 检查开空头寸的条件(返回 80)和多头头寸的平仓条件(返回 40)。

2.1. 开多头寸/平空头寸

  1. “牛市会晤线”形态必须由 CCI 指标确认:CCI(1)<-50(最后一根完成的 K 线的 CCI 值必须低于 -50)。

  2. CCI 指标向上突破关键水平 -80 或向下突破关键水平 80 时,必须平掉空头头寸。

//+------------------------------------------------------------------+
//| 检查进出市场的条件                 |
//| 1) 市场进场(开多头寸,结果=80)               |
//| 2) 市场出场(平空头寸,结果=40)                 |
//+------------------------------------------------------------------+
int CML_CCI::LongCondition()
  {
   int result=0;
//--- idx可用于确定专家顾问的工作模式
//--- idx=0 - 在这种情况下,EA在每个 tick 中检查交易条件
//--- idx=1 - 在这种情况下,EA仅在新闻 K 线中检查交易条件
   int idx   =StartIndex();
//--- 检查开多头寸的条件
//--- 牛市会晤线形态和 CCI<-50
   if(CheckCandlestickPattern(CANDLE_PATTERN_BULLISH_MEETING_LINES) && (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. “熊市会晤线”形态必须由 CCI 指标确认:CCI(1)>50(最后一根完成的 K 线的 CCI 值必须大于 50)。

  2. CCI 指标向下突破 -80 或 80 水平时,必须平掉多头头寸。

//+------------------------------------------------------------------+
//| 检查进出市场的条件                 |
//| 1) 市场进场(开空头寸,结果=80)                 |
//| 2) 市场出场(平多头寸,结果=40)                  |
//+------------------------------------------------------------------+
int CML_CCI::ShortCondition()
  {
   int result=0;
//--- idx可用于确定专家顾问的工作模式
//--- idx=0 - 在这种情况下,EA在每个 tick 中检查交易条件
//--- idx=1 - 在这种情况下,EA仅在新闻 K 线中检查交易条件
   int idx   =StartIndex();
//--- 检查开空头寸的条件
//--- 熊市会晤线形态和 CCI>50
   if(CheckCandlestickPattern(CANDLE_PATTERN_BEARISH_MEETING_LINES) && (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 创建专家顾问

CML_CCI 类不包含在标准库类中,因此需要下载 acml_cci.mqh 文件(见附件)并将其保存到 client_terminal_data\MQL5\Include\Expert\Signal\MySignals 文件夹中。同样,candlepatterns.mqh 文件也需要如此。重启 MetaEditor 后,可以在 MQL5 Wizard 中使用这些文件。

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

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

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

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

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

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

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

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

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

在我们的案例中,只使用一个交易信号模块。
添加“基于牛市/熊市会晤线确认的 CCI”的交易信号模块:

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

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

交易信号模块已添加:

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

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

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

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

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

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

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

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

按下“完成”按钮后,我们会得到生成的专家顾问代码,位于 Expert_AML_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,测试周期:2000.01.01-2011.03.16,PeriodCCI=18,MA_period=3)上的专家顾问回测。

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

图11. 基于牛市/熊市会晤线 + CCI 的专家顾问测试结果

图11. 基于牛市/熊市会晤线 + CCI 的专家顾问测试结果

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

由 MQL5 Wizard 创建的专家顾问代码附在 expert_aml_cci.mq5 中。

相关帖子

评论 (0)