首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >20日波动率不等于20个有效样本:rolling 的 min_periods 要写清楚

20日波动率不等于20个有效样本:rolling 的 min_periods 要写清楚

原创
作者头像
量化行业新引擎
发布于 2026-10-12 10:16:27
发布于 2026-10-12 10:16:27
100
举报
文章被收录于专栏:AI量化视界AI量化视界

做滚动波动率时,很多代码只有一行:先算收益率,再调用 rolling(20).std()。窗口写了 20,看起来就是“最近 20 个交易日”,但序列里只要有停牌、缺数或新股上市,实际参与计算的样本数就可能不同。

pandas 官方文档说明,min_periods 决定窗口至少需要多少个有效观测值才能返回结果,否则就是 NaN。整数窗口未显式设置时,默认要求样本数等于窗口长度;按时间偏移量定义窗口时,默认值则是 1。因此 rolling(20) 与 rolling("20D") 不只是交易日和自然日的区别,有效样本门槛也不同。

我通常把窗口和门槛都写出来,并保存有效样本数:

ret = close.pct_change(fill_method=None)

win = ret.rolling(window=20, min_periods=15)

vol = win.std(ddof=1)

count = win.count()

这段代码允许 20 个位置中至少有 15 个有效收益率,但门槛不能照搬。若策略要求严格可比,可以把 min_periods 设为 20;如果允许少量缺失,就要检查样本数变化是否影响排序。对新股尤其要小心,门槛过低会让它只凭几天数据就和成熟股票进入同一横截面。

另一个容易忽略的参数是 center。默认 center=False,结果标签位于窗口右端,符合“截至当天已看到的数据”;设为 True 后标签移到窗口中心,不适合直接当成实时信号。若信号在收盘后生成,下一交易日才能成交,还要继续做时间对齐。

我一般同时输出 vol、count 和缺失原因,抽查新股、停牌股与数据断点。滚动指标是否可信,不能只看公式,还要回答:窗口覆盖哪些日期、实际用了多少样本、结果何时可用。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档