首页 系统交易 帖子

利用MQL5 Wizard创建基于3黑鸦/3白兵的交易信号与随机指标

附件
283.zip (6.6 KB, 下载 0次)

大家好,今天我们来聊聊如何运用 MQL5 Wizard 创建专业的交易顾问(EA)。这个工具可以快速生成基于 标准库 类的交易策略,帮助我们验证交易想法。只需构建自己的交易信号类,具体结构和示例可以参考 MQL5 Wizard:如何创建交易信号模块

简单来说,交易信号类是基于 CExpertSignal 进行扩展的。接下来,我们需要重写 LongCondition()ShortCondition() 这两个虚拟方法,以实现自己的逻辑。

在俄罗斯有一本书 《最佳交易者的策略》,书中讨论了许多交易策略。今天,我们将重点关注以 随机指标 确认的反转蜡烛图形态,包括 3黑鸦3白兵

最佳实践是创建一个独立的类,继承自 CExpertSignal,用于检查蜡烛图形态的形成。确认由蜡烛图形态生成的交易信号时,只需编写一个类,继承自 CCandlePattern,并在其中添加必要的功能(例如,通过震荡指标确认)。


1. 反转蜡烛图形态:3黑鸦与3白兵

1.1. 3黑鸦

这是一个看跌蜡烛图形态,用于预测当前上涨趋势的反转。该形态由三根连续的长实体蜡烛组成,每根蜡烛收盘价均低于前一日,并且每个交易日的开盘价都在前一根蜡烛体内。

3黑鸦蜡烛图形态

图1. 3黑鸦蜡烛图形态

CCandlePattern 类中,识别 "3黑鸦" 形态的方法是 CheckPatternThreeBlackCrows,具体实现如下:

//+------------------------------------------------------------------+
//| 检查 "3黑鸦"蜡烛图形态   |
//+------------------------------------------------------------------+
bool CCandlePattern::CheckPatternThreeBlackCrows()
  {
//--- 3黑鸦
   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);
  }

通过 CCandlePattern 类中的 CheckCandlestickPattern(CANDLE_PATTERN_THREE_BLACK_CROWS) 方法来检查 "3黑鸦" 蜡烛图形态的形成。


1.2. 3白兵蜡烛图形态

这是一个看涨蜡烛图形态,用于预测当前下跌趋势的反转。该形态由三根连续的长实体蜡烛组成,每根蜡烛收盘价均高于前一日,并且每个交易日的开盘价都在前一根蜡烛体内。

只要第二天的蜡烛开盘价在第一天的范围上半部分,且第二天以接近最高点的价格收盘,形成非常小的上影线或没有上影线,则该形态有效。第三天重复相同的模式。

3白兵蜡烛图形态

图2. 3白兵蜡烛图形态

识别 "3白兵" 形态的方法如下:

//+------------------------------------------------------------------+
//| 检查 "3白兵"蜡烛图形态    |
//+------------------------------------------------------------------+
bool CCandlePattern::CheckPatternThreeWhiteSoldiers()
  {
   //--- 3白兵
   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);
  }

通过 CCandlePattern 类中的 CheckCandlestickPattern(CANDLE_PATTERN_THREE_WHITE_SOLDIERS) 方法来检查 "3白兵" 蜡烛图形态的形成。


2. 随机指标确认的交易信号

开多单或空单的交易信号必须由 随机指标 确认。%D线必须高于或低于相应的临界水平(30或70)。

开仓后平仓的条件取决于 %D 指标的值,平仓可以在以下两种情况下进行:

  1. 如果 %D 线达到相反的临界水平(多单为80,空单为20)
  2. 如果反向信号未得到确认(当 %D 线达到以下水平:多单为20,空单为80)

随机指标确认的3白兵形态

图3. 随机指标确认的3白兵形态

检查进出场条件的实现分别在两个方法中:

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

2.1. 开多单/平空单

  1. "三白兵" 形态的形成必须通过 随机指标 确认:StochSignal(1)<30(随机指标信号线的值必须小于30)。

  2. 如果随机指标信号线向上穿过20或80水平,必须平掉空单。

