首页 系统交易 帖子

使用MQL5向导创建基于锤子/悬挂人形态与随机指标的交易信号

附件
314.zip (6.58 KB, 下载 0次)

MQL5向导允许我们创建基于 标准库 类的现成专家顾问(EA)。这一工具能快速验证我们的交易思路,只需要创建自己的交易信号类即可。关于这个类的结构和示例,可以参考 MQL5向导:如何创建交易信号模块

基本思路是:交易信号类继承自 CExpertSignal,然后重写 LongCondition()ShortCondition() 这两个虚方法,使用我们自己的方法。

有一本书 《最佳交易者策略》(俄文),书中讨论了很多交易策略,我们将重点关注由 随机指标 确认的反转蜡烛图形态,例如锤子和悬挂人形态,此外还有 CCIMFIRSI 等振荡器。

最佳方式是创建一个单独的类,继承自 CExpertSignal,用于检查蜡烛图形态的形成。为了确认由蜡烛图模式生成的交易信号,只需编写一个继承自 CCandlePattern 的类,并在其中添加必要的确认特性(例如通过振荡器的确认)。

接下来,我们将讨论基于“锤子/悬挂人”反转蜡烛图形态的信号,并通过 随机指标 进行确认。该交易信号模块基于 CCandlePattern 类,这是一个使用蜡烛图模式创建交易信号的简单示例。

1. “锤子”和“悬挂人”反转蜡烛图形态

1.1. 锤子

“锤子”是一个小身体和长下影线的蜡烛图形态,通常在价格下跌后形成。锤子形态通常表示空头趋势的结束。

蜡烛图身体的颜色并不重要,但看涨的锤子表明了更强的看涨潜力。锤子形态的身体通常在前一根蜡烛的最低点附近形成。较长的下影线和较短的上影线会提高反转形态的潜力。

图1. 锤子蜡烛图形态

图1. 锤子蜡烛图形态

“锤子”形态的识别通过 CheckPatternHammer() 方法在 CCandlePattern 类中实现:

//+------------------------------------------------------------------+
//| 检查“锤子”蜡烛图形态的形成         |
//+------------------------------------------------------------------+
bool CCandlePattern::CheckPatternHammer()
  {
//--- 锤子
   if((MidPoint(1)<CloseAvg(2))                                 && // 下跌趋势
      (MathMin(Open(1),Close(1))>(High(1)-(High(1)-Low(1))/3.0)) && // 身体在上1/3
      (Close(1)2)) && (Open(1)2)))                 // 身体缺口
      return(true);
//---
   return(false);
  }

CCandlePattern 类中,CheckCandlestickPattern(CANDLE_PATTERN_HAMMER) 方法用于检查“锤子”蜡烛图形态的形成。


1.2. 悬挂人

“悬挂人”是一个小身体和长下影线的蜡烛图形态,通常在价格上涨后形成。悬挂人形态通常表示看涨趋势的结束。

蜡烛图身体的颜色并不重要,但看跌的蜡烛表明了更强的看跌潜力。悬挂人形态的身体通常在前一根蜡烛的最高点附近形成。较长的下影线和较短的上影线会提高反转形态的潜力。

图2. 悬挂人蜡烛图形态

图2. 悬挂人蜡烛图形态

“悬挂人”形态的识别通过 CheckPatternHangingMan() 方法在 CCandlePattern 类中实现:

//+------------------------------------------------------------------+

//| 检查“悬挂人”蜡烛图形态的形成         |
//+------------------------------------------------------------------+
bool CCandlePattern::CheckPatternHangingMan()
  {
//--- 悬挂人
   if((MidPoint(1)>CloseAvg(2))                                && // 上涨趋势
      (MathMin(Open(1),Close(1)>(High(1)-(High(1)-Low(1))/3.0)) && // 身体在上1/3
      (Close(1)>Close(2)) && (Open(1)>Open(2)))                 // 身体缺口
      return(true);
//---
   return(false);
  }

CCandlePattern 类中,CheckCandlestickPattern(CANDLE_PATTERN_HANGING_MAN) 方法用于检查“悬挂人”蜡烛图形态的形成。


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

打开多头或空头头寸的交易信号必须由 随机指标 确认。信号 %D 线必须高于/低于相应的关键水平(30 或 70)。

已开头寸的平仓取决于 %D 指标的值。平仓可以在两种情况下进行:

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

图3. 由随机指标确认的“锤子”形态

图3. 由随机指标确认的“锤子”形态


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

2.1. 开多头头寸/关闭空头头寸

  1. 形成“锤子”形态必须由 随机指标 确认:StochSignal(1)<30(随机指标的信号线值必须小于 30)。

  2. 空头头寸必须在随机指标的信号线向上穿越 20 或 80 水平时关闭。

//+------------------------------------------------------------------+
//| 检查市场进出条件                 |
//| 1) 市场入场(开多头头寸,结果=80)            |
//| 2) 市场退出(关闭空头头寸,结果=40)         |
//+------------------------------------------------------------------+
int CH_HM_Stoch::LongCondition()
  {
   int result=0;
//--- idx 可用于确定专家顾问工作模式
//--- idx=0 - 在此情况下 EA 在每个滴答时检查交易条件
//--- idx=1 - 在此情况下 EA 仅在新闻蜡烛时检查交易条件
  int idx   =StartIndex();
//--- 检查开多头头寸的条件
//--- 形成锤子形态和信号线<30
  if (CheckCandlestickPattern(CANDLE_PATTERN_HAMMER) && (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 CH_HM_Stoch::ShortCondition()
  {
   int result=0;
//--- idx 可用于确定专家顾问工作模式
//--- idx=0 - 在此情况下 EA 在每个滴答时检查交易条件
//--- idx=1 - 在此情况下 EA 仅在新闻蜡烛时检查交易条件
  int idx   =StartIndex();
//--- 检查开空头头寸的条件
//--- 形成悬挂人形态和信号线>70
  if (CheckCandlestickPattern(CANDLE_PATTERN_HANGING_MAN) && (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向导创建专家顾问

CH_HM_Stoch 类不包含在标准库类中,因此使用它时,需要下载 ach_hm_stoch.mqh 文件(见附件),并将其保存在 client_terminal_data\folder\MQL5\Include\Expert\Signal\MySignals 中。对 candlepatterns.mqh 文件也要做同样处理。重启 MetaEditor 后即可在 MQL5 向导中使用它。

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

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

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

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

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

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

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

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

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

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

添加“基于锤子/悬挂人形态,经随机指标确认的信号”的交易信号模块:

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

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

交易信号模块已添加:

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

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

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

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

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

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

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

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

点击“完成”按钮,我们将获得生成的专家顾问代码,位于 Expert_AH_HM_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),未使用跟随止损算法(未使用跟随)。


图11. 基于锤子/悬挂人+随机指标的专家顾问测试结果

图11. 基于锤子/悬挂人+随机指标的专家顾问测试结果


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

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


相关帖子

评论 (0)