首页 系统交易 帖子

基于晨星与暮星形态和CCI指标的交易信号生成

附件
322.zip (6.46 KB, 下载 0次)

在外汇交易中,MQL5 Wizard 可以帮助我们快速创建基于现成策略的智能交易顾问(EA)。它结合了 标准库 类,能够有效地检验交易想法。想要快速开始,只需创建自己的交易信号类,相关结构和示例请参考MQL5 Wizard: 如何创建交易信号模块

交易信号的基本思路是:信号类应继承自CExpertSignal,然后重写 LongCondition()ShortCondition() 方法为自己的逻辑。

我们将重点关注基于反转蜡烛形态(例如晨星和暮星)以及通过CCI指标确认的交易信号,这些信号模块基于CCandlePattern类,为我们提供了蜡烛形态生成交易信号的简单示例。

1. “晨星”和“暮星”反转蜡烛形态

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展示了这个形态。

如果第二根蜡烛是十字蜡烛,该模型则称为“暮十字星”。

暮星和暮十字星蜡烛形态

图2. “暮星”和“暮十字星”蜡烛形态

“暮星”和“暮十字星”形态的识别通过CCandlePattern类中的CheckPatternEveningStar()和CheckPatternEveningDoji()方法实现。

2. CCI指标确认的交易信号

开多或空头仓位的交易信号需要通过CCI指标确认。CCI值必须高于/低于关键水平(多头仓位为-50,空头仓位为50)。

仓位的平仓取决于CCI的值,可通过以下两种情况实现:

  • 当CCI曲线达到相反的关键水平(多头仓位为80,空头仓位为-80)时;
  • 当反向信号未被确认(当CCI达到以下水平:多头仓位为-80,空头仓位为80时)。

通过CCI指标确认的暮星形态

图3. 通过CCI指标确认的暮星形态

3. 使用MQL5 Wizard创建智能交易顾问

为了使用CMS_ES_CCI类,需下载acms_es_cci.mqh文件并将其保存到客户端数据文件夹中的MQL5\Include\Expert\Signal\MySignals文件夹下。相同的操作也适用于candlepatterns.mqh文件。重新启动MetaEditor后,便可在MQL5 Wizard中使用。

启动MQL5 Wizard以创建智能交易顾问:

使用MQL5 Wizard创建智能交易顾问

图4. 使用MQL5 Wizard创建智能交易顾问

指定智能交易顾问的名称:

设置智能交易顾问的一般属性

图5. 设置智能交易顾问的一般属性

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

智能交易顾问的信号属性

图6. 智能交易顾问的信号属性

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

添加“基于晨星/暮星形态并由CCI确认的信号”交易信号模块:

智能交易顾问的信号属性

图7. 智能交易顾问的信号属性

交易信号模块已添加:

智能交易顾问的信号属性

图8. 智能交易顾问的信号属性

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

智能交易顾问的止损属性

图9. 智能交易顾问的止损属性

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

智能交易顾问的资金管理属性

图10. 智能交易顾问的资金管理属性

点击“完成”按钮,将生成的智能交易顾问的代码保存在terminal_data_folder\MQL5\Experts\下,文件名为Expert_AMS_ES_CCI.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。

生成的智能交易顾问通过交易信号模块的“投票”来开平仓。主模块的投票(作为容器,包含所有添加的模块)也会使用,但其LongCondition()和ShortCondition()方法始终返回0。

主模块的投票结果也用于“投票”平均。在我们的案例中,主模块+1个交易信号模块,因此在设置阈值时需要考虑这一点。因此,ThresholdOpen和ThresholdClose应设置为40=(0+80)/2和20=(0+40)/2。

Signal_StopLevel和Signal_TakeLevel输入参数的值设置为0,意味着仓位的关闭将仅在平仓条件满足时进行。

3.1. 历史回测结果
让我们考虑在历史数据上的智能交易顾问回测(EURUSD H1,测试周期:2009.01.01-2011.03.16,PeriodCCI=25,MA_period=5)。

基于晨星/暮星+CCI的智能交易顾问测试结果

图11. 基于晨星/暮星+CCI的智能交易顾问测试结果

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

附上由MQL5 Wizard生成的智能交易顾问代码expert_ams_es_cci.mq5。

相关帖子

评论 (0)