4、单品种波动率建模:历史波动率、GARCH模型、波动率预测
波动率这东西,说白了就是市场的「脾气」。
做商品期货,你如果看不懂波动率,那仓位管理基本靠猜。我个人习惯,每次接手一个新品种,第一件事就是先把它的波动率「画像」画出来。今天我们就聊聊怎么给单个品种的波动率建模。
4.1 历史波动率:最朴素的度量
历史波动率(HV)是最基础的方法。它不复杂,但很实用。
计算逻辑很简单:取过去N天的收益率,算标准差,再年化一下。
import numpy as np
import pandas as pd
def historical_volatility(price_series, window=20, trading_days=252):
log_returns = np.log(price_series / price_series.shift(1))
hv = log_returns.rolling(window=window).std() * np.sqrt(trading_days)
return hv
嗯,这里要注意:窗口长度的选择很关键。
- 短窗口(10-20天):反应快,但噪声大。适合短线交易。
- 长窗口(60-120天):平滑,但滞后。适合趋势跟踪。
我的经验: 我在做螺纹钢时发现,20天HV和60天HV的差值,其实是个不错的「波动率加速度」指标。差值突然拉大,往往意味着行情要变盘。
4.2 GARCH模型:波动率的记忆效应
历史波动率有个硬伤——它假设过去每一天的权重都一样。但真实市场不是这样的。
你会发现,大波动之后往往跟着大波动,小波动之后跟着小波动。这就是波动率聚集效应。GARCH模型就是专门干这个的。
GARCH(1,1)是最常用的形式:
σ²_t = ω + α * ε²_{t-1} + β * σ²_{t-1}
三个参数的含义:
- ω:长期平均波动率水平
- α:对新信息的敏感度(冲击系数)
- β:波动率的衰减速度(持续性系数)
α+β 越接近1,波动率的记忆性越强。我曾经遇到一个品种,α+β=0.98,这意味着一次冲击的影响会持续很久很久。
避坑指南: 我曾经在原油期货上吃过亏。GARCH模型对极端值非常敏感,如果数据里有「黑天鹅」事件(比如2020年4月负油价),一定要先做异常值处理,否则模型会完全跑偏。
4.3 波动率预测:从历史到未来
建模不是为了看过去,而是为了预测未来。GARCH模型天然支持向前预测。
from arch import arch_model
# 拟合GARCH(1,1)
model = arch_model(returns, vol='Garch', p=1, q=1)
res = model.fit()
# 预测未来5天波动率
forecast = res.forecast(horizon=5)
predicted_vol = np.sqrt(forecast.variance.values[-1, :])
预测结果怎么用?我一般做三件事:
- 动态保证金调整:预测波动率上升,就提高保证金比例
- 止损宽度设定:用预测波动率的1.5倍作为ATR止损
- 仓位规模计算:波动率越高,仓位越小(风险平价逻辑)
核心观点: 波动率预测不是算命,它给的是一个「概率分布」的估计。你永远无法精确知道明天的波动率是多少,但你可以知道它大概率落在什么区间。
4.4 三种方法的对比
| 方法 | 优点 | 缺点 | 适用场景 |
|---|---|---|---|
| 历史波动率 | 简单、透明、计算快 | 滞后、等权重 | 快速评估、回测基准 |
| GARCH模型 | 捕捉聚集效应、可预测 | 参数估计复杂、对异常值敏感 | 中高频交易、风险管理 |
| 隐含波动率 | 前瞻性、包含市场预期 | 需要期权数据、有偏 | 期权定价、波动率套利 |
你想想看,这三种方法其实对应了不同的「时间视角」。历史波动率看后视镜,GARCH看当前路况,隐含波动率看前方路标。真正成熟的交易者,会把这三种结合起来用。
4.5 知识体系框架
下面这张图,是我自己梳理的波动率建模全流程。每次做新项目,我都会对着它走一遍。
这张图把整个流程串起来了。从原始数据开始,经过收益率计算,然后分三条路走——历史波动率、GARCH、隐含波动率。最后汇聚到风险管理决策上。
我个人习惯,在实际项目中至少同时跑HV和GARCH两条线。如果两者方向一致,那决策的置信度就高很多。如果出现背离,就要警惕了——市场可能在酝酿变化。
一句话总结: 波动率建模不是学术游戏,它是你仓位管理的「雷达」。雷达越准,你在风浪中翻船的概率就越低。
公众号:蓝海资料掘金营,微信deep3321