滚动窗口设计:固定窗口 vs 滚动窗口、窗口大小的选择逻辑、步长与频率的设定

窗口设计这件事,说白了就是决定「用多长的历史数据来训练模型」。我见过不少新手一上来就拍脑袋选个252天(一年),结果市场风格一变,模型立马失效。嗯,这里面的门道,咱们得好好聊聊。

固定窗口 vs 滚动窗口

先说说这两种最基础的窗口模式。

固定窗口,就是选一段历史数据,训练完模型就不动了。比如我用2018到2020年的数据训练,之后一直用这个模型做预测。听起来省事,对吧?但我告诉你,这在量化里基本行不通。市场是活的,你的模型却是死的,时间一长,参数早就偏离了实际。

我在项目中遇到过最典型的例子:用固定窗口训练了一个趋势跟踪策略,2019年跑得特别好。结果2020年3月市场暴跌,模型完全没反应过来,因为它根本没见过这种极端行情。那一次回撤,直接让我把整个策略推倒重来。

核心区别:

  • 固定窗口:一次训练,永久使用。适合市场结构极其稳定的场景,比如某些高频做市策略
  • 滚动窗口:不断用最新数据重新训练。适合大多数中低频策略,能自适应市场变化

滚动窗口就好多了。每次预测时,只取最近N天的数据训练模型。比如今天是2024年6月1日,我就用2023年6月1日到2024年6月1日的数据。明天到了6月2日,窗口就往前推一天,丢掉最旧的数据,加入最新的。

你想想看,这样做的好处是什么?模型永远在用最新的市场信息做决策。市场风格变了,它也能慢慢跟上。当然,代价就是计算量大——每天都要重新训练。

窗口大小的选择逻辑

窗口大小怎么定?这问题我琢磨了好几年。说实话,没有标准答案,但有几条经验法则。

第一,看策略类型。

  • 高频策略:窗口可以小,比如5-20天。市场微观结构变化快,用太久的数据反而有噪音
  • 中频策略:60-120天比较常见。既能捕捉中期趋势,又不会对短期波动太敏感
  • 低频策略:180-500天。比如基本面量化,需要足够长的数据来估计因子稳定性

第二,看市场波动率。

波动率高的市场,窗口要短。为什么?因为高波动意味着市场结构不稳定,用太久的数据会引入过时的信息。我记得2022年做加密货币策略时,波动率动不动就翻倍,我被迫把窗口从90天砍到30天,效果反而更好。

第三,看样本量。

如果你的模型参数多(比如深度学习),窗口就得大。否则容易过拟合。一个简单的经验:样本量至少是参数数量的10倍。比如你的模型有50个参数,窗口内至少要有500个样本点。

我的个人习惯:先用直觉选一个窗口,比如120天。然后做敏感性分析——分别试60天、90天、120天、150天、180天,看哪个窗口在验证集上表现最稳定。注意,我说的是「稳定」,不是「最好」。有时候某个窗口回测成绩特别好,但那是过拟合,实盘一跑就崩。

步长与频率的设定

步长,就是每次窗口往前推多少天。频率,就是多久做一次模型更新。

这两个参数经常被混为一谈,其实不一样。步长是窗口移动的「距离」,频率是模型更新的「时间间隔」。

常见的步长设定:

  • 步长=1天:每天滚动,模型每天更新。计算量大,但最灵敏
  • 步长=5天:每周滚动一次。适合周频策略,计算量适中
  • 步长=20天:每月滚动一次。适合月频策略,计算量小

频率的设定逻辑:

频率可以等于步长,也可以不同。比如步长设1天,但频率设5天——意思是窗口每天往前推1天,但每5天才重新训练一次模型。这样做的好处是:窗口数据是最新的,但模型参数不用频繁更新,节省计算资源。

我曾经踩过的坑:步长设得太小,频率设得太高。结果每天跑几十个模型,服务器直接炸了。后来我学乖了:先算一下你的计算资源能承受多少。如果每天只能跑10个模型,那就别设步长=1天。步长和频率的乘积,就是你每天要训练的模型数量。

举个例子:你有100只股票,步长=1天,频率=1天,那每天就要训练100个模型。如果步长=5天,频率=5天,那每天只需要训练20个模型(因为每5天才更新一次,平均下来每天20个)。

一张图看懂滚动窗口设计

下面这张图展示了滚动窗口的核心逻辑。我习惯用这种图来跟团队沟通,一目了然。

滚动窗口设计核心逻辑 t-5 t-4 t-3 t-2 t-1 t(当前) 固定窗口:t-5 到 t(长度=5) 滚动窗口(旧):t-5 到 t-2 滚动窗口(新):t-3 到 t(步长=2) 固定窗口 旧窗口 新窗口

这张图里,固定窗口从t-5一直用到t,长度不变。滚动窗口则从t-5到t-2,然后步长=2,往前推到t-3到t。你看,旧窗口丢掉了t-5和t-4的数据,加入了t-1和t。这就是滚动的本质——用最新的信息替换最旧的。

实际项目中的选择建议

说了这么多理论,来点实际的。我整理了一个表格,方便你对照自己的情况做选择。

策略类型 推荐窗口大小 推荐步长 推荐频率 注意事项
日频趋势跟踪 60-120天 1-5天 每天或每周 窗口太短容易追涨杀跌
周频均值回归 20-60天 5天 每周 窗口太长会错过反转信号
月频因子选股 180-500天 20天 每月 需要足够数据估计因子IC
高频做市 5-20天 1天 每天多次 注意计算延迟,别拖慢交易

避坑指南:我曾经在日频策略里用了500天的窗口,结果模型对2020年3月的暴跌反应迟钝,因为窗口里包含了太多2018-2019年的低波动数据。后来我改成120天,灵敏度明显提升。记住:窗口越大,模型越「迟钝」;窗口越小,模型越「敏感」。你要找的是那个平衡点。

最后说一句:窗口设计没有银弹。我建议你从120天、步长5天开始,然后根据回测结果慢慢调。别一上来就追求完美,先跑起来,再优化。量化交易的本质是迭代,窗口设计也一样。


公众号:蓝海资料掘金营,微信deep3321