波动率信号:历史波动率、已实现波动率、波动率聚类
波动率,说白了就是价格波动的剧烈程度。做高频交易的人,没人敢忽视它。
我刚开始做量化那会儿,总觉得预测方向才是王道。直到有一次,我在股指期货上吃了个大亏——方向看对了,但波动率突然飙升,止损被连续打穿,仓位直接爆了。嗯,从那以后,我把波动率信号放在了策略的第一优先级。
今天咱们聊聊三种最常用的波动率信号:历史波动率、已实现波动率,以及波动率聚类现象。这三兄弟,各有各的脾气。
1. 历史波动率:最朴素的参考线
历史波动率(Historical Volatility, HV)就是过去一段时间的价格波动程度。计算方式很简单:取过去N天的收益率,算标准差,再年化一下。
公式长这样:
HV = std(ln(P_t / P_{t-1})) * sqrt(252)
为什么乘以sqrt(252)?因为一年大概有252个交易日。把日波动率放大到年化尺度,方便不同品种之间对比。
我个人习惯用20日HV作为基准线。为什么是20?因为一个月大概有20个交易日,这个周期能过滤掉一些短期噪音,又不至于太滞后。
核心要点:历史波动率是「回头看」的指标。它告诉你过去发生了什么,但不保证未来会重复。
代码实现很简单:
import numpy as np
import pandas as pd
def historical_volatility(price_series, window=20):
log_returns = np.log(price_series / price_series.shift(1))
hv = log_returns.rolling(window).std() * np.sqrt(252)
return hv
我在项目中遇到过一个问题:用日线算HV,在高频策略里根本不够用。你想想看,一分钟级别的交易,用日线波动率去判断,就像用年历去定闹钟——完全对不上节奏。
2. 已实现波动率:高频数据的王牌
已实现波动率(Realized Volatility, RV)才是高频交易的主角。它不依赖收盘价,而是利用日内所有价格数据来计算。
公式:
RV = sum(r_i^2)
其中 r_i 是每个采样间隔内的收益率。采样频率越高,RV越精确。
举个例子:如果你用1分钟K线,一天有240根(假设6.5小时交易时间)。每根K线算一个收益率,平方后求和,就是当天的已实现波动率。
我的经验:采样频率不是越高越好。用tick级别的数据算RV,微观结构噪声会严重干扰结果。我个人建议用1分钟或5分钟频率,性价比最高。
代码实现:
def realized_volatility(price_series, freq='1T'):
# 重采样到指定频率
resampled = price_series.resample(freq).last()
log_returns = np.log(resampled / resampled.shift(1))
# 每日RV = 日内所有收益率平方和
daily_rv = log_returns.pow(2).resample('D').sum()
return np.sqrt(daily_rv)
已实现波动率比历史波动率灵敏得多。市场一有风吹草动,RV立刻就能反映出来。我曾在一次闪电崩盘事件中,亲眼看着RV在3秒内翻了10倍——这种速度,历史波动率根本追不上。
3. 波动率聚类:波动率会「抱团」
波动率聚类(Volatility Clustering)是一个很有意思的现象:大的波动后面往往跟着大的波动,小的波动后面跟着小的波动。
为什么会这样?因为市场信息是成批到达的。一条重大新闻出来,市场需要时间消化,这个过程中波动率会持续偏高。等消息消化完了,波动率才会慢慢降下来。
我最早接触这个概念是在读Robert Engle的论文,他因为这个拿了诺贝尔奖。当时觉得这理论挺抽象,直到自己在实盘中看到——嗯,确实如此。
避坑指南:我曾经犯过一个错误:看到波动率连续几天偏低,就以为市场「安全」了,加了大仓位。结果第二天一个黑天鹅事件,波动率瞬间爆表。波动率聚类不代表波动率不会突变——它只是说波动率有记忆性,但记忆是会断片的。
波动率聚类的量化方法有很多,最经典的是GARCH模型:
from arch import arch_model
def fit_garch(returns):
model = arch_model(returns, vol='Garch', p=1, q=1)
result = model.fit(disp='off')
return result.conditional_volatility
GARCH(1,1)是最常用的配置。p=1表示依赖上一期的波动率,q=1表示依赖上一期的收益率冲击。说白了,就是「昨天的波动 + 昨天的意外」共同决定今天的波动。
4. 三种信号怎么用?
我一般这样搭配:
| 信号类型 | 用途 | 时间尺度 |
|---|---|---|
| 历史波动率 | 判断当前波动处于历史什么分位 | 日线/周线 |
| 已实现波动率 | 实时监控波动变化,触发风控 | 分钟级 |
| 波动率聚类 | 预测未来短期波动趋势 | 小时级/日级 |
举个例子:当HV处于历史低位,RV突然飙升,同时GARCH模型预测未来波动率会持续偏高——这就是一个典型的「波动率爆发」信号。这时候我会减仓,或者改用更宽的止损。
一句话总结:历史波动率告诉你「过去有多浪」,已实现波动率告诉你「现在有多浪」,波动率聚类告诉你「接下来还会不会浪」。
5. 知识体系图
下面这张图展示了三种波动率信号的关系和应用链路:
你看这张图,三个信号从不同维度描述波动率。HV告诉你历史位置,RV告诉你实时状态,聚类告诉你未来趋势。三者结合,才能构建一个完整的波动率信号体系。
最后说一句:波动率信号不是万能的。它不能预测方向,也不能保证盈利。但它能帮你控制风险——而控制风险,才是量化交易活下去的根本。