首页 系统交易 帖子

使用MQL5向导创建基于牛市和熊市哈拉米形态及随机指标的交易信号

附件
310.zip (6.59 KB, 下载 0次)

在交易中,识别有效的交易信号至关重要。今天,我们将探讨如何使用MQL5向导创建基于牛市和熊市哈拉米形态以及随机指标的交易策略。

MQL5向导为我们提供了一个简单的方法来创建现成的专家顾问(EA),我们可以利用内置的标准库类快速验证交易想法。你只需创建自己的交易信号类,具体结构和示例可以参考MQL5向导:如何创建交易信号模块

在交易信号类的基础上,我们将使用CExpertSignal进行扩展。接下来,需要重写LongCondition()ShortCondition()这两个虚拟方法,以实现自己的逻辑。

在此过程中,我们会关注一些反转蜡烛图形态,尤其是牛市和熊市哈拉米形态,并结合随机指标来确认这些信号。

1. 牛市和熊市哈拉米反转蜡烛图形态

1.1. 牛市哈拉米

牛市哈拉米反转形态出现在下跌趋势中,较大的蜡烛之后跟随一个较小的蜡烛,其实体位于较大蜡烛的范围内。这一形态表明下跌趋势可能反转,是进场做多的好时机。第二根蜡烛开盘时会有向上的缺口。

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

Fig. 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. 熊市哈拉米

熊市哈拉米反转形态出现在上涨趋势中,较大的蜡烛之后跟随一个较小的蜡烛,其实体位于较大蜡烛的范围内。这一形态表明上涨趋势可能反转,是进场做空的好时机。第二根蜡烛开盘时会有向下的缺口。

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

Fig. 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. 随机指标确认的交易信号

在决定开多或开空之前,交易信号必须得到随机指标的确认。%D线必须高于/低于相应的临界水平(30或70)。

平仓的条件取决于%D指标的值,可以在以下情况下完成:

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

Fig. 3. 熊市哈拉米蜡烛图形态,基于随机指标确认

图3. 熊市哈拉米蜡烛图形态,基于随机指标确认

交易条件的检查通过以下两个方法实现:

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

2.1. 开多仓/平空仓

  1. “牛市哈拉米”形态的形成必须得到随机指标的确认:StochSignal(1)<30(最后一根蜡烛的随机指标信号线值必须小于30)。

  2. 如果随机指标的信号线向上穿越了20或80水平,则必须平空仓。

//+------------------------------------------------------------------+
//| 检查市场进出条件 |
//| 1) 市场进场(开多仓,结果=80) |
//| 2) 市场出场(平空仓,结果=40) |
//+------------------------------------------------------------------+
int CBH_BH_Stoch::LongCondition()
  {
   int result=0;
//--- idx可用于确定专家顾问的工作模式
//--- idx=0 - 在这种情况下,EA在每个报价上检查交易条件
//--- idx=1 - 在这种情况下,EA仅在新闻条上检查交易条件
  int idx   =StartIndex();
//--- 检查开多仓的条件
//--- 牛市哈拉米形态与信号线<30
  if (CheckCandlestickPattern(CANDLE_PATTERN_BULLISH_HARAMI) && (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 CBH_BH_Stoch::ShortCondition()
  {
   int result=0;
//--- idx可用于确定专家顾问的工作模式
//--- idx=0 - 在这种情况下,EA在每个报价上检查交易条件
//--- idx=1 - 在这种情况下,EA仅在新闻条上检查交易条件
  int idx   =StartIndex();
//--- 检查开空仓的条件
//--- 熊市哈拉米形态与信号线>70
  if (CheckCandlestickPattern(CANDLE_PATTERN_BEARISH_HARAMI) && (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向导创建专家顾问

CBH_BH_Stoch类并不包含在标准库类中,要使用它,需要下载acbh_bh_stoch.mqh文件(见附件)并将其保存到client_terminal_data\folder\MQL5\Include\Expert\Signal\MySignals。candlepatterns.mqh文件也需如此。重启MetaEditor后,你可以在MQL5向导中使用它。

要创建专家顾问,启动MQL5向导

Fig. 4. 使用MQL5向导创建专家顾问

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

接下来指定专家顾问的名称:

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

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

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

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

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

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

添加“基于牛市和熊市哈拉米确认的随机信号”交易信号模块:

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

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

交易信号模块已添加:

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

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

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

Fig. 9. 专家顾问的跟随属性

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

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

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

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

按下“完成”按钮后,我们将得到生成的专家顾问代码,位于Expert_ABH_BH_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向导生成的专家顾问使用来自交易信号模块的“投票”来开仓和平仓。主模块的投票(作为容器,它包含所有添加的模块)也会被使用,但其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.04,PeriodK=47,PeriodD=9,PeriodSlow=13,MA_period=5)。

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

Fig. 11. 基于牛市/熊市哈拉米和随机指标的专家顾问测试结果

图11. 基于牛市/熊市哈拉米和随机指标的专家顾问测试结果


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

由MQL5向导创建的专家顾问代码附在expert_abh_bh_stoch.mq5中。

相关帖子

评论 (0)