使用MQL5 Wizard创建基于牛市/熊市会合线与随机指标的交易信号系统

Mike 2011.03.24 02:45 64 0 0
附件

在交易界,MQL5 Wizard是一个非常实用的工具,它能够帮助我们快速创建基于标准库类的现成EA(专家顾问)。你只需创建自己的交易信号类,便可以立即检验你的交易想法。关于如何创建交易信号模块的更多细节,可以参考这篇文章:MQL5 Wizard:如何创建交易信号模块

基本思路是:交易信号类派生自CExpertSignal,然后我们需要重写LongCondition()ShortCondition()这两个虚方法,加入自己的逻辑。

在这方面,我推荐一本书,《顶尖交易者的策略(俄文),书中探讨了许多交易策略,我们将重点关注反转蜡烛图模式,并借助随机指标CCIMFIRSI等指标进行确认。

创建一个派生自CExpertSignal的独立类来检测蜡烛图模式的形成是最理想的。为了确认由蜡烛图模式产生的交易信号,只需编写一个派生自CCandlePattern的类,并添加必要的确认特性(例如,使用振荡器进行确认)。

接下来,我们将讨论基于“牛市/熊市会合线”反转蜡烛图模式的信号,并通过随机指标进行确认。交易信号模块是基于CCandlePattern类,这是一个使用蜡烛图模式创建交易信号的简单示例。


1. “会合线”反转蜡烛图模式

1.1. 牛市会合线

该模式由两根蜡烛组成(先是下跌蜡烛,后是上涨蜡烛),它们的收盘价相等(或接近)。两根蜡烛的实体长度必须大于平均实体长度。

“牛市会合线”模式表示下跌趋势的反转。

图1. 牛市会合线模式

图1. 牛市会合线模式

“牛市会合线”模式的识别通过CCandlePattern类中的CheckPatternBullishMeetingLines()方法实现:

//+--------------------------------------------------------------------+
//| 检查“牛市会合线”蜡烛图模式的形成 |            
//+--------------------------------------------------------------------+
bool CCandlePattern::CheckPatternBullishMeetingLines()
  {
//--- 牛市会合线
   if((Open(2)-Close(2)>AvgBody(1))              && // 长黑蜡烛
     ((Close(1)-Open(1))>AvgBody(1))             && // 长白蜡烛
      (MathAbs(Close(1)-Close(2))<0.1*AvgBody(1)))   // 十字星收盘
      return(true);
//---
   return(false);
  }

CheckCandlestickPattern(CANDLE_PATTERN_BULLISH_MEETING_LINES)方法用于检查“牛市会合线”蜡烛图模式的形成。


1.2. 熊市会合线

该模式由两根蜡烛组成(先是上涨蜡烛,后是下跌蜡烛),它们的收盘价相等(或接近)。两根蜡烛的实体长度必须大于平均实体长度。

“熊市会合线”模式表示上涨趋势的反转。

图2. 熊市会合线模式

图2. 熊市会合线模式

“熊市会合线”模式的识别通过CCandlePattern类中的CheckPatternBearishMeetingLines()方法实现:

//+--------------------------------------------------------------------+
//| 检查“熊市会合线”蜡烛图模式的形成 |    
//+--------------------------------------------------------------------+
bool CCandlePattern::CheckPatternBearishMeetingLines()
  {
//--- 熊市会合线
   if((Close(2)-Open(2)>AvgBody(1))             && // 长白蜡烛
     ((Open(1)-Close(1))>AvgBody(1))             && // 长黑蜡烛
      (MathAbs(Close(1)-Close(2))<0.1*AvgBody(1)))  // 十字星收盘
      return(true);
//---
   return(false);
  }

CheckCandlestickPattern(CANDLE_PATTERN_BEARISH_MEETING_LINES)方法用于检查“熊市会合线”蜡烛图模式的形成。


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

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

