第十九章:多资产期权组合的协方差曲面建模
说实话,做期权量化这几年,我踩过最大的坑就是——把多资产组合当成单资产来管。
你想想看,单资产期权组合,你盯着波动率曲面就够了。但一旦涉及多个标的,比如沪深300 + 中证500 + 创业板指,问题就来了:它们之间的相关性不是常数,而是会随着时间、市场状态、甚至行权价变化而变化。这就是我们今天要聊的——协方差曲面建模。
为什么需要协方差曲面?
先讲个我自己的经历。几年前我做了一个跨品种的期权套利策略,底层是50ETF和300ETF的价差。我一开始用的是历史相关系数,大概0.85左右。结果2020年3月那波暴跌,相关性直接跳到0.97,我的对冲头寸瞬间失效,亏了不少。
事后复盘我才意识到:相关性不是一条线,而是一个曲面。它跟波动率一样,有期限结构,有偏斜,甚至还有“相关性微笑”。
协方差曲面的数学表达
我们先从最基础的开始。对于两个资产 i 和 j,它们的协方差可以写成:
Σ_{ij}(t, K_i, K_j) = ρ_{ij}(t, K_i, K_j) × σ_i(t, K_i) × σ_j(t, K_j)
其中:
- t 是剩余期限
- K_i, K_j 是各自的行权价
- σ_i, σ_j 是各自的隐含波动率曲面
- ρ_{ij} 是隐含相关系数曲面
嗯,这里要注意:ρ_{ij} 不是常数,它本身也是一个曲面。我习惯把它叫做“隐含相关性曲面”,因为它跟隐含波动率一样,是从市场报价中反推出来的。
隐含相关性曲面的构建方法
我个人比较常用的方法有三种,各有优劣:
| 方法 | 原理 | 优点 | 缺点 |
|---|---|---|---|
| 1. 基于价差期权 | 从价差期权价格反推相关性 | 直接反映市场预期 | 流动性差,数据稀疏 |
| 2. 基于历史+动态调整 | 用历史相关性做基准,用GARCH等模型动态调整 | 数据充足,稳定 | 滞后性,无法捕捉极端事件 |
| 3. 混合方法 | 用历史数据做先验,用期权数据做后验校准 | 兼顾稳定性和市场敏感性 | 实现复杂,计算量大 |
我在实际项目中,强烈推荐第三种。为什么?因为纯历史方法在极端行情下会失效,纯期权方法又受限于流动性。混合方法虽然麻烦,但效果最好。
实战:用Python构建协方差曲面
下面我给出一个简化版的实现思路。假设我们有两只股票(比如茅台和五粮液),我们要构建它们的协方差曲面。
import numpy as np
import pandas as pd
from scipy.interpolate import griddata
# 假设我们已经有了两个资产的波动率曲面
# sigma_surface_1, sigma_surface_2 是已经插值好的曲面
# 我们还需要构建相关性曲面
def build_correlation_surface(option_prices, strikes_1, strikes_2, maturities):
"""
从价差期权价格反推隐含相关性曲面
"""
# 1. 提取价差期权价格
spread_prices = option_prices # 假设已预处理
# 2. 用Black-Scholes模型反推隐含相关性
# 这里用简化公式:ρ ≈ (σ_spread² - σ₁² - σ₂²) / (2σ₁σ₂)
# 注意:实际中要用更复杂的模型
correlation_surface = np.zeros((len(maturities), len(strikes_1), len(strikes_2)))
for t_idx, T in enumerate(maturities):
for k1_idx, K1 in enumerate(strikes_1):
for k2_idx, K2 in enumerate(strikes_2):
sigma_1 = sigma_surface_1[t_idx, k1_idx]
sigma_2 = sigma_surface_2[t_idx, k2_idx]
sigma_spread = spread_vol[t_idx, k1_idx, k2_idx]
# 反推相关性
rho = (sigma_spread**2 - sigma_1**2 - sigma_2**2) / (2 * sigma_1 * sigma_2)
rho = np.clip(rho, -0.999, 0.999) # 防止越界
correlation_surface[t_idx, k1_idx, k2_idx] = rho
return correlation_surface
# 最终协方差曲面
cov_surface = correlation_surface * np.einsum('tij,tkj->tij', sigma_surface_1, sigma_surface_2)
协方差曲面的可视化
我习惯用热力图来展示相关性曲面。下面是一个SVG示意图,展示不同期限和行权价下的相关性变化:
从这张图你能看到几个规律:
- 期限越短,相关性越高——短期市场情绪驱动,大家同涨同跌
- 平值附近相关性最高——深度实值或虚值期权,相关性会下降
- 极端行权价相关性不对称——虚值看跌期权的相关性往往比虚值看涨更高(避险情绪)
协方差曲面在组合优化中的应用
有了协方差曲面,我们就可以做更精细的组合优化。我常用的一个场景是:
- 波动率套利组合:利用协方差曲面识别相关性偏离的品种对
- 风险预算分配:根据协方差曲面的期限结构,动态调整各期限的权重
- 尾部风险对冲:重点关注协方差曲面在极端行权价处的变化
举个例子,如果你发现某两个资产的隐含相关性远低于历史相关性,那可能意味着市场在定价一个“相关性回归”的机会。这时候你可以做多价差期权,赌相关性回归均值。
实现中的注意事项
最后分享几个实战经验:
- 数据清洗是第一关:价差期权的报价经常有噪音,我一般会用中位数滤波先处理一遍
- 插值方法要选对:相关性曲面比波动率曲面更平滑,用三次样条就够了,别用太复杂的模型
- 正定性约束:构建出来的协方差矩阵必须正定,否则优化时会出问题。我习惯用“收缩估计”来保证正定性
- 计算效率:如果你有10个资产,协方差曲面就是10×10×T×K的维度,计算量很大。我一般用GPU加速或者降维处理
嗯,协方差曲面建模这块内容确实有点烧脑。但说白了,它就是让你从“看单个资产”升级到“看资产之间的关系”。做多资产期权组合,这才是真正的核心竞争力。