//+------------------------------------------------------------------+
//| 检查进出场条件    |
//| 1) 开多单条件(返回=80)   |
//| 2) 平空单条件(返回=40)   |
//+------------------------------------------------------------------+
int CBC_WS_Stoch::LongCondition()
  {
   int result=0;
   //--- idx 用于确定EA的工作模式
   //--- idx=0 - EA在每个tick时检查交易条件
   //--- idx=1 - EA只在新闻条时检查交易条件
  int idx   =StartIndex();
   //--- 检查开多单条件
   //--- "三白兵" 形态和信号线<30
  if (CheckCandlestickPattern(CANDLE_PATTERN_THREE_WHITE_SOLDIERS) && (StochSignal(1)<30))
     result=80;
   //--- 检查平空单条件
   //--- 信号线穿越超买/超卖水平(向下20,向上80)
   if((((StochSignal(1)>20) && (StochSignal(2)<20)) ||
       ((StochSignal(1)>80) && (StochSignal(2)<80))))
     result=40;
   //--- 返回结果
   return(result);
  }

2.2. 开空单/平多单

  1. "三黑鸦" 形态的形成必须通过 随机指标 确认:StochSignal(1)>70(随机指标信号线的值必须大于70)。

  2. 如果随机指标信号线向下穿越80或20水平,必须平掉多单。

//+------------------------------------------------------------------+
//| 检查进出场条件    |
//| 1) 开空单条件(返回=80)   |
//| 2) 平多单条件(返回=40)   |
//+------------------------------------------------------------------+
int CBC_WS_Stoch::ShortCondition()
  {
   int result=0;
   //--- idx 用于确定EA的工作模式
   //--- idx=0 - EA在每个tick时检查交易条件
   //--- idx=1 - EA只在新闻条时检查交易条件
  int idx   =StartIndex();
   //--- 检查开空单条件
   //--- "三黑鸦" 形态和信号线>70
  if (CheckCandlestickPattern(CANDLE_PATTERN_THREE_BLACK_CROWS) && (StochSignal(1)>70))
     result=80;
   //--- 检查平多单条件
   //--- 信号线穿越超买/超卖水平(向下80,向上20)
   if((((StochSignal(1)<80) && (StochSignal(2)>80)) ||
       ((StochSignal(1)<20) && (StochSignal(2)>20))))
     result=40;
   //--- 返回结果
   return(result);
  }

2.3. 使用MQL5 Wizard创建交易顾问

CBC_WS_Stoch 类不包含在标准库类中,使用前需下载 acbc_ws_stoch.mqh 文件(请参见附件)并保存在 client_terminal_data\folder\MQL5\Include\Expert\Signal\MySignals 中。对 candlepatterns.mqh 文件也需做同样处理。重启 MetaEditor 后,您可以在 MQL5 Wizard 中使用这些文件。

要创建交易顾问,请启动 MQL5 Wizard

使用MQL5 Wizard创建交易顾问

图4. 使用MQL5 Wizard创建交易顾问

接下来,填写交易顾问的名称:

交易顾问的一般属性

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

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

交易顾问的信号属性

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

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

添加“基于3黑鸦/3白兵的交易信号,经过随机指标确认”模块:

交易顾问的信号属性

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

交易信号模块已添加:

交易顾问的信号属性

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

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

交易顾问的追踪属性

图9. 交易顾问的追踪属性

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

交易顾问的资金管理属性

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

最后点击“完成”按钮,我们就能得到生成的交易顾问代码,位于 Expert_ABC_WS_Stoch.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.02.02,PeriodK=47,PeriodD=9,PeriodSlow=13,MA_period=5)对交易顾问的回测结果。

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


基于3黑鸦/3白兵+随机指标的交易顾问测试结果

图11. 基于3黑鸦/3白兵+随机指标的交易顾问测试结果


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

由 MQL5 Wizard 创建的交易顾问的代码已附在 expert_abc_ws_stoch.mq5 文件中。


相关帖子

评论 (0)