第十二章:风险预算与风险平价在期权组合中的实现
聊到期权组合,很多人第一反应就是「怎么赚钱」。但我在实战中摔过几次跟头之后,才真正明白——活下来比赚多少更重要。风险预算和风险平价,说白了就是帮你「活着」的两套工具。
我个人习惯把风险预算看作「分蛋糕」,把风险平价看作「分风险」。两者目标不同,但底层逻辑相通。今天我们就来拆解一下,怎么在期权组合里落地这两套方法。
12.1 风险预算:先定总风险,再切分
风险预算的核心思路很简单:你愿意亏多少,然后把这个额度分配到各个头寸上。
举个例子。假设你管理一个期权组合,总风险预算定在 5% 的 VaR(95% 置信度,1 天)。那么你手头的几个策略——比如做多波动率、卖跨式、日历价差——各自能分到多少风险?
我一般这么干:
- 定总风险上限:比如组合最大回撤不超过 5%。
- 按策略贡献度分配:波动率大的策略少分点,稳健的策略多分点。
- 动态调整:市场变了,预算也得跟着调。
关键点:风险预算不是一成不变的。我见过有人年初定好预算,年底一看早爆了——因为没考虑波动率变化。
具体到期权组合,风险预算的分配可以基于希腊字母。比如:
- Delta 预算:控制方向性风险,比如不超过组合净值的 2%。
- Vega 预算:控制波动率风险,比如不超过 1.5%。
- Gamma 预算:控制曲率风险,这个容易被忽略,但很重要。
我曾经在 2020 年 3 月吃过亏——当时只盯着 Delta 和 Vega,没给 Gamma 留预算。结果市场一波动,Gamma 直接把我打穿了。嗯,从那以后我再也不敢忽视 Gamma 预算了。
12.2 风险平价:让每个头寸「等风险」
风险平价和风险预算不一样。风险平价追求的是每个头寸对组合总风险的贡献相等。说白了,就是不让任何一个头寸「一家独大」。
你想想看,如果组合里 80% 的风险都来自一个卖跨式策略,那这个组合其实很不健康。一旦波动率飙升,你就得吃大亏。
风险平价的做法是:
- 计算每个头寸的边际风险贡献(MRC)。
- 调整头寸权重,让每个头寸的风险贡献相等。
- 定期再平衡。
我的小技巧:风险平价在期权组合里特别适合做「波动率策略组合」。比如同时持有做多波动率和做空波动率的策略,让它们互相制衡。
这里有个数学表达。假设组合有 n 个资产,每个资产的权重为 w_i,协方差矩阵为 Σ。那么资产 i 的风险贡献 RC_i 为:
RC_i = w_i * (Σ * w)_i / sqrt(w^T * Σ * w)
风险平价的目标就是让所有 RC_i 相等。嗯,听起来简单,但实际求解是个优化问题。我一般用 Python 的 scipy.optimize 来解。
12.3 期权组合中的实现细节
期权组合和股票组合不一样。期权的风险是非线性的,所以风险预算和风险平价不能直接套用传统方法。
我建议这么做:
- 用希腊字母代替价格:把 Delta、Vega、Gamma 当作「风险因子」,然后在这些因子上做风险预算或风险平价。
- 考虑相关性:不同期权策略之间可能有相关性。比如做多波动率和卖跨式,在波动率飙升时是负相关的。
- 动态再平衡:期权的时间价值衰减很快,所以风险贡献会随时间漂移。我一般每周做一次再平衡。
注意:风险平价在极端行情下可能失效。因为相关性会突变,协方差矩阵的估计也会失真。我经历过一次,波动率曲面扭曲后,所有头寸的风险贡献同时飙升——那感觉,就像所有鸡蛋都在一个篮子里,但篮子着火了。
12.4 代码实现:一个简单的风险平价优化器
下面是我常用的一个风险平价优化代码。它基于希腊字母的协方差矩阵,求解最优权重。
import numpy as np
from scipy.optimize import minimize
def risk_parity_weights(cov_matrix):
n = cov_matrix.shape[0]
def risk_contribution(w, cov):
portfolio_vol = np.sqrt(w @ cov @ w)
rc = w * (cov @ w) / portfolio_vol
return rc
def objective(w):
rc = risk_contribution(w, cov_matrix)
target = np.mean(rc)
return np.sum((rc - target)**2)
constraints = ({'type': 'eq', 'fun': lambda w: np.sum(w) - 1})
bounds = [(0, 1) for _ in range(n)]
result = minimize(objective,
x0=np.ones(n)/n,
bounds=bounds,
constraints=constraints,
method='SLSQP')
return result.x
# 示例:三个期权策略的协方差矩阵
cov = np.array([[0.04, 0.01, 0.02],
[0.01, 0.09, 0.03],
[0.02, 0.03, 0.16]])
weights = risk_parity_weights(cov)
print("风险平价权重:", weights)
这段代码我用了好几年。注意,协方差矩阵的估计是关键。我建议用 EWMA(指数加权移动平均)来估计,而不是简单历史平均。因为期权市场的波动率聚集效应很明显。
12.5 一张图看懂风险预算 vs 风险平价
下面这张 SVG 图展示了两种方法的区别。左边是风险预算,右边是风险平价。
从图上你能看出来:风险预算像是「切蛋糕」,总风险固定,然后分给各个策略;风险平价像是「分风险」,让每个策略的风险贡献一样大。
12.6 实战中的避坑指南
最后,分享几个我在实战中踩过的坑:
- 别迷信历史数据:协方差矩阵是基于历史估计的,但未来可能完全不同。我建议加入压力测试场景。
- 注意交易成本:风险平价需要频繁再平衡,交易成本可能吃掉收益。尤其是期权,买卖价差大。
- 别忽略尾部风险:风险平价在正态分布假设下很完美,但期权市场有肥尾。我一般会额外加一个尾部风险预算。
我的经验:风险预算和风险平价不是二选一。我现在的做法是:先用风险预算定总风险上限,再用风险平价在子策略内部做分配。两者结合,效果更好。
好了,这一章就到这里。记住,风险管理不是束缚,而是让你在市场波动中活得更久。下次我们聊聊怎么用这些工具做动态对冲——嗯,那又是另一个故事了。