大家好,今天我们来聊聊如何使用MQL5 Wizard创建基于暗云盖与刺透线的交易信号。这些信号可以帮助我们在MetaTrader 5平台上快速验证交易想法。
首先,MQL5 Wizard允许我们根据标准库中的类生成现成的专家顾问(EA)。你只需要创建自己的交易信号类,就能快速测试你的交易策略。关于如何创建交易信号模块的详细信息,请参考MQL5 Wizard:如何创建交易信号模块。
1. 暗云盖与刺透线的K线形态
1.1 暗云盖
暗云盖是一种看跌的反转K线形态,通常出现在上升趋势的末端。第一天形成一根长白K线,第二天开盘高于前一天的收盘,但最后收盘低于前一天的中点。

在CCandlePattern类中,暗云盖形态的识别是通过CheckPatternDarkCloudCover()方法实现的。
//+------------------------------------------------------------------+ //| 检查暗云盖K线形态的形成 | //+------------------------------------------------------------------+ bool CCandlePattern::CheckPatternDarkCloudCover() { //--- if((Close(2)-Open(2)>AvgBody(1)) && // (长白K) (Close(1)<Close(2)) && // (Close(1)>Open(2)) && // (收盘在前一根K线体内) (MidOpenClose(2)>CloseAvg(1)) && // (上升趋势) (Open(1)>High(2))) // (开盘在新高) return(true); //--- return(false); }
通过CCandlePattern类的CheckCandlestickPattern(CANDLE_PATTERN_DARK_CLOUD_COVER)方法可以检查暗云盖K线形态的形成。
1.2 刺透线
刺透线形态在第二天的开盘价低于前一天的收盘,但收盘价却高于前一天K线体的中点。这表明市场可能在形成底部。此价位动作在K线图上比在条形图上更为明显,收盘越深入前一天K线体,反转信号的成功概率越高。

刺透线的识别通过CheckPatternPiercingLine()方法在CCandlePattern类中实现,具体代码与暗云盖类似。
2. 通过随机指标确认交易信号
在我们建立多头或空头头寸前,必须通过随机指标进行确认。%D线需要高于或低于相应的临界水平(30或70)。
对于已开头寸的平仓,依据%D指标的值可分为两种情况:
- %D线达到相反的临界水平(多头为80,空头为20)
- 反转信号未得到确认(当%D线达到以下水平:多头为20,空头为80)

通过随机指标确认的暗云盖形态
2.1 开多头/平空头头寸
刺透线的形成必须得到随机指标的确认:StochSignal(1)<30(随机指标最后一根已完成K线的信号线值必须小于30)。
如果随机指标的信号线向上穿越20或80水平,空头头寸需要平仓。
//+------------------------------------------------------------------+ //| 检查市场进出条件 | //| 1) 市场进场(开多头,结果=80) | //| 2) 市场出场(平空头,结果=40) | //+------------------------------------------------------------------+ int CDC_PL_Stoch::LongCondition() { int result=0; //--- idx可用于确定EA的工作模式 int idx =StartIndex(); //--- 检查开多头条件 if (CheckCandlestickPattern(CANDLE_PATTERN_PIERCING_LINE) && (StochSignal(1)<30)) result=80; //--- 检查平空头条件 if((((StochSignal(1)>20) && (StochSignal(2)<20)) || ((StochSignal(1)>80) && (StochSignal(2)<80)))) result=40; //--- 返回结果 return(result); }
2.2 开空头/平多头头寸
暗云盖的形成必须得到随机指标的确认:StochSignal(1)>70(随机指标最后一根已完成K线的信号线值必须大于70)。
如果随机指标的信号线向下穿越80或20水平,多头头寸需要平仓。
//+------------------------------------------------------------------+ //| 检查市场进出条件 | //| 1) 市场进场(开空头,结果=80) | //| 2) 市场出场(平多头,结果=40) | //+------------------------------------------------------------------+ int CDC_PL_Stoch::ShortCondition() { int result=0; //--- idx可用于确定EA的工作模式 int idx =StartIndex(); //--- 检查开空头条件 if (CheckCandlestickPattern(CANDLE_PATTERN_DARK_CLOUD_COVER) && (StochSignal(1)>70)) result=80; //--- 检查平多头条件 if((((StochSignal(1)<80) && (StochSignal(2)>80)) || ((StochSignal(1)<20) && (StochSignal(2)>20)))) result=40; //--- 返回结果 return(result); }
2.3 使用MQL5 Wizard创建专家顾问
CDC_PL_Stoch类不包含在标准库中,使用前需下载adc_pl_stoch.mqh文件(见附件),并保存至client_terminal_data\folder\MQL5\Include\Expert\Signal\MySignals。candlepatterns.mqh文件同样需要如此。重启MetaEditor后,你便可以在MQL5 Wizard中使用它。
创建专家顾问,只需启动MQL5 Wizard:

使用MQL5 Wizard创建专家顾问
接下来,输入专家顾问的名称:

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

专家顾问的信号属性
在我们的案例中,我们只使用一个交易信号模块。
添加“基于暗云盖/刺透线确认的信号”交易信号模块:

专家顾问的信号属性
交易信号模块已添加:

专家顾问的信号属性
你可以选择任何追踪属性,但我们将使用“不使用追踪止损”:

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

专家顾问的资金管理属性
点击“完成”按钮后,你将获得生成的专家顾问代码,代码位置在Expert_ADC_PL_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 Wizard生成的专家顾问通过交易信号模块的“投票”来开平仓。主要模块的投票(作为容器,它包含了所有添加的模块)也被使用,但其LongCondition()和ShortCondition()方法始终返回0。
主要模块的投票结果也会在“投票”平均中使用。在我们的案例中,我们有:主要模块 + 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.02,PeriodK=9,PeriodD=5,PeriodSlow=20,MA_period=27)。
在创建专家顾问时我们使用了固定交易量(固定手数交易,0.1),不使用追踪止损算法(不使用追踪)。

基于暗云盖与刺透线+随机指标的专家顾问测试结果
最优的输入参数可以通过MetaTrader 5客户端的策略测试器找到。
由MQL5 Wizard创建的专家顾问代码已附在expert_adc_pl_stoch.mq5。