计算股票波动率时,停牌日数据应设为缺失值(留空),而非用收益率0或前收盘价填充。填充法将停牌日视为无波动,会系统性地低估实际波动率,干扰风险度量与投资决策。正确处理方式是仅使用交易日数据计算,让波动率真实反映交易活跃期的价格波动。

为什么填充法会导致低估

股票波动率衡量的是价格在单位时间内的变动幅度。停牌日没有交易,价格不变,收益率自然为0。如果将这些0收益率纳入计算,相当于在数据序列中混入大量“无波动”样本,拉低了平均波动水平。这在时间序列计算中尤为明显:停牌时间越长,填充的0越多,计算出的年化波动率就越偏离真实值。例如,一只长期停牌后复牌并出现大幅波动的股票,若填充停牌日,其波动率会被稀释,掩盖真实风险。

更严重的是,填充法会扭曲波动率的统计性质。在GARCH类模型或滚动窗口计算中,填充的0收益率会破坏序列的自相关结构,导致参数估计偏差。对于高频波动率计算(如5分钟收益率),填充法还会引入虚假的“平稳”时段,进一步放大误差。

正确做法:设为缺失值

推荐将停牌日数据设为缺失值,计算时仅使用有交易的交易日。具体操作如下:

  • 数据清洗:在数据源中标记停牌日为NaN或空值,计算波动率公式中跳过这些条目。
  • 计算逻辑:使用交易日收益率序列,按实际交易天数(通常一年约242-252天)进行年化。例如,日波动率乘以√252,而非乘以√365。
  • 软件处理:Python的pandas、R的quantmod等库默认支持缺失值跳过;Excel中可配合STDEV.PSTDEV.S函数,配合IF条件剔除停牌行。

类比贝塔系数:计算股票贝塔时,停牌日同样需设为缺失值。贝塔依赖于收益率协方差,填充0收益率会压低协方差,导致贝塔系数向0偏移,低估股票相对于市场的系统性风险。

常见问题

如果停牌时间很长,比如超过一个月,缺失值太多怎么办?

长期停牌后复牌,建议直接使用复牌后交易数据重新计算,或结合停牌期间的市场指数收益率进行插值调整。完全依赖缺失值会损失统计意义,但填充0收益率更不可取。

对于指数基金或ETF,停牌日处理方式一样吗?

一样。ETF停牌期间其净值仍可能随成份股变化,但交易价格无变动,填充0收益率同样导致低估。应使用交易价格数据,停牌日记为缺失。

一些金融终端(如Wind、Bloomberg)默认填充停牌日,该如何修正?

多数终端提供“仅交易日”或“除权除息调整”选项,手动勾选即可。若默认填充,导出数据后需自行将停牌日收益率替换为缺失值。务必检查数据源设置,避免直接使用未经处理的序列。

延伸阅读