首页 系统交易 帖子

使用MQL5 Wizard创建基于暗云盖与刺透线的交易信号

附件
297.zip (6.61 KB, 下载 0次)

大家好,今天我们来聊聊如何使用MQL5 Wizard创建基于暗云盖与刺透线的交易信号。这些信号可以帮助我们在MetaTrader 5平台上快速验证交易想法。

首先,MQL5 Wizard允许我们根据标准库中的类生成现成的专家顾问(EA)。你只需要创建自己的交易信号类,就能快速测试你的交易策略。关于如何创建交易信号模块的详细信息,请参考MQL5 Wizard:如何创建交易信号模块

1. 暗云盖与刺透线的K线形态

1.1 暗云盖

暗云盖是一种看跌的反转K线形态,通常出现在上升趋势的末端。第一天形成一根长白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线体,反转信号的成功概率越高。

刺透线K线形态示意图

刺透线的识别通过CheckPatternPiercingLine()方法在CCandlePattern类中实现,具体代码与暗云盖类似。

2. 通过随机指标确认交易信号

在我们建立多头或空头头寸前,必须通过随机指标进行确认。%D线需要高于或低于相应的临界水平(30或70)。

对于已开头寸的平仓,依据%D指标的值可分为两种情况:

  • %D线达到相反的临界水平(多头为80,空头为20)
  • 反转信号未得到确认(当%D线达到以下水平:多头为20,空头为80)

通过随机指标确认的暗云盖形态

通过随机指标确认的暗云盖形态


2.1 开多头/平空头头寸

  1. 刺透线的形成必须得到随机指标的确认:StochSignal(1)<30(随机指标最后一根已完成K线的信号线值必须小于30)。

  2. 如果随机指标的信号线向上穿越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 开空头/平多头头寸

  1. 暗云盖的形成必须得到随机指标的确认:StochSignal(1)>70(随机指标最后一根已完成K线的信号线值必须大于70)。

  2. 如果随机指标的信号线向下穿越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创建专家顾问

使用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。

相关帖子

评论 (0)