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 发布时需明确标注计算窗口与年化因子。
波动率锥示意图 10日 30日 60日 120日 250日 高 中 低 横轴为窗口长度,纵轴为年化波动率。三条线分别代表不同分位数。

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 推荐
VaR 与 CVaR 对比示意图 VaR 阈值 尾部损失 CVaR 红色虚线为 VaR 阈值,红色阴影区域为尾部损失。蓝色虚线为 CVaR,即尾部损失的期望值。 CVaR 始终位于 VaR 左侧(损失更大的一侧)。

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 月)。用户可根据自身风险偏好选择关注指标。