2. VaR 计算方法概述

在金融风险管理中,VaR(Value at Risk,风险价值)是衡量在特定置信水平和持有期内,资产组合可能遭受的最大预期损失。计算 VaR 的核心在于对资产收益率分布进行建模。根据对分布假设和处理方式的不同,主流方法分为三类:参数法、历史模拟法和蒙特卡洛模拟法。本章将系统阐述这三种方法的原理、计算步骤、适用场景及核心差异。

2.1 参数法(方差-协方差法)

参数法假设资产收益率服从某种已知的概率分布(通常为正态分布),通过估计分布的参数(均值、方差、协方差)来直接计算 VaR。其核心在于“参数化”风险因子。

2.1.1 核心假设与公式

  • 正态分布假设:资产收益率 \( R \sim N(\mu, \sigma^2) \)。
  • 线性映射:组合价值变化与风险因子变化呈线性关系。
  • VaR 计算公式:\( VaR = - ( \mu \cdot \Delta t + z_{\alpha} \cdot \sigma \cdot \sqrt{\Delta t} ) \cdot P \),其中 \( z_{\alpha} \) 为标准正态分布下置信水平 \( \alpha \) 对应的分位数(如 95% 对应 1.645,99% 对应 2.326),\( P \) 为组合当前价值。

2.1.2 计算步骤

  1. 识别风险因子:确定影响组合价值的市场变量(如利率、汇率、股价)。
  2. 估计参数:计算各风险因子的历史收益率均值 \( \mu \) 和方差-协方差矩阵 \( \Sigma \)。
  3. 计算组合波动率:\( \sigma_p = \sqrt{ \mathbf{w}^T \Sigma \mathbf{w} } \),其中 \( \mathbf{w} \) 为权重向量。
  4. 代入公式:根据持有期和置信水平计算 VaR。
优点:计算速度快,仅需一阶矩和二阶矩;易于解析求解。
缺点:对“厚尾”分布失效;无法处理非线性风险(如期权)。

2.2 历史模拟法

历史模拟法是一种非参数方法,它不假设任何特定的分布形式,而是直接使用历史收益率数据来模拟未来可能的变化。其核心思想是“历史会重演”。

2.2.1 核心原理

  • 直接使用历史数据:将过去 N 个交易日的实际收益率序列作为未来可能的情景。
  • 排序分位数:将历史损益值按从小到大排序,取第 \( (1-\alpha) \times N \) 个分位数作为 VaR 估计值。
  • 无需分布假设:完全依赖经验分布,能自然捕捉厚尾、自相关等真实市场特征。

2.2.2 计算步骤

  1. 收集历史数据:获取风险因子过去 N 天的日收益率序列。
  2. 计算情景损益:将当前头寸映射到每个历史收益率情景,得到 N 个模拟损益值。
  3. 排序:将 N 个损益值从小到大排序。
  4. 取分位数:例如 95% 置信水平下,取排序后第 \( 0.05 \times N \) 个位置的损益值(负值)作为 VaR。
实践要点:历史模拟法对数据窗口长度敏感。窗口过短(如 250 天)可能导致 VaR 估计不稳定;窗口过长(如 1000 天)可能包含过时的市场结构信息。通常建议使用 500~750 个交易日。

2.3 蒙特卡洛模拟法

蒙特卡洛模拟法是一种随机模拟方法,它通过假设风险因子的随机过程(如几何布朗运动),生成大量可能的未来路径,从而构建损益分布。它是最灵活但计算成本最高的方法。

2.3.1 核心原理

  • 随机过程假设:通常假设资产价格服从几何布朗运动:\( dS = \mu S dt + \sigma S dW \),其中 \( dW \) 为维纳过程。
  • 大量模拟:生成数千至数万条随机路径,每条路径对应一个未来损益情景。
  • 分布构建:将所有情景的损益值汇总,形成经验分布,再取分位数得到 VaR。

