10、均值-方差优化在期权组合中的应用
聊到期权组合,很多人第一反应是「策略多、收益高」。但说实话,我见过太多人把期权组合做成了「赌大小」。你想想看,买几个虚值Call,再卖几个Put,方向对了赚翻,方向错了爆仓——这哪叫组合管理?这叫押注。
真正专业的做法,是用数学工具来平衡收益和风险。均值-方差优化,就是干这个的。它最早是Harry Markowitz在1952年提出的,用在股票组合上。但期权这东西,收益是非线性的,波动率是动态的,直接把股票那套搬过来用,会出问题。
我个人习惯,在做期权组合优化时,会把均值-方差框架做三处改造:收益用期权定价模型算期望、风险用希腊字母拆解、协方差矩阵用隐含波动率曲面校准。下面我一步步说清楚。
10.1 均值-方差优化的核心逻辑
先回顾一下基础。均值-方差优化的目标很简单:在给定风险水平下,最大化预期收益;或者在给定收益目标下,最小化风险。
数学上,它求解的是:
最大化:μᵀw - λ · wᵀΣw
其中:
μ = 各资产的预期收益向量
w = 各资产的权重向量
Σ = 资产收益率的协方差矩阵
λ = 风险厌恶系数
嗯,这里要注意:λ越大,说明你越厌恶风险,组合会偏向低波动资产。我在项目中遇到过,有些交易员把λ设成0.5,结果组合里全是深度实值期权,波动是小了,但收益也几乎没了。这其实是个坑。
10.2 期权组合的特殊性
股票组合的收益近似正态分布,协方差矩阵相对稳定。但期权组合不一样:
- 收益非线性:期权的Delta、Gamma会随标的价格变化,收益不是线性的
- 波动率敏感:Vega暴露让你在波动率变化时承受额外风险
- 时间衰减:Theta每天都在吃掉期权的时间价值
所以,直接把股票组合的均值-方差框架套用到期权上,结果会非常离谱。我曾经试过用历史收益率直接算期权组合的协方差矩阵,回测出来夏普比率高达3.0,但实盘一跑就崩了——因为历史数据里没有包含波动率突变的场景。
10.3 改造后的均值-方差框架
我个人习惯用以下三步来改造:
10.3.1 收益预测:用期权定价模型反推
期权的预期收益,不能简单用历史均值。我一般用Black-Scholes模型或者局部波动率模型,结合当前隐含波动率曲面,计算每个期权在持有期内的期望收益。
# 伪代码示例:计算单个期权的预期收益
def expected_option_return(option, S, T, r, sigma_surface):
# 用当前隐含波动率计算理论价格
current_price = black_scholes(option, S, T, r, sigma_surface)
# 模拟标的价格路径,计算持有期结束时的期望价格
expected_future_price = monte_carlo_simulation(option, S, T, r, sigma_surface)
# 预期收益 = (期望价格 - 当前价格) / 当前价格
return (expected_future_price - current_price) / current_price
这里有个细节:sigma_surface要用当前市场的隐含波动率曲面,而不是历史波动率。因为期权定价看的是市场对未来波动率的预期,不是过去。
10.3.2 风险度量:用希腊字母构建协方差矩阵
与其用价格收益率,不如用希腊字母暴露来度量风险。我通常构建一个因子暴露矩阵:
| 期权 | Delta暴露 | Gamma暴露 | Vega暴露 | Theta暴露 |
|---|---|---|---|---|
| Call 1 | 0.65 | 0.02 | 0.15 | -0.03 |
| Put 2 | -0.40 | 0.01 | 0.12 | -0.02 |
| Call 3 | 0.80 | 0.03 | 0.18 | -0.04 |
然后,用这些因子暴露乘以因子收益率的协方差矩阵,得到期权组合的风险矩阵。这样做的好处是:你可以单独控制每个风险因子的暴露。比如你想做Delta中性,就把Delta暴露设成0。
10.3.3 优化求解:带约束的二次规划
有了预期收益向量μ和风险矩阵Σ,剩下的就是求解二次规划问题。但期权组合通常有额外约束:
- 保证金约束:期权交易需要保证金,不能无限加杠杆
- 希腊字母约束:比如Delta中性、Gamma中性
- 持仓限制:单个期权持仓不能超过总资金的20%
from scipy.optimize import minimize
def optimize_option_portfolio(mu, Sigma, max_leverage=2.0):
n = len(mu)
# 目标函数:最大化收益 - 风险惩罚
def objective(w):
return -(mu @ w - 0.5 * w @ Sigma @ w)
# 约束条件
constraints = [
{'type': 'eq', 'fun': lambda w: np.sum(w) - 1}, # 满仓
{'type': 'ineq', 'fun': lambda w: max_leverage - np.sum(np.abs(w))} # 杠杆限制
]
# 边界:每个期权权重在-1到1之间
bounds = [(-1, 1) for _ in range(n)]
result = minimize(objective, x0=np.ones(n)/n,
bounds=bounds, constraints=constraints)
return result.x
10.4 实战案例:构建一个Delta中性的波动率套利组合
说个我实际做过的案例。当时市场隐含波动率偏高,我想构建一个做空波动率、Delta中性的组合。
步骤是这样的:
- 选期权:选择近月平值Call和Put各5个,共10个期权
- 算收益:用当前隐含波动率曲面,计算每个期权在持有期内的期望收益(假设波动率回归均值)
- 建风险矩阵:用Delta、Gamma、Vega、Theta四个因子构建协方差矩阵
- 加约束:Delta暴露=0,Vega暴露<0(做空波动率),保证金不超过总资金
- 求解:用二次规划求出最优权重
结果出来,组合的权重分布很有意思:卖Call和卖Put各占40%,再买一些远月的期权来对冲Gamma风险。这个组合在波动率下降时赚了钱,而且Delta始终保持在0附近。
10.5 知识体系总览
下面这张图,我把本章的核心逻辑画出来了。你看一眼就能明白整个框架:
这张图把整个流程串起来了:输入是期权定价模型、希腊字母暴露、隐含波动率曲面;中间是带约束的二次规划求解;输出是最优权重;最后还要做回测验证。每一步都不能少。
10.6 常见问题与避坑
最后,我总结几个实战中容易踩的坑:
- 协方差矩阵不稳定:期权市场的波动率结构变化很快,建议用滚动窗口(比如60天)重新估计协方差矩阵
- 忽略交易成本:期权买卖价差大,频繁调仓会吃掉收益。我一般会在优化中加入一个「调仓成本惩罚项」
- 过度依赖历史数据:期权组合的尾部风险远大于正态分布假设。建议用蒙特卡洛模拟做压力测试
好了,均值-方差优化在期权组合中的应用,说白了就是用数学工具帮你做决策,而不是凭感觉。但记住,工具只是工具,市场永远比模型复杂。保持敬畏,持续验证,才是长期盈利的关键。
公众号:蓝海资料掘金营,微信deep3321