首页 系统交易 帖子

利用MQL5 Wizard创建基于三只乌鸦/三只白兵与CCI的交易信号

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

大家好!今天我们来聊聊如何利用MQL5 Wizard工具,创建基于三只乌鸦和三只白兵模式的交易信号策略。通过这种方式,我们可以快速验证自己的交易想法,只需创建一个自定义的交易信号类即可。

首先,交易信号的类需要继承自CExpertSignal,接着我们需要重写LongCondition()ShortCondition()这两个虚方法,来实现自己的交易逻辑。

在交易策略方面,有一本书叫做《最佳交易者策略》,里面涵盖了许多交易策略,我们将重点关注由CCI指标确认的反转蜡烛图形态。

1. 三只乌鸦和三只白兵反转蜡烛图形

1.1 三只乌鸦

三只乌鸦是一个看跌的蜡烛图形,通常用来预测当前上涨趋势的反转。这个模式由三根连续的长实体蜡烛构成,每根蜡烛的收盘价都低于前一天的收盘价,并且每次开盘价均在前一根蜡烛的实体内部。

三只乌鸦蜡烛图模式

图 1. 三只乌鸦蜡烛图模式

CCandlePattern类中,识别三只乌鸦模式的代码如下:

//+------------------------------------------------------------------+
//| 检查三只乌鸦蜡烛图模式的形成 |
//+------------------------------------------------------------------+
bool CCandlePattern::CheckPatternThreeBlackCrows()
  {
//--- 3 Black Crows 
   if((Open(3)-Close(3)>AvgBody(1)) && 
      (Open(2)-Close(2)>AvgBody(1)) &&
      (Open(1)-Close(1)>AvgBody(1)) &&
      (MidPoint(2)<MidPoint(3))   && 
      (MidPoint(1)<MidPoint(2)))
     return(true);
//---
   return(false);
  }

1.2 三只白兵

三只白兵是一个看涨的蜡烛图形,通常用来预测当前下跌趋势的反转。这个模式由三根连续的长实体蜡烛构成,每根蜡烛的收盘价都高于前一天的收盘价,并且每次开盘价均在前一根蜡烛的实体内部。

三只白兵蜡烛图模式

图 2. 三只白兵蜡烛图模式

识别三只白兵模式的方法如下:

//+------------------------------------------------------------------+
//| 检查三只白兵蜡烛图模式的形成 |
//+------------------------------------------------------------------+
bool CCandlePattern::CheckPatternThreeWhiteSoldiers()
  {
   if((Close(3)-Open(3)>AvgBody(1)) &&
      (Close(2)-Open(2)>AvgBody(1)) &&
      (Close(1)-Open(1)>AvgBody(1)) &&
      (MidPoint(2)>MidPoint(3))   &&
      (MidPoint(1)>MidPoint(2)))
     return(true);
//---
   return(false);
  }

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

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

关闭已开仓位的条件取决于CCI的值,主要有两种情况:

  • 如果CCI线达到了相反的关键水平(多单为80,空单为-80)
  • 如果反向信号没有得到确认(当CCI达到以下水平:多单为-80,空单为80)

三只乌鸦模式,CCI指标确认

图 3. 三只乌鸦模式,CCI指标确认

2.1 开多单/平空单

  1. 三只乌鸦模式必须由CCI指标确认:CCI(1)<-50(最后一根完成的蜡烛的CCI值必须小于-50)。

  2. 当CCI指标向上穿过关键水平-80或者向下穿过关键水平80时,必须平掉空单。

//+------------------------------------------------------------------+
//| 检查市场进入和退出条件 |
//+------------------------------------------------------------------+
int CBC_WS_CCI::LongCondition()
  {
   int result=0;
   //--- 检查开多单条件
   if(CheckCandlestickPattern(CANDLE_PATTERN_THREE_WHITE_SOLDIERS) && (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(最后一根完成的蜡烛的CCI值必须大于50)。

  2. 当CCI指标向下穿过-80或80水平时,必须平掉多单。

//+------------------------------------------------------------------+
//| 检查市场进入和退出条件 |
//+------------------------------------------------------------------+
int CBC_WS_CCI::ShortCondition()
  {
   int result=0;
   //--- 检查开空单条件
   if(CheckCandlestickPattern(CANDLE_PATTERN_THREE_BLACK_CROWS) && (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创建交易顾问

要使用CBC_WS_CCI类,我们需要下载acbc_ws_cci.mqh文件,并将其保存到terminal_data_folder\MQL5\Include\Expert\Signal\MySignals。同样需要处理candlepatterns.mqh文件。重启MetaEditor后即可使用。

接下来,启动MQL5 Wizard以创建交易顾问:

创建交易顾问

图 4. 创建交易顾问

接下来指定交易顾问的名称:

交易顾问的一般属性

图 5. 交易顾问的一般属性

然后选择使用的交易信号模块。

交易顾问的信号属性

图 6. 交易顾问的信号属性

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

添加基于“三只乌鸦/三只白兵并由CCI确认”的交易信号模块:

交易顾问的信号属性

图 7. 交易顾问的信号属性

交易信号模块已添加:

交易顾问的信号属性

图 8. 交易顾问的信号属性

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

交易顾问的止损属性

图 9. 交易顾问的止损属性

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

交易顾问的资金管理属性

图 10. 交易顾问的资金管理属性

点击“完成”按钮后,您将获得生成的交易顾问代码,位于Expert_ABC_WS_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=37,MA_period=13)。

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

回测结果

图 11. 基于三只乌鸦/三只白兵与CCI的交易顾问测试结果


您可以使用MetaTrader 5客户端的策略测试器找到最佳输入参数。

由MQL5 Wizard创建的交易顾问代码附在expert_abc_ws_cci.mq5中。

相关帖子

评论 (0)