3. 组合风险度量指标:定义与计算

组合风险度量是量化投资与风控的基石。本章聚焦五个核心指标:波动率、VaR、CVaR、最大回撤和跟踪误差。理解它们的定义、计算逻辑及适用场景,是后续进行人群切片与风险归因的前提。

3.1 指标概览与对比

五个指标从不同维度刻画组合风险:波动率衡量价格变动的离散程度;VaR与CVaR关注尾部损失;最大回撤反映极端下跌幅度;跟踪误差度量相对基准的偏离风险。

指标 核心含义 计算依赖 主要用途
波动率 (Volatility) 收益率的标准差,衡量价格波动幅度 历史收益率序列 风险预算、资产配置
VaR (Value at Risk) 给定置信水平下,未来特定时期的最大可能损失 收益率分布假设或历史分位数 风险限额、资本计量
CVaR (Conditional VaR) 损失超过VaR时的平均损失,即尾部损失的期望 收益率分布尾部数据 尾部风险控制、压力测试
最大回撤 (Max Drawdown) 从历史高点回落到低点的最大跌幅 净值曲线 评估极端下行风险、投资者体验
跟踪误差 (Tracking Error) 组合收益率与基准收益率之差的标准差 组合与基准收益率序列 被动投资、指数增强、绩效归因
应用提示: 在人群切片复盘中,波动率与跟踪误差常用于衡量“稳定性”,而VaR/CVaR与最大回撤则聚焦“极端损失”。建议在分析不同客群时,同时使用这五类指标,形成立体风险画像。

3.2 波动率 (Volatility)

定义: 波动率通常指收益率的标准差,反映资产或组合价格围绕均值波动的离散程度。年化波动率是业界标准。

计算公式:

# 日收益率序列 r = [r1, r2, ..., rn]
# 日波动率 (样本标准差)
sigma_daily = sqrt( (1/(n-1)) * sum((ri - mean(r))^2) )

# 年化波动率 (假设252个交易日)
sigma_annual = sigma_daily * sqrt(252)

关键点:

  • 波动率假设收益率服从正态分布,但实际金融数据常具有“尖峰厚尾”特征。
  • 年化因子需根据数据频率调整:日频用√252,周频用√52,月频用√12。
  • 在人群切片中,高波动率客群通常对应更高的换手率与交易成本。

3.3 VaR (Value at Risk)

定义: 在给定的置信水平(如95%、99%)和持有期(如1天、10天)下,组合可能遭受的最大预期损失。例如,95% VaR为-5%意味着有95%的把握,组合在下一个交易日损失不超过5%。

三种主流计算方法:

方法 原理 优点 缺点
参数法 (方差-协方差法) 假设收益率服从正态分布,利用均值与标准差计算分位数 计算简单、速度快 对厚尾分布估计不足
历史模拟法 直接使用历史收益率序列的分位数作为VaR 无需分布假设,保留真实尾部特征 依赖历史数据长度,对极端事件外推能力弱
蒙特卡洛模拟法 随机生成大量收益率路径,计算模拟分布的分位数 可处理非线性、复杂衍生品 计算量大,模型风险高

Python示例(历史模拟法):

import numpy as np

# 假设组合日收益率序列
returns = np.array([-0.02, 0.01, -0.015, 0.005, -0.03, 0.02, -0.01, 0.008, -0.025, 0.012])
confidence_level = 0.95

# 计算历史模拟VaR
var_historical = np.percentile(returns, (1 - confidence_level) * 100)
print(f"95% VaR (历史模拟): {var_historical:.4f}")
避坑指南: VaR不满足“次可加性”(Subadditivity),即组合的VaR可能大于各资产VaR之和,这违背了分散化降低风险的基本直觉。因此,在风险归因时,VaR不适合直接用于分解。此时应使用满足次可加性的CVaR。

3.4 CVaR (Conditional VaR)

定义: CVaR,又称期望损失(Expected Shortfall, ES),衡量损失超过VaR时的平均损失。它弥补了VaR无法度量尾部损失严重程度的缺陷。

计算公式:

