MT4策略测试三种模式化详解
从开盘价到每个tick的精度与取舍
为什么价格柱模式化决定回测质量
技术分析的很多程序允许在历史数据上测试交易策略。在大多数情况下,测试被连接到已经完成的数据上,在价格柱内这些数据不带有任何试图模式化的趋势。测试会快速进行,但是不是十分精确。要得到高质量的交易策略测试,重要的是选择正确模式化价格柱的方法。最理想的状态是拥有一个完整的tick历史记录,但这种状况在现实中基本不存在。通常,一个交易者很难找到几年以内完整的tick历史记录,用来做分析。解决这个问题,我们可以使用精确周期的数据作为模式价格变化的参考点。
模式化(modeling)指的是测试器在两根已知柱之间,如何虚构或还原中间价格运动的过程。如果模式化方式粗糙,EA在柱内触发的止损、止盈或挂单逻辑就永远不会被回测到,导致实盘与回测结果严重背离。因此,理解MT4提供的三种模式化方法,是每一个严肃交易者的基本功。
MT4中的三种模式化方法概览
在MetaTrader 4客户端内存在三种模式化的方法,它们分别对应不同的数据需求与精度等级:
- 每个tick(以全部可用时间周期为基础的最精确方法)
- 控制点(以最近较小的时间周期为基础的一个自然方法)
- 开盘价(在完整柱上快速的方法,只适用于明确检测柱打开的智能交易)
在测试开始之前会生成中级的价格柱,结果被保存在文件中(例如:/tester/history/eurusd_1440_1.fxt)。每一次点击开始按钮,测试将会生成包含测试tick顺序的新文件。在终端内fxt文件可以作为离线图表通过'文件->离线打开'轻松地打开,方便用户检查测试器到底生成了怎样的价格序列。
开盘价模式:最快但最粗糙
一些交易者不希望依赖内部柱模式化的特殊性,所以他们创建智能交易在已经完整的柱上进行交易。事实上当前价格柱已经非常完整,可以通过下一个柱的显现看出。对于这些智能交易的模式化方法使用'开盘价'。在这种方法中,首先需要打开柱(Open=High=Low=Close, Volume=1),并且允许智能交易准确地识别出先前价格柱结束。在这个刚刚形成的柱中开始智能交易的测试。下一步,模式化当前柱,但是不允许在这个柱上执行测试!
这意味着EA只能看到每根柱开盘那一瞬间的价格,柱内的所有波动都被忽略。它适合那些逻辑完全基于'收盘价突破'或'新柱开启后下单'的简单策略。如果你的EA使用了挂单、追踪止损或柱内判断,开盘价模式会给出完全失真的结果。
控制点模式:用较小周期做近似
控制点模式化方法适用于智能交易内部柱的自然评估。使用这个方法,最近小时间周期的历史数据必须具备可用性。一些情况中,可用数据来自较小的时间周期不能够完全覆盖测试时间周期的时间距离。如果较小时间周期没有数据,演化的柱会以预定义模式生成,与先前MetaTrader 3客户端的第三版本相似。加入这些数据,小时间周期的历史数据会很快显现。小时间周期显现已存在的OHLC价格作为控制点。
大多数情况下,由控制点测试的智能交易测试结果只作为估测结果,而不是最后结果。这些结果具有中间价格的特点。例如,用H1测试但只有M5数据,那么H1柱内只会插入M5的OHLC作为控制点,柱内更细的波动依然丢失。它比开盘价真实,但远不如每个tick精确。
每个tick模式:最高精度及其代价
这种方法能够更加精确地模式化变动的价格。与'控制点'不同,每个tick的模式化方法不仅使用最近小时间周期的数据,同样需要全部可用的较小时间周期。另外,如果在一段时间里同时存在数据超过一个时间周期,生成则使用较小时间周期的数据。与先前方法相同,这种方法生成检测点是以可用的较小时间周期OHLC数据为基础的。在控制点之间生成变动价格,同样使用以预定义模板为基础的插入法。这样,一分钟的可用数据覆盖测试的时间距离。
可能会发生相同tick一个接一个地生成。这种情况下,滤除重复报价并且固定最后三个连续报价。必须考虑较大tick数量的生成,它会影响系统业务的消耗和测试速度。注意:如果没有较小时间周期覆盖测试时间距离,无需开启每个tick测试。这种模式化只适用于以较小时间周期为基础的测试!也就是说,想用H1每个tick测试,你必须拥有完整的M1甚至更低周期历史。
日期范围与历史生成的隐藏规则
日期的范围使用不仅限于智能交易的测试,同样限于测试柱顺序的生成。我们无需生成完整地历史数据,特别是对于每个tick模式化,不会用到大量的数据。所以,如果初期测试顺序生成,可能使用日期范围。随后,超过给出范围的柱不再生成,但是只是输入数据覆盖到输出的顺序。这析数据不会从定单的顺序中排出,可能计算指标获取完整历史的正确性。
必须要注意的是第一个100个柱不会在生成,这个限定不取决于日期范围的设置限定。也就是说,无论你设置测试从哪天开始,前100根柱的数据实际上是由测试器预生成的,用于指标 warm-up。如果你的EA依赖长周期均线,这100根柱的缺失可能导致前期信号错误。
用M1验证模式化准确性的实例
检测内部柱模式化的准确性,我们使用2007年9月5日的一分钟图表,在10:00和11:00之间作比较。在每个tick的模式中,生成以下顺序:因为每个柱的tick成交量不允许超过5,顺序生成插入最小使用。基本上所有的都存在OHLC价格。即使没有标准,只是简单地叠加一分钟图表到一小时图表(在一小时图表中收盘价作为绿色线显示),它们几乎相同。这证明了当低周期数据完备时,每个tick模式可以极高保真地还原价格运动。
反之,如果只叠加控制点生成的H1,你会看到柱内只有几个阶梯,而真实M1有几十个波动。这种视觉对比是判断该用哪种模式的最直观手段。
结论与实操建议
如果存在可用的辅助的较小时间周期能够百分百覆盖时间周期的距离,那么就能够执行最为精确的测试并得到值得信赖的准确结果。就是说,每个tick高质量的测试需要在历史数据的细节中找寻。对于中文交易者,建议:1)先确认自己拥有哪层周期的历史;2)EA逻辑涉及柱内动作就必须用每个tick且备好小周期数据;3)用fxt离线图做抽样核对;4)不要盲目信任控制点模式的'漂亮曲线'。