3. 协整与波动率:协整关系的波动率依赖性、残差波动率建模
协整关系,说白了就是两个价格序列之间有个「长期拉手」的关系。但很多人忽略了一个关键点——这个「拉手」的松紧程度,其实跟市场波动率密切相关。我刚开始做跨品种套利时,就吃过这个亏。
3.1 协整关系的波动率依赖性
你想想看,当市场风平浪静时,两个品种的价差往往很稳定。但一旦波动率飙升,价差就开始「抽风」。这不是偶然,而是协整关系本身就有波动率依赖性。
为什么会这样?因为协整关系本质上是一个线性组合:
spread = price_A - β × price_B
当波动率低时,这个β值相对稳定。但波动率一高,β就开始漂移。我在项目中遇到过这种情况:2018年做螺纹钢和热卷的套利,平时协整系数稳定在1.02左右,但一遇到供给侧改革政策出台,波动率瞬间翻倍,β直接跳到1.15。
核心观点:协整关系不是静态的,它随波动率变化而变化。高波动率环境下,协整关系可能暂时失效。
我个人习惯的做法是,先对波动率进行分箱处理。把波动率分成低、中、高三档,然后分别估计协整系数:
import numpy as np
import statsmodels.api as sm
def rolling_cointegration(price_A, price_B, window=60):
"""滚动协整估计,附带波动率分箱"""
results = []
for i in range(window, len(price_A)):
# 计算滚动波动率
ret_A = np.diff(price_A[i-window:i]) / price_A[i-window:i-1]
vol = np.std(ret_A) * np.sqrt(252)
# 分箱
if vol < 0.15:
regime = 'low_vol'
elif vol < 0.30:
regime = 'mid_vol'
else:
regime = 'high_vol'
# 协整回归
X = sm.add_constant(price_B[i-window:i])
model = sm.OLS(price_A[i-window:i], X).fit()
results.append({
'beta': model.params[1],
'regime': regime,
'vol': vol
})
return results
避坑指南:我曾经直接用全样本估计协整系数,结果在波动率突变时亏得很惨。后来改成滚动窗口+波动率分箱,效果好了很多。
3.2 残差波动率建模
协整回归做完后,我们得到残差序列。这个残差就是套利信号的基础。但残差本身也有波动率聚集效应——大波动后面跟着大波动,小波动后面跟着小波动。
嗯,这里要注意。如果你直接用原始残差做交易信号,很容易被假突破骗进去。我建议对残差进行波动率建模,把残差标准化后再用。
常用的方法有两种:
- GARCH模型:对残差序列拟合GARCH(1,1),得到条件波动率
- 滚动标准差:用过去N天的滚动标准差作为波动率估计
我个人更倾向于GARCH,因为它能捕捉波动率的自相关性。来看代码:
from arch import arch_model
def residual_vol_modeling(residuals):
"""对协整残差进行波动率建模"""
# 拟合GARCH(1,1)
model = arch_model(residuals * 100, vol='Garch', p=1, q=1)
res = model.fit(disp='off')
# 获取条件波动率
conditional_vol = res.conditional_volatility / 100
# 标准化残差
standardized_residuals = residuals / conditional_vol
return standardized_residuals, conditional_vol
标准化后的残差,均值接近0,标准差接近1。这样设置交易阈值就简单多了——比如±2倍标准差作为开仓信号。
注意:GARCH模型对异常值敏感。如果残差中有极端值,建议先做截尾处理。我一般用99%分位数截尾。
3.3 波动率状态切换策略
既然协整关系和残差波动率都跟市场状态有关,那策略也得跟着变。我总结了一套「三态切换」策略:
| 波动率状态 | 协整系数稳定性 | 交易频率 | 止损宽度 |
|---|---|---|---|
| 低波动(<15%) | 高 | 正常 | 1.5倍标准差 |
| 中波动(15%-30%) | 中等 | 降低50% | 2.0倍标准差 |
| 高波动(>30%) | 低 | 暂停交易 | 不设止损,等待回归 |
你看,高波动时我干脆不交易。为什么?因为协整关系在高波动下容易断裂,强行交易就是送钱。
我记得有一次做豆粕和菜粕的套利,波动率突然从18%飙到35%。按我的策略应该暂停,但当时贪心想多赚一笔。结果价差突破4倍标准差还不回归,亏了2%才砍仓。从那以后,高波动暂停交易就成了铁律。
3.4 实战中的残差监控
最后说一个细节。残差波动率建模不是一劳永逸的,需要实时监控模型效果。我一般每天检查三个指标:
- 残差自相关性:如果残差还有明显的自相关,说明模型没捕捉全
- 波动率预测误差:实际波动率跟GARCH预测的偏差
- 标准化残差的分布:应该接近正态分布,如果偏度或峰度异常,要警惕
一句话总结:协整套利的本质是赌残差回归,而残差的波动率决定了这个赌局的风险大小。管不好波动率,就别谈套利。
好了,这一章的内容就这些。波动率管理是套利策略的「安全带」,系好了才能开快车。