2.3.2 计算步骤

  1. 设定随机模型:选择风险因子的随机过程并估计参数(\( \mu, \sigma \))。
  2. 生成随机序列:使用伪随机数生成器(如 Mersenne Twister)模拟 \( dW \),并递推计算未来价格路径。
  3. 计算路径损益:对每条路径,计算期末组合价值与当前价值的差值。
  4. 汇总与排序:将所有路径的损益值排序,取对应置信水平的分位数。
注意事项:蒙特卡洛模拟的精度取决于模拟次数。通常至少需要 10,000 次模拟才能获得稳定估计。此外,随机数质量(低差异序列 vs 伪随机数)会直接影响结果可靠性。

2.4 三种方法对比

对比维度 参数法 历史模拟法 蒙特卡洛模拟法
分布假设 正态分布(或 t 分布) 无(经验分布) 随机过程(如 GBM)
计算速度 极快 快 慢(需大量模拟)
厚尾处理 差(正态假设下低估尾部风险) 好(自然捕捉历史厚尾) 较好(可通过跳跃扩散模型改进)
非线性风险 不支持(线性近似) 支持(全值重估) 支持(全值重估)
数据需求 均值、方差、协方差 历史收益率序列 随机过程参数
典型应用 线性组合、快速风控 监管资本计算(巴塞尔协议) 复杂衍生品、压力测试

2.5 方法选择流程图

下图展示了在实际风控场景中,如何根据组合特征和计算资源选择最合适的 VaR 计算方法。

VaR 计算方法选择流程图 开始:组合 VaR 计算 组合是否包含期权/非线性产品? 是 计算资源是否充足? 是 蒙特卡洛模拟法 否 历史模拟法 否 数据是否满足正态性? 是 参数法 否 输出 VaR 估计值 选择建议 • 线性组合 + 正态数据 → 参数法(最快) • 非线性组合 + 资源充足 → 蒙特卡洛(最灵活) • 非线性组合 + 资源受限 / 监管要求 → 历史模拟法

2.6 三种方法的数学表达对比

以下代码片段展示了三种方法在 Python 中的核心计算逻辑,便于理解其数学本质。

import numpy as np
from scipy.stats import norm

# 示例数据:假设组合当前价值 P=1e6,日收益率均值 mu=0.0005,日波动率 sigma=0.02
P = 1e6
mu = 0.0005
sigma = 0.02
confidence = 0.95
z = norm.ppf(1 - confidence)  # 95% 置信水平下 z = -1.645

# 1. 参数法 VaR
VaR_param = - (mu + z * sigma) * P
print(f"参数法 VaR (95%): {VaR_param:.2f}")

# 2. 历史模拟法(假设有 500 个历史日收益率数据)
np.random.seed(42)
historical_returns = np.random.normal(mu, sigma, 500)  # 模拟历史数据
historical_PnL = historical_returns * P
historical_PnL_sorted = np.sort(historical_PnL)
index = int((1 - confidence) * len(historical_PnL_sorted))
VaR_hist = -historical_PnL_sorted[index]
print(f"历史模拟法 VaR (95%): {VaR_hist:.2f}")

# 3. 蒙特卡洛模拟法(模拟 10000 条路径)
n_simulations = 10000
dt = 1  # 1 天持有期
random_shocks = np.random.normal(0, sigma * np.sqrt(dt), n_simulations)
simulated_returns = mu * dt + random_shocks
simulated_PnL = simulated_returns * P
simulated_PnL_sorted = np.sort(simulated_PnL)
VaR_mc = -simulated_PnL_sorted[int((1 - confidence) * n_simulations)]
print(f"蒙特卡洛模拟法 VaR (95%): {VaR_mc:.2f}")
关键理解:参数法本质是解析解,历史模拟法是经验分位数,蒙特卡洛法是数值模拟分位数。三者的核心差异在于“如何生成损益分布”——参数法用公式生成,历史模拟法用历史数据生成,蒙特卡洛法用随机过程生成。