3、风险度量基础:波动率、VaR、CVaR、最大回撤的定义与计算
风险度量是量化投资与组合管理的核心基石。本章系统讲解四种最常用的风险指标:波动率、在险价值(VaR)、条件在险价值(CVaR)以及最大回撤(Max Drawdown)。理解这些指标的定义、计算逻辑与适用场景,是后续进行风险归因与绩效分析的前提。
核心提示: 波动率衡量“不确定性”,VaR 衡量“最坏情况下的损失阈值”,CVaR 衡量“尾部损失的期望”,最大回撤衡量“历史最大亏损幅度”。四者从不同维度刻画风险,缺一不可。
3.1 波动率(Volatility)
波动率是资产收益率的标准差,反映收益率的离散程度。波动率越高,资产价格的不确定性越大。
3.1.1 定义与公式
给定一组收益率序列 \( r_1, r_2, \dots, r_n \),样本标准差公式为:
σ = sqrt( (1 / (n-1)) * Σ (r_i - μ)² )
其中 \( \mu \) 为样本均值。金融中通常将日波动率年化:
σ_annual = σ_daily * sqrt(252)
252 为一年典型交易日数。
3.1.2 计算示例(Python)
import numpy as np
returns = np.array([0.01, -0.005, 0.02, -0.01, 0.015])
daily_vol = np.std(returns, ddof=1)
annual_vol = daily_vol * np.sqrt(252)
print(f"日波动率: {daily_vol:.4f}")
print(f"年化波动率: {annual_vol:.4f}")
3.1.3 波动率锥(Volatility Cone)
不同时间窗口计算的波动率不同,形成波动率锥,用于判断当前波动率是否异常。
| 窗口长度 | 低波动率 | 中位数波动率 | 高波动率 |
|---|---|---|---|
| 10 日 | 12% | 18% | 28% |
| 30 日 | 14% | 19% | 25% |
| 60 日 | 15% | 19% | 23% |
| 120 日 | 16% | 19% | 21% |
工程注意: 波动率计算对异常值敏感,建议使用去极值或稳健统计方法。API 发布时需明确标注计算窗口与年化因子。
3.2 在险价值(VaR)
VaR 表示在给定置信水平下,一定持有期内可能的最大损失。例如,95% VaR 为 -2% 意味着有 95% 的把握损失不超过 2%。
3.2.1 三种计算方法
| 方法 | 原理 | 优点 | 缺点 |
|---|---|---|---|
| 参数法(方差-协方差) | 假设收益率服从正态分布 | 计算快,数据需求少 | 无法捕捉厚尾 |
| 历史模拟法 | 直接使用历史收益率分位数 | 无需分布假设 | 依赖历史数据长度 |
| 蒙特卡洛模拟法 | 随机生成大量路径 | 可处理复杂模型 | 计算量大 |
3.2.2 计算示例(历史模拟法)
import numpy as np
returns = np.array([-0.03, -0.01, 0.02, -0.04, 0.01, -0.02, 0.005, -0.015, 0.03, -0.025])
confidence = 0.95
var = np.percentile(returns, (1 - confidence) * 100)
print(f"95% VaR (历史模拟): {var:.4f}")
3.2.3 VaR 的局限性
- 不满足次可加性: 组合 VaR 可能大于各资产 VaR 之和,不符合分散化逻辑。
- 忽略尾部损失: VaR 只告诉阈值,不告诉超过阈值后的损失有多大。
避坑提醒: 参数法 VaR 在极端市场条件下严重低估风险。2008 年金融危机中,许多 VaR 模型失效,正是因为正态假设不成立。
3.3 条件在险价值(CVaR)
CVaR 又称期望损失(Expected Shortfall),衡量损失超过 VaR 阈值时的平均损失。它弥补了 VaR 忽略尾部风险的缺陷。
3.3.1 定义
CVaR_α = E[ L | L > VaR_α ]
其中 \( L \) 为损失,\( \alpha \) 为置信水平。CVaR 始终大于等于 VaR。
3.3.2 计算示例
import numpy as np
returns = np.array([-0.03, -0.01, 0.02, -0.04, 0.01, -0.02, 0.005, -0.015, 0.03, -0.025])
confidence = 0.95
var = np.percentile(returns, (1 - confidence) * 100)
tail_losses = returns[returns <= var]
cvar = tail_losses.mean()
print(f"95% VaR: {var:.4f}")
print(f"95% CVaR: {cvar:.4f}")
3.3.3 VaR 与 CVaR 对比
| 特性 | VaR | CVaR |
|---|---|---|
| 信息量 | 仅阈值 | 尾部平均损失 |
| 次可加性 | 不满足 | 满足 |
| 计算稳定性 | 对样本敏感 | 更稳健 |
| 监管认可 | 巴塞尔 II | 巴塞尔 III 推荐 |
3.4 最大回撤(Max Drawdown)
最大回撤衡量从历史峰值到后续谷底的最大亏损幅度,是衡量策略下行风险的重要指标。
3.4.1 定义与公式
Drawdown_t = (Peak_t - Value_t) / Peak_t
Max Drawdown = max(Drawdown_t)
其中 \( Peak_t \) 为截至时刻 \( t \) 的历史最高净值。
3.4.2 计算示例
import numpy as np
nav = np.array([100, 102, 98, 105, 103, 95, 97, 92, 100])
peak = np.maximum.accumulate(nav)
drawdown = (peak - nav) / peak
max_dd = np.max(drawdown)
print(f"最大回撤: {max_dd:.2%}")
3.4.3 最大回撤的工程意义
- 风险承受能力: 投资者必须能承受最大回撤,否则可能提前止损离场。
- 资金管理: 最大回撤决定杠杆上限与仓位规模。
- 策略评价: 结合 Calmar 比率(年化收益 / 最大回撤)综合评估。
API 设计建议: 最大回撤计算需指定回看窗口(如 1 年、3 年、全部历史)。API 应返回回撤开始日期、结束日期、恢复日期,便于用户分析回撤周期。
3.5 四种风险指标对比总结
| 指标 | 度量维度 | 对极端值敏感度 | 计算复杂度 | 适用场景 |
|---|---|---|---|---|
| 波动率 | 整体离散度 | 高 | 低 | 组合优化、风险预算 |
| VaR | 尾部阈值 | 中 | 中 | 监管报告、风险限额 |
| CVaR | 尾部期望 | 高 | 中 | 尾部风险管理、优化 |
| 最大回撤 | 历史极端亏损 | 极高 | 低 | 策略评价、资金管理 |
实践建议: 在 API 发布时,建议同时返回波动率、VaR、CVaR 和最大回撤,并支持不同置信水平(95%、99%)与不同持有期(1 日、10 日、1 月)。用户可根据自身风险偏好选择关注指标。