使用MQL5 Wizard创建基于牛市/熊市吞没形态与MFI的交易信号

Mike 2011.03.17 19:32 51 0 0
附件

大家好!今天我们来聊聊如何借助MQL5 Wizard创建基于牛市和熊市吞没形态的交易信号。这是一个很方便的工具,可以让我们快速生成交易系统,适合那些希望快速实现交易策略的朋友们。

首先,MQL5 Wizard允许我们基于标准库的类来创建现成的专家顾问(EA)。我们只需要创建一个自己的交易信号类,具体的结构和示例可以参考这篇文章:MQL5 Wizard:如何创建交易信号模块

1. 牛市吞没与熊市吞没形态

1.1. 牛市吞没

牛市吞没形态通常在下跌趋势中出现,即一个大阳烛后面跟着一个小阳烛,且小阳烛的实体完全在大阳烛的范围内。这一形态表明下跌趋势可能会反转,适合我们考虑开多单。第二根蜡烛是以跳空高开的。

第二根(白色)蜡烛越小,反转的可能性就越大。

牛市吞没蜡烛形态

图 1. 牛市吞没蜡烛形态

牛市吞没形态的识别是在CCandlePattern类中的CheckPatternBullishHarami()方法中实现的。

//+------------------------------------------------------------------+
//| 检查牛市吞没蜡烛形态的形成                             |
//+------------------------------------------------------------------+
bool CCandlePattern::CheckPatternBullishHarami()
  {
//--- 牛市吞没
   if((Close(1)>Open(1))&&  // 最近的蜡烛是阳线
     ((Open(2)-Close(2)>AvgBody(1))&& // 前一根蜡烛是阴线,且实体大于平均值
     ((Close(1)<Open(2))&& // 阳线收盘价低于阴线开盘价
      (Open(1)>Close(2)))&& // 阳线开盘价高于阴线收盘价
      (MidPoint(2)<CloseAvg(2))) // 下跌趋势
      return(true);
//---
   return(false);
  }

CheckCandlestickPattern(CANDLE_PATTERN_BULLISH_HARAMI)方法用于检查牛市吞没蜡烛形态的形成。


1.2. 熊市吞没

熊市吞没形态通常在上涨趋势中出现,即一个大阴烛后面跟着一个小阴烛,且小阴烛的实体完全在大阴烛的范围内。这一形态表明上涨趋势可能会反转,适合我们考虑开空单。第二根蜡烛是以跳空低开的。

第二根(黑色)蜡烛越小,反转的可能性就越大。

熊市吞没蜡烛形态

图 2. 熊市吞没蜡烛形态

熊市吞没形态的识别是在CCandlePattern类中的CheckPatternBearishHarami()方法中实现的。

//+------------------------------------------------------------------+
//| 检查熊市吞没蜡烛形态的形成                             |
//+------------------------------------------------------------------+
bool CCandlePattern::CheckPatternBearishHarami()
  {
//--- 熊市吞没
   if((Close(1)<Open(1))&&  // 最近的蜡烛是阴线
     ((Close(2)-Open(2)>AvgBody(1))&& // 前一根蜡烛是阳线,且实体大于平均值
     ((Close(1)>Open(2))&& // 阴线收盘价高于阳线开盘价
      (Open(1)<Close(2)))&& // 阴线开盘价低于阳线收盘价
      (MidPoint(2)>CloseAvg(2))) // 上涨趋势
      return(true);
//---
   return(false);
  }

CheckCandlestickPattern(CANDLE_PATTERN_BEARISH_HARAMI)方法用于检查熊市吞没蜡烛形态的形成。


2. 通过MFI指标确认交易信号

在打开多单或空单之前,我们必须通过市场便利指数(MFI)指标进行确认。MFI指标的值必须低于40(开多单)或高于60(开空单)。

关闭已开仓位则取决于MFI指标的值,主要有以下两种情况:

  1. 当MFI达到相反的临界水平(多单70,空单30)时。
  2. 当反转信号未确认时(当MFI指标到达以下水平:多单30,空单70)。

牛市吞没形态与MFI指标确认

图 3. 牛市吞没形态,确认通过MFI指标


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

2.1. 开多单/关闭空单

  1. “牛市吞没”形态的形成必须通过MFI指标确认:MFI(1)<40(最近完成的蜡烛的MFI值必须小于40)。

  2. 当MFI指标突破临界水平(70或30)时,必须关闭空单。

//+------------------------------------------------------------------+
//| 检查市场的进出条件                                      |
//| 1) 市场进入(开多单,结果=80)                           |
//| 2) 市场退出(关闭空单,结果=40)                         |
//+------------------------------------------------------------------+
int CBH_BH_MFI::LongCondition()
  {
   int result=0;
//--- idx可以用来确定专家顾问的工作模式
//--- idx=0 - 在这种情况下,EA在每个tick上检查交易条件
//--- idx=1 - 在这种情况下,EA仅在新闻柱上检查交易条件
   int idx   =StartIndex();
//--- 检查开多单的条件
//--- 牛市吞没形态和MFI<40
  if(CheckCandlestickPattern(CANDLE_PATTERN_BULLISH_HARAMI) && (MFI(1)<40))
     result=80;
//--- 检查关闭空单的条件
//--- 信号线穿越超买/超卖水平(上升30,上升70)
  if(((MFI(1)>30) && (MFI(2)<30)) || ((MFI(1)>70) && (MFI(2)<70)))
     result=40;
//--- 返回结果
   return(result);
  }


2.2. 开空单/关闭多单

  1. “熊市吞没”形态的形成必须通过MFI指标确认:MFI(1)>60(最近完成的蜡烛的MFI值必须大于60)。

  2. 当MFI指标突破临界水平(70或30)时,必须关闭多单。

//+------------------------------------------------------------------+
//| 检查市场的进出条件                                      |
//| 1) 市场进入(开空单,结果=80)                           |
//| 2) 市场退出(关闭多单,结果=40)                         |
//+------------------------------------------------------------------+
int CBH_BH_MFI::ShortCondition()
  {
   int result=0;
//--- idx可以用来确定专家顾问的工作模式
//--- idx=0 - 在这种情况下,EA在每个tick上检查交易条件
//--- idx=1 - 在这种情况下,EA仅在新闻柱上检查交易条件
   int idx   =StartIndex();
//--- 检查开空单的条件
//--- 熊市吞没形态和MFI>60
  if(CheckCandlestickPattern(CANDLE_PATTERN_BEARISH_HARAMI) && (MFI(1)>60))
     result=80;
//--- 检查关闭多单的条件
//--- 信号线穿越超买/超卖水平(上升70,下降30)
   if(((MFI(1)>70) && (MFI(2)<70)) || ((MFI(1)<30) && (MFI(2)>30)))
     result=40;
//--- 返回结果
   return(result);
  }


2.3. 使用MQL5 Wizard创建专家顾问

CBH_BH_MFI类不包含在标准库中,要使用它,必须下载abh_bh_mfi.mqh文件(见附件)并将其保存到client_terminal_data\folder\MQL5\Include\Expert\Signal\MySignals。对acandlepatterns.mqh文件也进行同样的操作。完成后重新启动MetaEditor,便可在MQL5 Wizard中使用它。

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

使用MQL5 Wizard创建专家顾问

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

接下来,输入专家顾问的名称:

专家顾问的一般属性

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

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

专家顾问的信号属性

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

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

添加“基于牛市吞没/熊市吞没的信号,确认通过MFI”交易信号模块:

专家顾问的信号属性

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

交易信号模块添加完成:

专家顾问的信号属性

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

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

专家顾问的跟踪属性

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

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

专家顾问的资金管理属性

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

点击“完成”按钮后,我们将得到生成的专家顾问代码,存储在terminal_data_folder\MQL5\Experts\下的Expert_ABH_BH_MFI.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生成的专家顾问使用“模块投票”来开仓和平仓。主模块(作为容器,包含所有添加的模块)的投票结果也会被使用,但其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,PeriodMFI=37,MA_period=11)对专家顾问的回测结果。

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

专家顾问的测试结果

图 11. 基于牛市吞没/熊市吞没与MFI的专家顾问测试结果


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

生成的专家顾问代码附在expert_abh_bh_mfi.mq5中。


列表
评论 0