使用 MetaTrader 4 进行基于时间的模式分析

Giampiero Raschetti | 17 三月, 2016

简介

浏览自动交易锦标赛论坛的帖子和访谈总能从噪杂的声音中发现很多有意思的信息。William Boatright (Wackena) 在采访中提出的观点(https://championship.mql5.com)让我对基于时间的方法产生了兴趣,它用于在每日波动交易中选择当日的一个小时进行一次交易。于是我开始搜集基于时间的进入方法的信息,并决定实现一个能够检验该技巧实际有效性的系统。实现本文随附的代码没有实际的退出策略,只是为了给你一个示例,说明使用 MetaTrader 进行数据挖掘和在相对较长的数据序列中进行统计调查可以期待的时间模式类型。



文献搜索

首先,我在文献中对该理念进行确认,在 Perry J. Kaufman 的《全新交易系统与方法》(New Trading Systems and Methods )中发现了一篇关于该主题的非常有趣的文章,可谓技术分析中的圣经。第 15 章讲述了模式识别,其中首要的一个话题就是每日的时间和交易习惯。在这一章,他提到了 Frank Tubbs 的《股票市场函授课程》( Stock Market Correspondence Lessons)一书,其中他解释了基于美国交易时间的股票市场中的六个主要模式,并在规则 4 中表示:“如果市场直到下午 2 点还在上涨,则很可能会持续到收盘和第二天”。GMT-5 下午 2 点刚好是 GMT+1 晚上 8 点,是 Wackena 对其交易进行检验的时间。这是关于该技巧的有效性的第一个有趣的确认。其他关于该主题的有趣引用出现在 Kaufman 的该章中。



创建基本的 EA

对于创建在一天当中的特定时间捕捉交易方向的系统,第一个考虑是你要寻找的仅仅是那些提供关于趋势方向信息的相关信号,而那些相反趋势方法或突破系统并不适合此目的。本文给出一个基本的 Expert Advisor,下面展示了代表运行流程的程序块示意图。

其中:

操作和优化结果

我使用运行在 Parallel Desktop 下的虚拟机在 Apple MacBookPro 上使用 MetaTrader 引擎,运行快速可靠,我可以在 MS-windows 虚拟机上非常容易的快速截屏用于文档化。回测通过 2007 年 1 月 1 日至 2007 年 12 月 29 日的可用数据在 EURUSD 货币对上进行,时间范围为 15 分钟,结果似乎令人满意。本文中使用的主要运行参数取自第一个优化过程,你可以自己尝试不同的参数组合。关于测试中使用的 Take Profit 和 Stop Loss 参数的选择,唯一的考虑是我们对余额最大化或者对 MetaTrader 所提供参数的任何其他可能的优化并不感兴趣,我们只需要将获利交易的数量最大化,以强调进入策略。任何其他结果的优化应在后面阶段进行。下面是 Analyzer 模块的代码,出于测试目的,你可以添加任何其他信号检测程序。

两个不同的信号必须一致选择正确的方向。

//+------------------------------------------------------------------+ 
//| Price Direction Analyzer 
//+------------------------------------------------------------------+ 
int Analyzer()  
{ 
 int  signalCount=0; 
 signalCount += EntrySignal1(); 
 signalCount += EntrySignal2(); 
 return(signalCount); 
} 
 
//+------------------------------------------------------------------+ 
//| ENTRY SIGNALS BLOCK MODULES 
//+------------------------------------------------------------------+ 
int EntrySignal1() 
{ // Long term SMA trend detect 
 int i,Signal; 
 
 int LongTrend=0; 
 for(i=0;i<3;i++) 
 { 
   if (iMA(Symbol(),PERIOD_H4,S1_MA_FAST,0,MODE_LWMA,PRICE_TYPICAL,i) > iMA(Symbol(),PERIOD_H4,S1_MA_FAST,0,
   MODE_LWMA,PRICE_TYPICAL,i+1)) 
     LongTrend++; 
   else 
     LongTrend--; 
 }     
 if( LongTrend < 0) 
   Signal=-1; 
 else 
   Signal=1;  
 return(Signal);  
} 
 
int EntrySignal2() 
{ // Daily MACD 
   int Signal; 
 
   if (iMACD(NULL,PERIOD_D1,S2_OSMAFast,S2_OSMASlow,S2_OSMASignal,PRICE_WEIGHTED,MODE_MAIN,0) > 
       iMACD(NULL,PERIOD_D1,S2_OSMAFast,S2_OSMASlow,S2_OSMASignal,PRICE_WEIGHTED,MODE_MAIN,1) ) 
     Signal=1; 
   else 
     Signal=-1; 
   return (Signal); 
}
交易时间在一个阻止交易过滤器模块中匹配,可以直接实现如下。所描述的模块化架构可以在操作流程中为新的阻止过滤器留出空间。
//+------------------------------------------------------------------+ 
//| FILTER BLOCK MODULES 
//+------------------------------------------------------------------+ 
bool BlockTradingFilter1() 
{
 bool BlockTrade=false;  //trade by default 
 if (UseHourTrade) 
 { 
   if( !(Hour() >= FromHourTrade && Hour() <= ToHourTrade && Minute()<= 3) ) 
     { 
      //  Comment("Non-Trading Hours!"); 
      BlockTrade=true; 
     } 
  } 
 return (BlockTrade);  
}
事实上,我们应该能有很多较小的获利交易,而完全不需要考虑整体余额。下面是主要的优化设置:
要分析给出最佳结果的时间间隔,你必须把 FromHourTrades 设置为从 0 到 23,步长为 1 小时,启动程序之前在回测设置表中检查优化信号。
以下是优化结果:
可以看出,有好几个小时中,使用趋势检测技巧交易会非常危险,而当日的另外几个小时中选择趋势方向的获利性应该好得多,这个时间间隔介于 19:00 和 22:00 GMT+1,这是东部时区的下午,所有的新闻都已被市场消化。在这种情况下,具备了可用的历史数据,从优化程序中获得的峰值时间对应着 21:00 GMT+1(欧洲中部时间)。该结果对于 2007 年的外汇市场无疑是可靠的,但 Frank Tubbs 对交易习惯的过往想法让我们希望它们在更大的时间周期内可靠。以下是优化程序的详细结果:
必须考虑到,该结果同样取决于选择用于决定订单方向的趋势信号,可以说在这个基于时间的策略中,从大量不同的信号中进行选择得到非常相似的结果,但你当然可以测试其他信号,可以跟我们分享你的结果。以下是在 21:00 GMT+1 的回测报告。
可以看出,在一共 160 次交易中,获利交易占了 154 次(96.86%)。该信息确认了 Wackena 在访谈中的观点。

引入基于时间的止损

在一年中的交易数量中,回测程序可能表明我们应该能够通过引入基于时间的止损来改善交易结果,即如果在市场上出现了 23 小时后存在亏损,则应该为新订单留出空间。为此,只要设置 UseTimeBasedStopLoss 信号为真并尝试不同的优化参数。以下报告表显示了该策略变更的结果。

可以看出,该退出策略可以使你想到,一些长期波动交易可以在疲软市场中保护你免于在不利的时刻增加不良订单,所以最好耐心等待市场走出危险。



总结

基于时间的模式识别对交易习惯的分析策略揭示了进一步调查的需要,并向该 Expert Advisor 添加了一个可靠的资金管理策略,尤其是一个可靠的跟踪止损引擎,不过这是另一篇文章的话题了。随附的代码也可以用于对其他模式和货币对进行深入调查,以分析其他基于时间的交易习惯和行为。欢迎分享你对该研究的体验。

参考文献New Trading Systems and Methods,作者 Perry J. Kaufmanhttps://championship.mql5.comThe Encyclopedia of Trading Strategies, 作者 Jeffrey Owen Katz 和 Donna L. McCormickForex conquered,作者 J.L.PersonTrading with the odds,作者 Cynthia A.Kase