滚动窗口设计:固定窗口 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,长度不变。滚动窗口则从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