4. 组合VaR计算实战
在单资产VaR的基础上,组合VaR才是风险管理的真正主战场。组合VaR并不是把各资产VaR简单相加,而是要在资产权重、协方差矩阵与相关性结构的共同作用下,重新刻画组合收益分布。本节围绕这一核心,从原理到Python实现,再到结果解读,完成一次完整的组合VaR计算实战。
一、核心原理:组合方差为何不是个体方差的加权和
设组合包含 n 个资产,权重向量为 w,资产收益率为 r,则组合收益 Rp = wTr。组合方差为:
σ²_p = wᵀ Σ w
其中 Σ 为 n×n 协方差矩阵,对角线为各资产方差,非对角线为协方差。
关键点在于:相关性决定了分散化效果。当资产间相关系数小于1时,组合波动率小于各资产波动率的加权平均;相关系数越低,分散化收益越明显。若相关系数为1,则组合风险退化为线性加权,分散化失效。因此,组合VaR计算的第一步不是套公式,而是确认权重、协方差矩阵与相关性是否真实反映了当前持仓结构。
组合VaR的三种常见口径:参数法(方差-协方差法)、历史模拟法、蒙特卡洛模拟法。本节以参数法为主线,同时用历史模拟法做交叉验证。
二、方法流程:从权重到组合VaR的五步法
- 确定资产权重:按市值、敞口或风险预算分配,权重之和为1(或按实际持仓金额计算)。
- 估计协方差矩阵:可用样本协方差、EWMA或收缩估计,注意样本窗口与频率一致性。
- 计算组合波动率:σp = √(wᵀΣw),这是参数法VaR的核心输入。
- 选择置信水平与持有期:如95%/99%、1天/10天,并做时间平方根缩放。
- 计算VaR并回测:VaR = zα·σp·√Δt,随后用Kupiec检验验证突破次数是否合理。
下面用一张SVG展示组合VaR计算中权重、协方差矩阵与组合波动率之间的数据流关系。
三、Python实现:参数法与历史模拟法对照
下面用一段可直接运行的Python代码,完成权重设定、协方差矩阵估计、组合波动率与VaR计算,并与历史模拟法结果对照。
import numpy as np
import pandas as pd
from scipy.stats import norm
np.random.seed(42)
# 1. 模拟三资产日收益率(实际中替换为真实行情)
n_days = 1000
mean = np.array([0.0004, 0.0003, 0.0002])
vol = np.array([0.012, 0.010, 0.008])
corr = np.array([[1.0, 0.6, 0.3],
[0.6, 1.0, 0.4],
[0.3, 0.4, 1.0]])
cov = np.outer(vol, vol) * corr
rets = np.random.multivariate_normal(mean, cov, n_days)
rets = pd.DataFrame(rets, columns=["A", "B", "C"])
# 2. 资产权重
w = np.array([0.5, 0.3, 0.2])
# 3. 样本协方差矩阵与组合波动率
Sigma = rets.cov().values
sigma_p = np.sqrt(w @ Sigma @ w)
print("组合日波动率:", round(sigma_p, 6))
# 4. 参数法VaR(95%,1天)
alpha = 0.95
z = norm.ppf(alpha)
var_param = z * sigma_p
print("参数法VaR(95%,1d):", round(var_param, 6))
# 5. 历史模拟法VaR
port_ret = rets.values @ w
var_hist = -np.percentile(port_ret, (1 - alpha) * 100)
print("历史模拟VaR(95%,1d):", round(var_hist, 6))
# 6. 10天持有期缩放
var_10d = var_param * np.sqrt(10)
print("参数法VaR(95%,10d):", round(var_10d, 6))
运行后你会看到两个VaR值通常接近但不完全相等。参数法依赖正态假设与协方差估计,历史模拟法直接使用经验分位数,对尾部形态更敏感。两者差异本身就是重要的诊断信号。
四、结果解读与常见误区复盘
| 观察项 | 含义 | 异常信号 |
|---|---|---|
| 组合波动率 σp | 组合整体风险水平 | 接近加权平均波动率,说明分散化不足 |
| 参数法VaR | 正态假设下的分位数风险 | 显著低于历史模拟VaR,提示尾部偏厚 |
| 历史模拟VaR | 经验分布下的分位数风险 | 随窗口变化剧烈,说明样本不稳定 |
| 相关性矩阵 | 分散化效果的核心来源 | 危机期相关性骤升,VaR被低估 |
| Kupiec突破次数 | 回测VaR是否被突破过多 | 突破次数显著高于预期,模型偏乐观 |
三个高频误区:第一,用单资产VaR加权求和代替组合VaR,忽略相关性,结果通常偏高;第二,协方差矩阵用不同频率或不同窗口估计,导致量纲不一致;第三,只算VaR不回测,无法发现模型在危机期的系统性低估。
复盘时建议固定一条检查链:权重是否与真实持仓一致 → 协方差矩阵是否正定且窗口合理 → 组合波动率是否落在合理区间 → 参数法与历史模拟法差异是否可解释 → Kupiec检验是否通过。只有这条链路完整,组合VaR才具备决策参考价值。
实战建议:在组合VaR计算中,优先使用EWMA协方差矩阵捕捉波动率聚集,再用历史模拟法做尾部交叉验证,最后用Kupiec检验确认突破率。三者结合,比单一方法更稳健。