平仓的条件取决于%D指标的值,主要有两种情况:

  1. 当%D线到达相反临界水平时(多单为80,空单为20)
  2. 当反向信号未确认时(当%D线达到以下水平:多单20,空单80)

图3. 熊市会合线模式通过随机指标确认

图3. 熊市会合线模式通过随机指标确认

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

2.1. 开多单/闭空单

  1. “牛市会合线”模式的形成必须通过随机指标确认:StochSignal(1)<30(随机指标最近一根完成的蜡烛的信号线值必须小于30)。

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

//+------------------------------------------------------------------+
//| 检查市场进出条件                 |
//| 1) 市场进入(开多单,结果=80)                  |
//| 2) 市场退出(闭空单,结果=40)          |
//+------------------------------------------------------------------+
int CML_Stoch::LongCondition()
  {
   int result=0;
//--- idx可以用来确定EA工作模式
//--- idx=0 - 在这种情况下,EA在每个tick上检查交易条件
//--- idx=1 - 在这种情况下,EA仅在新闻蜡烛上检查交易条件
  int idx   =StartIndex();
//--- 检查开多单的条件
//--- 牛市会合线模式和信号线<30
  if (CheckCandlestickPattern(CANDLE_PATTERN_BULLISH_MEETING_LINES) && (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 CML_Stoch::ShortCondition()
  {
   int result=0;
//--- idx可以用来确定EA工作模式
//--- idx=0 - 在这种情况下,EA在每个tick上检查交易条件
//--- idx=1 - 在这种情况下,EA仅在新闻蜡烛上检查交易条件
  int idx   =StartIndex();
//--- 检查开空单的条件
//--- 熊市会合线模式和信号线>70
  if (CheckCandlestickPattern(CANDLE_PATTERN_BEARISH_MEETING_LINES) && (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 Wizard创建EA

CML_Stoch类不包含在标准库类中,要使用它,需要下载acml_stoch.mqh文件(见附件)并将其保存到client_terminal_data\folder\MQL5\Include\Expert\Signal\MySignals。对candlepatterns.mqh文件也要进行相同处理。重启MetaEditor后,你可以在MQL5 Wizard中使用它。

要创建一个EA,请启动MQL5 Wizard

图4. 使用MQL5 Wizard创建EA

图4. 使用MQL5 Wizard创建EA

现在让我们指定EA的名称:

图5. EA的一般属性

图5. EA的一般属性

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

图6. EA的信号属性

图6. EA的信号属性

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

添加“基于牛市/熊市会合线,由随机指标确认的信号”交易信号模块:

图7. EA的信号属性

图7. EA的信号属性

已添加交易信号模块:

图8. EA的信号属性

图8. EA的信号属性

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

图9. EA的止损属性

图9. EA的止损属性

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

图10. EA的资金管理属性

图10. EA的资金管理属性

按下“完成”按钮后,我们将获得生成的EA代码,文件名为Expert_AML_Stoch.mq5,保存路径为terminal_data_folder\MQL5\Experts\。

生成的EA的默认输入参数:

//--- 主要信号的输入参数
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生成的EA会根据交易信号模块的“投票”来开仓和平仓。主模块的投票(作为容器,包含所有添加的模块)也会被使用,但它的LongCondition()和ShortCondition()方法始终返回0。

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

Signal_StopLevel和Signal_TakeLevel输入参数的值设置为0,这意味着只有在平仓条件满足时才能平仓。


2.4. 历史回测结果

我们来看看在历史数据上(EURUSD H1,测试周期:2005.01.01-2010.03.16,PeriodK=6,PeriodD=3,PeriodSlow=36,MA_period=3)对EA的回测结果。

在创建EA时,我们使用了固定交易量(固定交易手数, 0.1),未使用止损算法(未使用止损)。

图11. 基于牛市/熊市会合线与随机指标的EA测试结果

图11. 基于牛市/熊市会合线与随机指标的EA测试结果


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

通过MQL5 Wizard创建的EA代码附在expert_aml_stoch.mq5文件中。


列表
评论 0