大家好!今天我们来聊聊如何使用 MQL5 Wizard 创建基于暗云盖和穿透线的交易信号专家顾问(EA)。MQL5 Wizard 提供了一个便捷的方式,可以快速生成交易信号的模块,帮助我们更好地实现交易策略。
在创建交易信号之前,我们可以参考一些经典的交易策略,比如《最优秀交易员的策略》。我们将重点关注由 RSI 指标确认的反转蜡烛图形态,例如暗云盖和穿透线。
1. 理解暗云盖和穿透线的反转蜡烛图形态
1.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. 穿透线
穿透线是一种看涨的反转蜡烛图形态,第二天的缺口下跌后,第二天的收盘价却高于第一天蜡烛的中点。这表明空头可能在形成底部。这种价格行为在蜡烛图上更明显,而在柱状图上则不易辨认。

图 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(空头)时)

图 3. 暗云盖形态由RSI指标确认
- int CDC_PL_RSI::LongCondition() - 检查开多头的条件(返回80)和闭空头的条件(返回40);
- int CDC_PL_RSI::ShortCondition() - 检查开空头的条件(返回80)和闭多头的条件(返回40)。
2.1. 开多头/闭空头
//+------------------------------------------------------------------+ //| 检查市场进入和退出的条件 | //| 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) 市场进入(开空头,结果=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:

图 4. 使用MQL5 Wizard创建专家顾问
接下来指定专家顾问的名称:

图 5. 专家顾问的一般属性
然后选择所使用的交易信号模块。

图 6. 专家顾问的信号属性
在我们的案例中,仅使用一个交易信号模块。
添加基于暗云盖/穿透线的RSI确认信号模块:

图 7. 专家顾问的信号属性
信号模块已添加:

图 8. 专家顾问的信号属性
可以选择任何跟踪属性,但我们将使用“未使用跟踪止损”:

图 9. 专家顾问的资金管理属性
关于资金管理属性,我们将使用“以固定交易量进行交易”:

图 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),未使用跟踪止损(未使用跟踪)。

图 11. 基于暗云盖/穿透线 + RSI 的专家顾问测试结果
最佳输入参数组合可以通过 MetaTrader 5 客户端终端的策略测试器 找到。
使用 MQL5 Wizard 创建的专家顾问代码附在 expert_ad_pl_rsi.mq5 文件中。
评论 0