首页 系统交易 帖子

使用MQL5 Wizard创建基于吞没形态与CCI指标的交易信号

附件
306.zip (6.48 KB, 下载 1次)

大家好!今天我们来聊聊如何利用MQL5 Wizard创建一个基于吞没形态和CCI指标的交易信号的智能交易系统(EA)。这个工具可以帮助我们快速验证交易想法,下面我将为大家详细介绍如何操作。

这个过程主要是通过创建一个交易信号类来实现的。这个类需要从CExpertSignal派生,并重写其中的LongCondition()ShortCondition()方法,以满足我们自己的需求。

1. 吞没形态(Bullish Engulfing 和 Bearish Engulfing)

1.1. Bullish Engulfing

Bullish Engulfing模式通常出现在下跌趋势中,形态由一个小的黑色蜡烛跟随一个完全吞没它的白色蜡烛形成。小蜡烛的影线(尾巴)较短,使得大蜡烛的实体能够完全覆盖前一日的蜡烛。

Bullish Engulfing

图1. Bullish Engulfing蜡烛图形态

CCandlePattern类中,我们通过CheckPatternBullishEngulfing()方法来识别Bullish Engulfing模式。

//+------------------------------------------------------------------+
//| 检查Bullish Engulfing蜡烛图形态 |
//+------------------------------------------------------------------+
bool CCandlePattern::CheckPatternBullishEngulfing()
  {
//--- Bullish Engulfing
   if((Open(2)>Close(2))             &&  // 前一根蜡烛是看跌
      (Close(1)-Open(1)>AvgBody(1))  &&  // 看涨蜡烛的实体大于平均值
      (Close(1)>Open(2))             &&  // 看涨蜡烛的收盘价高于看跌蜡烛的开盘价
      (MidOpenClose(2)<CloseAvg(2))  &&  // 确保处于下跌趋势
      (Open(1)<Close(2)))                // 看涨蜡烛的开盘价低于看跌蜡烛的收盘价
      return(true);
//---
   return(false);
  }

CCandlePattern类中,我们使用CheckCandlestickPattern(CANDLE_PATTERN_BULLISH_ENGULFING)方法来检查Bullish Engulfing形态的形成。


1.2. Bearish Engulfing

Bearish Engulfing模式出现在上涨趋势中,形态由一个小的白色蜡烛跟随一个完全吞没它的大黑蜡烛形成。小蜡烛的影线(尾巴)较短,使得大蜡烛的实体能够完全覆盖前一日的蜡烛。

Bearish Engulfing

图2. Bearish Engulfing蜡烛图形态

CCandlePattern类中,通过CheckPatternBearishEngulfing()方法识别Bearish Engulfing模式。

//+------------------------------------------------------------------+
//| 检查Bearish Engulfing蜡烛图形态 |
//+------------------------------------------------------------------+
bool CCandlePattern::CheckPatternBearishEngulfing()
  {
//--- Bearish Engulfing
   if((Open(2)<Close(2))            &&  // 前一根蜡烛是看涨
      (Open(1)-Close(1)>AvgBody(1)) &&  // 看跌蜡烛的实体大于平均值
      (Close(1)<Open(2))            &&  // 看跌蜡烛的收盘价低于看涨蜡烛的开盘价
      (MidOpenClose(2)>CloseAvg(2)) &&  // 确保处于上涨趋势
      (Open(1)>Close(2)))               // 看跌蜡烛的开盘价高于看涨蜡烛的收盘价
      return(true);
//---
   return(false);
  }

CCandlePattern类中,我们使用CheckCandlestickPattern(CANDLE_PATTERN_BEARISH_ENGULFING)方法来检查Bearish Engulfing形态的形成。


2. 交易信号确认与CCI指标

在开仓或者平仓时,我们需要用到CCI指标来确认交易信号。当CCI的值高于50时,我们可以开短仓;低于-50时,可以开多仓。

平仓的条件有两个:

  1. 当CCI到达相反的临界水平时(多仓为80,空仓为-80)
  2. 如果反向信号没有得到确认(当CCI到达-80或80时)

CCI指标图

图3. 通过CCI指标确认Bullish Engulfing模式的交易信号


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

