首页 系统交易 帖子

利用 MQL5 向导创建基于晨星/暮星和随机指标的交易信号

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

在交易领域,MQL5 向导 是一个非常实用的工具,它可以帮助我们快速创建基于标准库类的现成交易系统(EA)。使用它,我们可以轻松验证交易想法,只需创建自己的交易信号类即可。有关如何创建交易信号模块的详细信息,请参阅MQL5 向导:如何创建交易信号模块

创建的交易信号类需要从CExpertSignal 继承,并重写 LongCondition()ShortCondition() 方法,具体实现则根据自己的需求进行修改。

我们将关注一些反转蜡烛图模式,特别是被随机指标确认的模式,如晨星(Morning Star)和暮星(Evening Star)。这两种模式的形成和确认可以通过一些经典的蜡烛图模式和随机指标的结合来实现。

1. 晨星和暮星反转蜡烛图模式

1.1. 晨星

晨星模式通常表示下跌趋势的反转,由三根蜡烛组成(见图1)。第一根是长黑蜡烛,接下来是一个小实体的蜡烛(颜色不重要),位于第一根蜡烛的实体外部。小实体蜡烛表明多空力量相当,市场即将转变。

第三根蜡烛是看涨蜡烛,其实体不与第二根蜡烛重叠,且收盘价位于第一根(看跌)蜡烛的实体内部。若第二根蜡烛是类似于十字星的蜡烛,则称为“晨十字星”。

晨星蜡烛图模式

图1. 晨星与晨十字星蜡烛图模式

“晨星”模式的识别可以通过CCandlePattern 类中的 CheckPatternMorningStar() 和 CheckPatternMorningDoji() 方法实现。

//+------------------------------------------------------------------+
//| 检查“晨星”模式的形成                    |
//+------------------------------------------------------------------+
bool CCandlePattern::CheckPatternMorningStar()
  {
//--- 晨星
   if((Open(3)-Close(3)>AvgBody(1))             && // 看跌蜡烛,其实体大于平均蜡烛实体
      (MathAbs(Close(2)-Open(2)<AvgBody(1)*0.5) && // 第二根蜡烛实体较小(小于平均蜡烛实体的一半)
      (Close(2)<Close(3))                       && // 第二根蜡烛的收盘价低于第一根蜡烛的收盘价
      (Open(2)<Open(3))                     && // 第二根蜡烛的开盘价低于第一根蜡烛的开盘价
      (Close(1)>MidOpenClose(3)))                  // 最后一根蜡烛的收盘价高于第一根蜡烛的中点
      return(true);
//---
   return(false);
  }
//+------------------------------------------------------------------+

1.2. 暮星

暮星模式则表示上涨趋势的反转,由三根蜡烛组成(见图2)。第一根为长白蜡烛,接下来是小实体蜡烛(颜色不重要),同样位于第一根蜡烛的实体外部。小实体蜡烛表明多空力量相当,市场即将转变。

第三根蜡烛是看跌蜡烛,其实体不与第二根蜡烛重叠,且收盘价位于第一根(看涨)蜡烛的实体内部。如果第二根蜡烛是十字星,则称为“暮十字星”。

暮星蜡烛图模式

图2. 暮星与暮十字星蜡烛图模式

“暮星”与“暮十字星”模式的识别方法与晨星相似,具体代码实现也可以参考CCandlePattern 类中的相应方法。

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

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

平仓的条件有两个:

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

以随机指标确认的暮星模式

图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 CMS_ES_Stoch::LongCondition()
  {
   int result=0;
   //--- idx可用于确定EA工作模式
   //--- idx=0 - EA在每个tick中检查交易条件
   //--- idx=1 - EA仅在新闻蜡烛中检查交易条件
   int idx   =StartIndex();
   //--- 检查开多头头寸的条件
   //--- “晨星”模式的形成和信号线<30
  if (CheckCandlestickPattern(CANDLE_PATTERN_MORNING_STAR) && (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 CMS_ES_Stoch::ShortCondition()
  {
   int result=0;
   //--- idx可用于确定EA工作模式
   //--- idx=0 - EA在每个tick中检查交易条件
   //--- idx=1 - EA仅在新闻蜡烛中检查交易条件
   int idx   =StartIndex();
   //--- 检查开空头头寸的条件
   //--- “暮星”模式的形成和信号线>70
  if (CheckCandlestickPattern(CANDLE_PATTERN_EVENING_STAR) && (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 向导创建专家顾问

CMS_ES_Stoch 类不包含在标准库中,使用前需要下载 acms_es_stoch.mqh 文件(见附件),并将其保存到 client_terminal_data\folder\MQL5\Include\Expert\Signal\MySignals。蜡烛图模式的相关文件同样需要处理。在重启 MetaEditor 后即可在 MQL5 向导中使用这些模块。

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

创建专家顾问步骤

图4. 创建专家顾问步骤

接下来,我们需要指定专家顾问的名称:

专家顾问的一般属性

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

然后,我们需要选择所用的交易信号模块。

专家顾问的信号属性

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

在我们的案例中,只使用了一个交易信号模块。
添加“基于晨星/暮星和随机指标的信号”交易信号模块:

专家顾问的信号属性

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

交易信号模块已添加:

专家顾问的信号属性

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

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

专家顾问的跟踪属性

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

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

专家顾问的资金管理属性

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

按下“完成”按钮后,我们将获得生成的专家顾问代码,位于 Expert_AMS_ES_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,测试时间段:2000.01.01-2011.03.16,PeriodK=12,PeriodD=8,PeriodSlow=29,MA_period=4)。

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

基于晨星/暮星和随机指标的专家顾问测试结果

图11. 基于晨星/暮星和随机指标的专家顾问测试结果


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

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


相关帖子

评论 (0)