使用MQL5 Wizard创建基于暗云盖和穿透线的交易信号EA

Mike 2011.02.25 20:08 69 0 0
附件

大家好!今天我们来聊聊如何使用 MQL5 Wizard 创建基于暗云盖和穿透线的交易信号专家顾问(EA)。MQL5 Wizard 提供了一个便捷的方式,可以快速生成交易信号的模块,帮助我们更好地实现交易策略。

在创建交易信号之前,我们可以参考一些经典的交易策略,比如《最优秀交易员的策略》。我们将重点关注由 RSI 指标确认的反转蜡烛图形态,例如暗云盖和穿透线。

1. 理解暗云盖和穿透线的反转蜡烛图形态

1.1. 暗云盖

暗云盖是一种看跌的反转蜡烛图形态,通常出现在上涨趋势的末尾。第一天形成一根长白蜡烛,而第二天则出现一个向上的缺口,但第二天的收盘价却低于第一天的中点。

Fig. 1. 暗云盖蜡烛图形态

图 1. 暗云盖蜡烛图形态

CCandlePattern 类中,CheckPatternDarkCloudCover() 方法用于识别暗云盖形态。

//+------------------------------------------------------------------+
//| 检查暗云盖蜡烛图形态的形成 |
//+------------------------------------------------------------------+
bool CCandlePattern::CheckPatternDarkCloudCover() {
   //--- 暗云盖
   if((Close(2)-Open(2) > AvgBody(1) && 
       (Close(1) < Close(2) && 
       (Close(1) > Open(2) && 
       (MidOpenClose(2) > CloseAvg(1) && 
       (Open(1) > High(2))) {
           return(true);
   }
   return(false);
}

CheckCandlestickPattern(CANDLE_PATTERN_DARK_CLOUD_COVER) 方法用于检查暗云盖蜡烛图形态的形成。


1.2. 穿透线

穿透线是一种看涨的反转蜡烛图形态,第二天的缺口下跌后,第二天的收盘价却高于第一天蜡烛的中点。这表明空头可能在形成底部。这种价格行为在蜡烛图上更明显,而在柱状图上则不易辨认。

Fig. 2. 穿透线蜡烛图形态

图 2. 穿透线蜡烛图形态

CCandlePattern 类中,CheckPatternPiercingLine() 方法用于识别穿透线形态。

//+------------------------------------------------------------------+
//| 检查穿透线蜡烛图形态的形成 |
//+------------------------------------------------------------------+
bool CCandlePattern::CheckPatternPiercingLine() {
   //--- 穿透线
   if((Close(1) - Open(1) > AvgBody(1) && 
       (Open(2) - Close(2) > AvgBody(1) && 
       (Close(1) > Close(2) && 
       (Close(1) < Open(2) && 
       (MidOpenClose(2) < CloseAvg(2) && 
       (Open(1) < Low(2))) {
           return(true);
   }
   return(false);
}

CheckCandlestickPattern(CANDLE_PATTERN_PIERCING_LINE) 方法用于检查穿透线蜡烛图形态的形成。


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

在开启多头或空头头寸之前,必须确认交易信号,通过 RSI 指标来确认。RSI的值必须低于或高于关键水平(多头为40,空头为60)。

关闭已开头寸的条件取决于 RSI 的值,主要有两种情况:

  • 如果RSI达到了相反的关键水平(多头为70,空头为30)
  • 如果未确认反转信号(当RSI达到30(多头)或70(空头)时)

Fig. 3. 暗云盖形态由RSI指标确认

图 3. 暗云盖形态由RSI指标确认


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

2.1. 开多头/闭空头

  1. 必须由 RSI 指标确认“穿透线”形态:RSI(1)<40(最近完成的蜡烛的RSI值必须小于40)。

  2. RSI 指标向上穿过关键水平70或30时,必须关闭空头头寸。

//+------------------------------------------------------------------+
//| 检查市场进入和退出的条件 |
//| 1) 市场进入(开多头,结果=80) |
//| 2) 市场退出(闭空头,结果=40) |
//+------------------------------------------------------------------+
int CDC_PL_RSI::LongCondition() {
   int result=0;
   //--- idx用于确定EA的工作模式
   //--- idx=0 - 在这种情况下EA在每个tick时检查交易条件
   //--- idx=1 - 在这种情况下EA仅在新蜡烛时检查交易条件
   int idx = StartIndex();
   //--- 检查开多头的条件
   //--- 穿透线形态和RSI<30
   if(CheckCandlestickPattern(CANDLE_PATTERN_PIERCING_LINE) && (RSI(1) < 40))
       result=80;
   //--- 检查闭空头的条件
   //--- 信号线交叉超买/超卖水平(向上30,向上70)
   if(((RSI(1) > 30) && (RSI(2) < 30)) || ((RSI(1) > 70) && (RSI(2) < 70)))
       result=40;
   //--- 返回结果
   return(result);
}

2.2. 开空头/闭多头

  1. 必须由 RSI 指标确认“暗云盖”形态:RSI(1)>60(最近完成的蜡烛的RSI值必须大于60)。

  2. RSI 指标向下穿过关键水平70或30时,必须关闭多头头寸。

//+------------------------------------------------------------------+
//| 检查市场进入和退出的条件 |
//| 1) 市场进入(开空头,结果=80) |
//| 2) 市场退出(闭多头,结果=40) |
//+------------------------------------------------------------------+
int CDC_PL_RSI::ShortCondition() {
   int result=0;
   //--- idx用于确定EA的工作模式
   //--- idx=0 - 在这种情况下EA在每个tick时检查交易条件
   //--- idx=1 - 在这种情况下EA仅在新蜡烛时检查交易条件
   int idx = StartIndex();
   //--- 检查开空头的条件
   //--- 暗云盖形态和RSI>60
   if(CheckCandlestickPattern(CANDLE_PATTERN_DARK_CLOUD_COVER) && (RSI(1) > 60))
       result=80;
   //--- 检查闭多头的条件
   //--- 信号线交叉超买/超卖水平(向下70,向下30)
   if(((RSI(1) < 70) && (RSI(2) > 70)) || ((RSI(1) < 30) && (RSI(2) > 30)))
       result=40;
   //--- 返回结果
   return(result);
}

2.3. 使用MQL5 Wizard创建专家顾问

CDC_PL_RSI 类不包含在标准库中,使用前需要下载 adc_pl_rsi.mqh 文件(见附件),并将其保存到 client_terminal_data\MQL5\Include\Expert\Signal\MySignals 文件夹。acandlepatterns.mqh 文件也应如此。重启 MetaEditor 后即可在 MQL5 Wizard 中使用这些模块。

创建专家顾问时启动 MQL5 Wizard:

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

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

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

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

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

然后选择所使用的交易信号模块。

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

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

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

添加基于暗云盖/穿透线的RSI确认信号模块:

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

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

信号模块已添加:

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

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

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

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

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

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

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

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

点击“完成”按钮后,我们将获得生成的专家顾问代码,位于 Expert_ADC_PL_RSI.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 Wizard 生成的专家顾问通过交易信号模块的“投票”来开盘和闭盘。主要模块的投票结果也会被用来进行“投票”的平均。在我们的案例中:主要模块 + 1个交易信号模块,因此在设置阈值时需要考虑这一点。由于这一点,ThresholdOpen 和 ThresholdClose 必须设置为 40=(0+80)/2 和 20=(0+40)/2。

Signal_StopLevel 和 Signal_TakeLevel 输入参数设置为0,意味着只有在满足关闭条件时才会关闭头寸。


2.4. 历史回测结果

我们来看看在历史数据上回测专家顾问的结果(EURUSD H1,测试期间:2010.01.01-2011.02.23,PeriodRSI=20,MA_period=14)。

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

Fig. 11. 基于暗云盖/穿透线 + RSI 的专家顾问测试结果

图 11. 基于暗云盖/穿透线 + RSI 的专家顾问测试结果


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

使用 MQL5 Wizard 创建的专家顾问代码附在 expert_ad_pl_rsi.mq5 文件中。

列表
评论 0