2.1. 开多仓/平空仓

  1. Bullish Engulfing形态必须被CCI指标确认:CCI(1)<-50(最后一根完成的蜡烛的CCI值必须小于-50)。

  2. 如果CCI指标穿越了临界水平-80向上,或穿越了80向下,则平空仓。

//+------------------------------------------------------------------+
//| 检查市场的进出条件 |
//| 1) 市场进入(开多仓,结果=80) |
//| 2) 市场退出(平空仓,结果=40) |
//+------------------------------------------------------------------+
int CBE_BE_CCI::LongCondition()
  {
   int result=0;
//--- idx用于确定EA工作模式
//--- idx=0 - EA每次tick时检查交易条件
//--- idx=1 - EA仅在新闻蜡烛时检查交易条件
   int idx   =StartIndex();
//--- 检查开多仓条件
//--- Bullish Engulfing形态和CCI<-50
   if(CheckCandlestickPattern(CANDLE_PATTERN_BULLISH_ENGULFING) && (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. Bearish Engulfing形态必须被CCI指标确认:CCI(1)>50(最后一根完成的蜡烛的CCI值必须大于50)。

  2. 如果CCI指标穿越了-80或80水平向下,则平多仓。

//+------------------------------------------------------------------+
//| 检查市场的进出条件 |
//| 1) 市场进入(开空仓,结果=80) |
//| 2) 市场退出(平多仓,结果=40) |
//+------------------------------------------------------------------+
int CBE_BE_CCI::ShortCondition()
  {
   int result=0;
//--- idx用于确定EA工作模式
//--- idx=0 - EA每次tick时检查交易条件
//--- idx=1 - EA仅在新闻蜡烛时检查交易条件
   int idx   =StartIndex();
//--- 检查开空仓条件
//--- Bearish Engulfing形态和CCI>50
   if(CheckCandlestickPattern(CANDLE_PATTERN_BEARISH_ENGULFING) && (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创建智能交易系统

CBE_BE_CCI类不在标准库中,要使用它需要下载acbe_be_cci.mqh文件(见附件),并将其保存到client_terminal_data\MQL5\Include\Expert\Signal\MySignals文件夹中。candlepatterns.mqh文件也需同样处理。重启MetaEditor后即可在MQL5 Wizard中使用。

创建智能交易系统的步骤如下:

创建智能交易系统步骤

图4. 创建智能交易系统步骤

接下来,指定智能交易系统的名称:

智能交易系统的基本属性

图5. 智能交易系统的基本属性

接下来选择所用的交易信号模块。

智能交易系统的信号属性

图6. 智能交易系统的信号属性

在我们的案例中,我们只使用一个交易信号模块。

添加“基于吞没形态与CCI的交易信号”模块:

智能交易系统的信号属性

图7. 智能交易系统的信号属性

交易信号模块已添加:

智能交易系统的信号属性

图8. 智能交易系统的信号属性

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

智能交易系统的跟踪属性

图9. 智能交易系统的跟踪属性

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

智能交易系统的资金管理属性

图10. 智能交易系统的资金管理属性

按下“完成”按钮后,我们将获得生成的智能交易系统代码,位置为Expert_ABE_BE_CCI.mq5,保存于terminal_data_folder\MQL5\Experts\。

生成的智能交易系统的默认输入参数:

//--- 交易信号的输入参数
input int            Signal_ThresholdOpen   =10;     // 开仓信号阈值
input int            Signal_ThresholdClose  =10;     // 平仓信号阈值
input double         Signal_PriceLevel      =0.0;    // 执行交易的价格水平
input double         Signal_StopLevel       =50.0;   // 止损水平(点数)
input double         Signal_TakeLevel       =50.0;  // 盈利水平(点数)

需要替换为:

//--- 交易信号的输入参数
input int            Signal_ThresholdOpen   =40;     // 开仓信号阈值
input int            Signal_ThresholdClose  =20;     // 平仓信号阈值
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,PeriodCCI=49,MA_period=11)回测智能交易系统的结果。

在创建智能交易系统时,我们使用了固定的交易量(固定交易手数,0.1),未使用跟踪止损算法(未使用跟踪)。

回测结果

图11. 基于吞没形态与CCI的智能交易系统回测结果


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

通过MQL5 Wizard创建的智能交易系统代码已附在expert_abe_be_cci.mq5中。

相关帖子

评论 (0)