# 给定收益率序列与置信水平
# 1. 计算VaR
var = np.percentile(returns, (1 - confidence_level) * 100)

# 2. 筛选所有小于VaR的损失(即尾部损失)
tail_losses = returns[returns <= var]

# 3. 计算尾部损失的均值
cvar = tail_losses.mean()
print(f"95% CVaR: {cvar:.4f}")

CVaR vs VaR 对比:

  • VaR 回答“最坏情况下我能亏多少(在给定概率下)?”
  • CVaR 回答“如果最坏情况发生,我平均会亏多少?”
  • CVaR满足次可加性,适合用于组合风险分解与归因。

3.5 最大回撤 (Max Drawdown)

定义: 在选定周期内,组合净值从历史最高点回落到后续最低点的最大跌幅。它直观反映了投资者可能承受的最大浮亏。

计算步骤:

  1. 计算每日净值序列的累计最大值(Rolling High)。
  2. 计算每日回撤 = (当前净值 - 累计最大值) / 累计最大值。
  3. 最大回撤 = 所有回撤中的最小值(即最大跌幅)。

Python示例:

import numpy as np

# 假设净值序列
nav = np.array([1.00, 1.05, 1.02, 0.98, 1.03, 0.95, 0.92, 0.97, 1.01])

# 计算累计最大值
rolling_max = np.maximum.accumulate(nav)

# 计算回撤
drawdown = (nav - rolling_max) / rolling_max

# 最大回撤
max_drawdown = np.min(drawdown)
print(f"最大回撤: {max_drawdown:.4f} ({max_drawdown*100:.2f}%)")
人群切片应用: 在复盘不同客群时,最大回撤常与“持有期”结合分析。例如,某高换手客群虽然年化波动率不高,但最大回撤可能因集中持仓而显著放大。此时需进一步归因到行业或风格因子。

3.6 跟踪误差 (Tracking Error)

定义: 组合收益率与基准收益率之差(即超额收益)的标准差。它衡量组合相对于基准的偏离风险。

计算公式:

# 组合收益率序列 r_p,基准收益率序列 r_b
# 超额收益序列 e = r_p - r_b
# 跟踪误差 (年化)
tracking_error = np.std(e) * np.sqrt(252)

信息比率 (Information Ratio): 跟踪误差常与信息比率配合使用,衡量单位主动风险带来的超额收益。

# 信息比率 = 年化超额收益 / 年化跟踪误差
information_ratio = (np.mean(e) * 252) / tracking_error

跟踪误差的三种典型场景:

  • 被动指数基金: 跟踪误差通常控制在0.5%以内,越低越好。
  • 指数增强基金: 跟踪误差在1%-3%之间,追求适度偏离以获取超额收益。
  • 主动管理基金: 跟踪误差可能超过5%,主动风险敞口较大。

3.7 风险度量指标关系图

下图展示了五个核心指标在风险度量体系中的位置与关联:波动率衡量整体离散度;VaR与CVaR聚焦左尾损失;最大回撤刻画极端下跌路径;跟踪误差度量相对风险。

组合风险度量指标关系图 组合风险 绝对风险 相对风险 波动率 VaR CVaR 最大回撤 跟踪误差 说明: VaR与CVaR聚焦左尾损失; 最大回撤刻画极端下跌路径。

3.8 指标选择与人群切片应用建议

在实际的人群切片复盘项目中,建议按以下逻辑组合使用上述指标:

分析目标 推荐指标组合 典型应用场景
整体风险水平评估 波动率 + 最大回撤 对比不同客群的持仓稳定性与极端下跌风险
尾部风险暴露 VaR + CVaR 识别高杠杆或集中持仓客群的潜在爆仓风险
主动管理能力评价 跟踪误差 + 信息比率 评估基金经理或策略团队的主动管理效率
风险预算与归因 CVaR + 波动率 将组合风险分解到行业、风格或个股层面
实战要点: 在人群切片复盘中,不要孤立地看单一指标。例如,低波动率+高最大回撤的组合,往往暗示着“慢涨急跌”的风险结构,常见于流动性较差的资产或策略。此时应进一步结合持仓集中度与换手率进行归因。