利用MQL5 Wizard创建基于吞没形态与随机指标的交易信号

Mike 2011.03.10 19:54 64 0 0
附件

大家好,今天我们来聊聊如何利用 MQL5 Wizard 创建交易信号,特别是基于吞没形态(Bullish Engulfing/Bearish Engulfing)和随机指标(Stochastic)的交易策略。这是一个非常实用的工具,能够帮助我们快速测试交易想法。

首先,你需要创建一个自己的交易信号类,具体结构和示例可以参考文章 MQL5 Wizard: 如何创建交易信号模块。简单来说,交易信号类是从 CExpertSignal 继承而来的,我们需要重写 LongCondition()ShortCondition() 方法来适应我们的需求。

在创建交易策略时,我建议参考一些优秀的交易者的策略,比如书籍 《优秀交易者的策略》,其中包含了很多逆转蜡烛形态的策略,这些策略可通过随机指标(Stochastic)、CCI、MFI和RSI等指标进行确认。

我们将重点讨论基于吞没形态的交易信号,这种模式在市场反转时非常有效。我们需要创建一个独立的类,继承自 CExpertSignal 来检查蜡烛形态的形成,并在此基础上添加确认信号的功能(例如,通过随机指标确认)。

1. 吞没形态介绍

1.1. Bullish Engulfing(看涨吞没形态)

看涨吞没形态通常出现在下跌趋势中,形成时,前一个小的黑色蜡烛后面跟着一个完全吞没其的较大白色蜡烛。小蜡烛的影线较短,确保大蜡烛的实体能够覆盖前一日的蜡烛。

看涨吞没蜡烛形态

图1. 看涨吞没蜡烛形态

看涨吞没形态的识别可以通过 CheckPatternBullishEngulfing() 方法实现,以下是示例代码:

//+------------------------------------------------------------------+
//| 检查看涨吞没形态的形成                               |
//+------------------------------------------------------------------+
bool CCandlePattern::CheckPatternBullishEngulfing()
  {
//--- 看涨吞没形态
   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);
  }

通过 CheckCandlestickPattern(CANDLE_PATTERN_BULLISH_ENGULFING) 方法可以检查看涨吞没蜡烛形态的形成。


1.2. Bearish Engulfing(看跌吞没形态)

看跌吞没形态出现在上涨趋势中,前一个小的白色蜡烛后面跟着一个完全吞没其的较大黑色蜡烛,同样,小蜡烛的影线较短,确保大蜡烛的实体能够覆盖前一日的蜡烛。

看跌吞没蜡烛形态

图2. 看跌吞没蜡烛形态

看跌吞没形态的识别可以通过 CheckPatternBearishEngulfing() 方法实现,以下是示例代码:

//+------------------------------------------------------------------+
//| 检查看跌吞没形态的形成                                |
//+------------------------------------------------------------------+
bool CCandlePattern::CheckPatternBearishEngulfing()
  {
//--- 看跌吞没形态
   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);
  }

通过 CheckCandlestickPattern(CANDLE_PATTERN_BEARISH_ENGULFING) 方法可以检查看跌吞没蜡烛形态的形成。


2. 基于随机指标的交易信号

我们需要确保开多或开空的交易信号得到随机指标的确认。具体来说,%D线需要高于或低于相应的关键水平(30或70)。

当满足以下条件之一时,可以平掉当前持仓:

  1. 当%D线达到相反的关键水平(长仓时为80,短仓时为20);
  2. 当反转信号未得到确认(当%D线达到以下水平:长期为20,短期为80)。

看涨吞没形态,确认通过随机指标

图3. 看涨吞没形态,确认通过随机指标

我们将通过两个方法检查交易条件:

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

2.1. 开多仓 / 平空仓

  1. 形成看涨吞没形态必须得到随机指标的确认:StochSignal(1)<30(随机指标的信号线值必须小于30)。

  2. 如果随机指标的信号线向上突破20或80水平,短仓必须平掉。

//+------------------------------------------------------------------+
//| 检查市场进出条件                                      |
//| 1) 市场进入(开多仓,结果=80)                         |
//| 2) 市场退出(平空仓,结果=40)                          |
//+------------------------------------------------------------------+
int CBE_BE_Stoch::LongCondition()
  {
   int result=0;
   //--- idx可以用来判断EA工作模式
   //--- idx=0 - EA会在每个tick检查交易条件
   //--- idx=1 - EA只会在新闻蜡烛时检查交易条件
   int idx   =StartIndex();
   //--- 检查开多仓的条件
   //--- 看涨吞没形态和信号线<30
  if (CheckCandlestickPattern(CANDLE_PATTERN_BULLISH_ENGULFING) && (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 CBE_BE_Stoch::ShortCondition()
  {
   int result=0;
   //--- idx可以用来判断EA工作模式
   //--- idx=0 - EA会在每个tick检查交易条件
   //--- idx=1 - EA只会在新闻蜡烛时检查交易条件
   int idx   =StartIndex();
   //--- 检查开空仓的条件
   //--- 看跌吞没形态和信号线>70
  if (CheckCandlestickPattern(CANDLE_PATTERN_BEARISH_ENGULFING) && (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创建专家顾问

CBE_BE_Stoch类不包含在标准库中,使用前需要下载 acbe_be_stoch.mqh 文件(详见附件),并将其保存到 client_terminal_data\folder\MQL5\Include\Expert\Signal\MySignals。candlepatterns.mqh文件也需要进行同样的操作。在重启MetaEditor后,你就可以在MQL5 Wizard中使用这些文件了。

启动 MQL5 Wizard 创建专家顾问:

创建专家顾问

图4. 创建专家顾问

我们需要指定专家顾问的名称:

专家顾问的一般属性

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

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

专家顾问的信号属性

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

在这里我们只使用一个交易信号模块。

添加“基于看涨吞没/看跌吞没并确认随机指标的信号”交易信号模块:

专家顾问的信号属性

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

信号模块已添加:

专家顾问的信号属性

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

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

专家顾问的跟踪属性

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

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

专家顾问的资金管理属性

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

按下“完成”按钮后,我们将获得生成的专家顾问代码,保存于 terminal_data_folder\MQL5\Experts\Expert_ABE_BE_Stoch.mq5 中。

生成的专家顾问的默认输入参数:

//--- 主要信号的输入参数
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.04,PeriodK=47,PeriodD=9,PeriodSlow=13,MA_period=5)。

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


基于吞没形态与随机指标的专家顾问测试结果

图11. 基于吞没形态与随机指标的专家顾问测试结果


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

通过 MQL5 Wizard 创建的专家顾问代码已附在 expert_abe_be_stoch.mq5 文件中。


列表
评论 0