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]
根据过去选择,只评估下一期间
要获得更完整的理解,请将本词条与以下词条结合阅读: Backtesting, Overfitting, Look-ahead Bias, Trading Plan, Trading Journal. 反向关联还来自: Backtesting, Overfitting, Look-ahead Bias, Survivorship Bias.
01较早的测试期间以后可以进入训练吗?+
可以,前提是该期间已经结束、信息已经可用,且预先确定的协议允许这样做。但这不能追溯改变为该期间记录的选择或结果。
02Walk-forward Analysis 能消除过拟合吗?+
不会自动消除。仍然可能根据同一批结果,反复选择窗口长度、候选项或整个流程。必须披露尝试历史、检查信息泄漏,并保持开发与后续验证之间的区别。