598 / 736WFA

Walk-forward Analysis

逐步前移分析

Walk-forward Analysis 在当时可用的过去数据上选择规则,并在下一段数据上测试。流程按预先确定的协议随时间重复。评估的是整个选择方法,而不是事后找出的优胜者;即使正确分离各区段,也不能保证未来收益。

Walk-forward Analysis 是按时间顺序评估一种流程:在较早的数据上选择或设定规则,再将其用于紧接着的测试期间。选择与测试的角色随时间前移,而当前决策不能预知随后发生的结果。

Walk-forward Analysis 让历史模拟随时间前移:在截至当时的数据上选择或设定规则,然后评估其在下一区段的应用。QuantConnect 描述了在最近一段历史窗口上定期进行优化。我们的编辑区分是:评估对象不只是某套固定不变的参数,而是预先说明的参数更新流程。下一次选择的时点、目标和候选集合也都是规则的一部分。更好地拟合近期数据,本身不能证实未来结果会更好。 [1]

QuantConnect 提醒,用于寻找最佳参数的期间会成为开发数据的一部分。将事后选出的优胜者回用于该期间,并不是对当时决策的诚实验证。因此,我们的协议要求在下一测试区段开始前完成选择。该区段的数据不能影响当前优胜者。一旦该区段结束且其信息确实可用,这些信息就可以按预定流程进入后续选择;但这不能改变先前记录的测试决策。 [2]

TimeSeriesSplit 生成按时间排序的训练和测试索引;默认会逐步扩大过去的训练集,也允许限制其大小。我们的区分是:滚动窗口保持选定的历史长度,扩展窗口则保留固定起点。窗口长度与更新频率属于设计的一部分,不能在看到结果后随意修改。文档要求样本等间隔,以便比较各区段的指标;对于不规则数据,需要检查实际覆盖的日历时间范围。 [3]

TimeSeriesSplit 的 gap 参数会在测试前跳过训练集末尾的样本。我们的方法要求是根据信息可用时点以及目标结果完成时点,推导所需间隔。如果训练观测的结果用到了测试期间的价格,仅将数据行按时间排序并不能消除泄漏。因此,不应仅依据漂亮曲线选择间隔长度。即使间隔合适,也不能证明相邻期间相互独立,或消除所有形式的选择偏差。 [3]

scikit-learn 文档提醒,归一化、缺失值填补或特征选择可能把测试信息传入模型。这些变换的参数应只在训练部分学习,再应用于测试部分。我们的核查在每次窗口前移时都重复这一分离。先从整个数据集计算均值,再对完成的表格进行划分,不能纠正先前的问题。还必须保存数据版本及其实际可用时点。 [4]

QuantConnect 区分出决定成交价格与数量的模型,该模型可以包含价差和 Slippage。我们对合并测试区段的要求是统一处理资本、未平仓头寸以及改变规则的成本。训练利润不能加到后续测试结果中,重叠的测试期间也不能在未说明的情况下重复计入。如果头寸延续到下一区段,就必须说明不同配置之间如何切换。下面的模型则在每个期间结束时均无持仓。 [5]

Bailey 及其合著者描述了在同一数据上反复搜索时,假阳性发现风险的上升。我们对 Walk-forward Analysis 的推论是:如果根据最终测试序列修改窗口长度、目标或候选项,并重新运行整个流程,该序列就已经影响了开发。将其重新命名为独立数据并不够。报告应列出所有尝试过的协议,并将可能存在的后续、尚未使用过的验证单独区分。仅仅在时间上前移,既不是对过拟合概率的估计,也不是自动获得的统计保证。 [6]

NFA 强调,假设结果不能反映实际交易,也不能完整反映流动性、Slippage 以及真实亏损时行为的影响。因此,我们的 Walk-forward Analysis 报告保留窗口边界、候选项、选择分数、选定配置以及包含成本的后续区段结果。总和需要风险背景、观测数量以及相同条件下的比较。一个结果为负的小示例不能证明方法普遍无效,正如正的总和不能证明未来存在交易优势。 [7]

示例示例 · WFA

根据过去选择,只评估下一期间

我们自拟的虚构模型使用六个时长相同、标记为 1 至 6 的期间,以及两个预先给定的变体 A 和 B。它们在相同固定规模下的净结果为 A [4, -1, 2, -3, 5, -2] USD 和 B [1, 2, 1, 1, -2, 4] USD。每个结果仅在相应期间结束后可用,包含所有模型成本,且期末无未平仓头寸。没有其他切换成本、债务或现金流。预先确定的流程每次都汇总最近三个已完成期间,选择较高的总和,并仅在下一期间应用优胜者;如果相等,则会选择 A。选择窗口为 [1, 2, 3]、[2, 3, 4] 和 [3, 4, 5],随后测试的期间为 [4, 5, 6]。A 的选择总和为 [5, -2, 4] USD,B 为 [4, 4, 0] USD,因此依次选择 A、B 和 A。只有 [-3, -2, -2] USD 进入共同的测试结果,合计 -7 USD。期间 4 之前的初始测试现金为 1000 USD,最终现金为 993 USD;规模不随现金变化。训练结果不加入账户,每个测试区段只计算一次。示意图展示选择窗口和随后测试的前移,而不是真实市场历史或未来成功的概率。

要获得更完整的理解,请将本词条与以下词条结合阅读: Backtesting, Overfitting, Look-ahead Bias, Trading Plan, Trading Journal. 反向关联还来自: Backtesting, Overfitting, Look-ahead Bias, Survivorship Bias.

01较早的测试期间以后可以进入训练吗?

可以,前提是该期间已经结束、信息已经可用,且预先确定的协议允许这样做。但这不能追溯改变为该期间记录的选择或结果。

02Walk-forward Analysis 能消除过拟合吗?

不会自动消除。仍然可能根据同一批结果,反复选择窗口长度、候选项或整个流程。必须披露尝试历史、检查信息泄漏,并保持开发与后续验证之间的区别。

DOC · 001QuantConnect — Walk Forward Optimization文档 DOC · 002QuantConnect — Optimization Parameters文档 DOC · 003scikit-learn — TimeSeriesSplit文档 DOC · 004scikit-learn — Common Pitfalls: Data Leakage文档 DOC · 005QuantConnect — Trade Fills: Key Concepts文档 DOC · 006Bailey et al. — The Probability of Backtest Overfitting一手来源 DOC · 007NFA — Use of Promotional Material Containing Hypothetical Performance Results文档
修订日期: 来源优先 · 非投资建议