4、波动率管理:波动率的定义与计算
波动率这东西,说白了就是市场情绪的体温计。我做了这么多年量化,见过太多人盯着收益率看,却忽略了波动率这个隐形杀手。你想想看,一个策略年化30%,但最大回撤40%,你敢重仓吗?反正我不敢。
今天我们就来聊聊波动率管理。这是风险控制的核心,也是仓位管理的基石。
4.1 波动率的定义
波动率衡量的是资产价格变动的剧烈程度。数学上,它通常用收益率的标准差来表示。
公式很简单:
σ = √( (1/(n-1)) * Σ(rt - r̄)² )
其中 rt 是每日收益率,r̄ 是平均收益率,n 是样本数。
嗯,这里要注意:我们通常用对数收益率,而不是简单收益率。为什么?因为对数收益率在时间上可加,而且更符合正态分布假设。我在项目中遇到过有人用简单收益率算波动率,结果回测时参数全偏了,后来排查了半天才发现是这个坑。
4.2 历史波动率
历史波动率,就是基于过去的数据算出来的波动率。它反映的是「已经发生」的事情。
计算步骤:
- 取过去N天的收盘价
- 计算每日对数收益率
- 计算这些收益率的标准差
- 年化处理(乘以√252)
代码实现:
import numpy as np
import pandas as pd
def historical_volatility(prices, window=20):
log_returns = np.log(prices / prices.shift(1))
hv = log_returns.rolling(window=window).std() * np.sqrt(252)
return hv
我个人习惯用20个交易日(约一个月)作为窗口期。太短了噪音大,太长了反应迟钝。当然,如果你做高频交易,可能用5天甚至1天。这个没有标准答案,看你的策略周期。
4.3 隐含波动率
隐含波动率就更有意思了。它不是算出来的,而是从期权价格里反推出来的。说白了,就是市场「预期」的未来波动率。
为什么叫「隐含」?因为它隐含在期权价格里。你用Black-Scholes公式,把期权价格、行权价、到期时间、无风险利率都代入,反解出波动率,这就是隐含波动率。
隐含波动率和历史波动率的区别:
| 类型 | 数据来源 | 反映内容 | 特点 |
|---|---|---|---|
| 历史波动率 | 历史价格 | 过去已发生 | 滞后、客观 |
| 隐含波动率 | 期权价格 | 未来预期 | 前瞻、含情绪 |
我曾经在2018年2月那波美股暴跌中,亲眼看到隐含波动率在一天内飙升了3倍。当时VIX指数从15直接冲到50。如果你只看历史波动率,根本反应不过来。这就是隐含波动率的价值——它包含了市场的恐慌情绪。
4.4 波动率聚类现象
你有没有发现一个现象:市场平静的时候,波动率一直很低;一旦出现大波动,后面往往跟着更大的波动。这就是波动率聚类。
为什么会这样?
原因其实不难理解。市场参与者的行为有惯性。当市场出现剧烈波动时,投资者会变得谨慎,交易行为趋于一致,导致波动持续。反之,当市场平静时,大家放松警惕,波动率就维持在低位。
这个现象对量化交易意味着什么?
- 波动率不是随机的,它有自相关性
- 高波动率时期往往伴随着更大的风险
- 简单的正态分布假设会低估极端风险
我记得有一次做CTA策略回测,发现策略在低波动率时期表现很好,但一到高波动率时期就连续亏损。后来我加入了波动率聚类检测,在高波动率时期降低仓位,才把夏普比率从0.8提升到了1.5。
4.5 基于波动率的仓位调整(Volatility Targeting)
好了,前面讲了这么多理论,现在来点实战的。Volatility Targeting,说白了就是「让仓位跟着波动率走」。
核心思想:保持投资组合的风险敞口恒定,而不是仓位恒定。
公式:
目标仓位 = 目标波动率 / 当前波动率
举个例子:
- 你设定的目标波动率是20%
- 当前市场波动率是10%
- 那么你的仓位应该是 20%/10% = 2倍杠杆
- 如果波动率上升到40%,仓位降到 20%/40% = 0.5倍
代码实现:
def volatility_targeting(prices, target_vol=0.20, window=20):
hv = historical_volatility(prices, window)
weight = target_vol / hv
weight = np.clip(weight, 0, 2) # 限制杠杆范围
return weight
我个人习惯把杠杆限制在0到2倍之间。为什么?因为超过2倍杠杆,一旦遇到极端行情,爆仓风险太大。低于0?那就是做空了,这个要看你的策略是否允许。
Volatility Targeting的好处很明显:
- 风险可控:无论市场怎么变,你的风险敞口基本恒定
- 收益平滑:避免了在低波动率时期仓位过轻,高波动率时期仓位过重
- 心理舒适:你不会在市场暴跌时满仓扛单,也不会在牛市时踏空
当然,它也有缺点。比如在波动率突然飙升时,你可能需要大幅减仓,这会错过反弹。但话说回来,活着比什么都重要,对吧?
好了,这一章的内容就到这里。波动率管理是量化风控的核心,建议你在自己的策略里至少实现一个波动率调整模块。哪怕只是简单的Volatility Targeting,也能让你的策略稳健不少。
公众号:蓝海资料掘金营,微信deep3321