波动率因子:从已实现波动率到日内模式挖掘
波动率因子,说白了就是衡量资产价格「上蹿下跳」的程度。很多做高频的朋友一上来就盯着价格看,其实波动率里藏着不少alpha。我个人习惯把波动率因子分成四类来拆解:已实现波动率、已实现极差、跳跃波动率、日内波动率模式。咱们一个一个来过。
1. 已实现波动率(Realized Volatility)
这是最基础的波动率指标。传统方法用日间收益率算标准差,但日内数据能给我们更精细的刻画。我常用的方法是5分钟高频采样,然后计算日内收益率的平方和。
公式其实很简单:
RV_t = Σ(r_{t,i})²
其中 r_{t,i} 是第 t 天第 i 个5分钟区间的对数收益率。
核心要点:采样频率不能太高也不能太低。我试过1秒采样,噪声太大;30分钟采样,又丢失太多信息。5分钟是个不错的平衡点。
代码实现也不复杂:
import numpy as np
import pandas as pd
def realized_volatility(price_series, freq='5min'):
# 计算对数收益率
log_ret = np.log(price_series / price_series.shift(1))
# 按频率重采样
resampled = log_ret.resample(freq).sum()
# 计算已实现波动率
rv = np.sqrt(np.sum(resampled ** 2))
return rv
我的经验:实际项目中,我会把已实现波动率做差分处理。因为波动率本身有很强的自相关性,差分后得到的「波动率变化」因子,预测能力反而更强。
2. 已实现极差(Realized Range)
这个因子我特别喜欢。它不只看收盘价,而是把日内最高价和最低价的差距也考虑进来。你想想看,一天内价格从低到高走了多远,这本身就是波动率的直观体现。
计算方式:
RR_t = ln(High_t / Low_t)
但更精细的做法是,把每个5分钟区间的极差累加起来:
RR_sum = Σ ln(High_{t,i} / Low_{t,i})
| 方法 | 优点 | 缺点 |
|---|---|---|
| 单日极差 | 计算简单,直观 | 受极端值影响大 |
| 累加极差 | 信息更丰富,稳健 | 需要高频数据 |
避坑指南:我曾经在期货数据上直接用单日极差,结果遇到一次闪崩,极差瞬间放大10倍,整个因子都变形了。后来我改用累加极差,并且做了MAD(中位数绝对偏差)去极值处理,效果好了很多。
3. 跳跃波动率(Jump Volatility)
价格不是一直平滑运动的。有时候会出现突然的「跳跃」——比如财报发布瞬间、重大消息出来那几秒。这些跳跃里往往有信息含量,但也夹杂着噪声。
怎么识别跳跃?我常用的方法是比较已实现波动率和双幂次变差(Bipower Variation):
BV_t = (π/2) * Σ |r_{t,i}| * |r_{t,i-1}|
Jump_t = max(RV_t - BV_t, 0)
逻辑是这样的:如果价格是连续扩散过程,那么 RV 和 BV 应该差不多。但如果存在跳跃,RV 会显著大于 BV。差值就是跳跃波动率。
实战技巧:跳跃波动率因子在事件驱动策略里特别好用。我做过一个回测,在跳跃发生后的30分钟内做均值回归,夏普比率能到1.8以上。但要注意,跳跃的方向也很重要——正向跳跃和负向跳跃的后续走势完全不同。
4. 日内波动率模式(Intraday Volatility Pattern)
这一点很多人会忽略。波动率在一天之内不是均匀分布的。A股市场有个典型的「U型」模式:开盘和收盘时波动大,中午休息前后波动小。
我习惯把一天分成48个30分钟区间,然后计算每个区间的平均波动率:
# 计算日内波动率模式
def intraday_pattern(df, interval='30min'):
df['time_bucket'] = df.index.floor(interval).time
pattern = df.groupby('time_bucket')['volatility'].mean()
# 做归一化
pattern = pattern / pattern.mean()
return pattern
为什么要关注这个模式?因为你可以用它来做「异常检测」。如果某个时间段的波动率显著偏离历史模式,往往意味着有事情发生。
我的发现:不同股票的日内模式其实不一样。大盘股开盘波动大,小盘股尾盘波动大。我建议你针对每只股票单独计算模式,不要用统一的模板。我曾经吃过这个亏,用沪深300的模式去套中证500,结果因子失效了整整一个月。
知识体系总览
下面这张图把四个波动率因子的关系梳理清楚了:
这四个因子不是孤立的。我通常把它们组合成一个综合波动率得分,然后做多低波动股票、做空高波动股票。嗯,这里要注意:波动率因子在牛市中表现一般,但在震荡市和熊市中特别有效。
最后说一句:波动率因子不是万能的。我见过有人把波动率因子当成万能钥匙,结果在趋势行情里亏得很惨。因子要组合使用,要结合市场环境。这才是量化研究的正确打开方式。
公众号:蓝海资料掘金营,微信deep3321