第三节:CVaR与回撤——风险的两副面孔
做量化风控这些年,我越来越觉得:风险不是单一维度的东西。你想想看,一个策略可能VaR值很好看,但真遇到极端行情,一天就把半年的收益吐回去。这时候,CVaR和回撤指标就派上用场了。
我个人习惯把风险拆成两副面孔:尾部风险和路径风险。CVaR管尾部,回撤管路径。今天咱们就把这两块掰开揉碎了讲清楚。
3.1 条件在险价值(CVaR)
先说CVaR。它还有个名字叫期望损失(Expected Shortfall)。什么意思呢?
VaR告诉你的是:在95%置信水平下,最大可能亏损是多少。但问题来了——如果那5%的极端情况真的发生了,到底会亏多少?VaR不回答这个问题。CVaR回答。
CVaR的定义很简单:超过VaR的那部分损失的期望值。
用公式表达:
CVaR_α = E[ L | L > VaR_α ]
其中L是损失,α是置信水平(通常取95%或99%)。
核心区别:
- VaR:最坏情况下的“门槛值”
- CVaR:跨过门槛后,平均还要亏多少
我在项目中遇到过一件事。有个同事用VaR做风控,回测时一切正常。结果2015年股灾来了,VaR显示最大亏损5%,但实际单日亏损达到了8%。为什么?因为VaR没考虑尾部风险。后来换成CVaR,同样的数据,CVaR显示的是7.2%。这才是更真实的预期损失。
计算CVaR的两种方式:
- 参数法:假设收益率服从正态分布,直接算。但说实话,金融数据哪有那么乖?
- 历史模拟法:直接用历史数据排序,取尾部均值。我比较推荐这个。
来个代码示例:
import numpy as np
def calculate_cvar(returns, confidence=0.95):
"""
计算CVaR
returns: 收益率序列
confidence: 置信水平,默认95%
"""
# 按损失排序(负收益就是损失)
sorted_returns = np.sort(returns)
# 找到VaR的分位点
var_index = int(len(sorted_returns) * (1 - confidence))
var = -sorted_returns[var_index]
# 取尾部所有损失,算均值
tail_losses = -sorted_returns[:var_index]
cvar = np.mean(tail_losses)
return var, cvar
# 举个栗子
np.random.seed(42)
returns = np.random.normal(0.001, 0.02, 1000)
var_95, cvar_95 = calculate_cvar(returns)
print(f"VaR(95%): {var_95:.4f}")
print(f"CVaR(95%): {cvar_95:.4f}")
避坑指南: 我曾经用参数法算CVaR,结果发现正态假设下CVaR和VaR的比值是固定的。但真实数据往往有厚尾,比值会大很多。所以——别偷懒,用历史模拟法或者蒙特卡洛模拟。
3.2 最大回撤与Calmar比率
说完尾部风险,咱们聊聊路径风险。
最大回撤(Maximum Drawdown, MDD)是什么?说白了就是:从净值最高点跌到最低点,你最多亏了多少。
公式:
MDD = max( 1 - 净值 / 历史最高净值 )
嗯,这里要注意:最大回撤只看“从山顶到谷底”的幅度,不管中间震荡了多少次。
为什么回撤重要?
你想想看,一个策略年化收益20%,但最大回撤40%。你敢投吗?我反正不敢。因为回撤30%需要涨43%才能回本,回撤50%需要涨100%。这就是回撤的“非对称性”——亏钱容易,赚钱难。
Calmar比率就是用来衡量收益和回撤之间关系的:
Calmar = 年化收益率 / 最大回撤
一般来说,Calmar比率大于1算及格,大于2算优秀。但要注意:这个指标对回撤特别敏感。策略运行时间短的时候,最大回撤可能还没暴露出来,Calmar比率会虚高。
我曾经踩过的坑: 有个策略回测了3个月,Calmar比率高达5,我兴冲冲地实盘了。结果第4个月遇到一次黑天鹅,最大回撤直接翻倍,Calmar比率掉到1.2。教训是:回测周期至少要覆盖一个完整的市场周期,不然Calmar比率就是骗人的。
3.3 风险调整收益指标
这部分是组合管理的核心。光看收益不行,得看“每承担一单位风险,能换来多少收益”。
夏普比率(Sharpe Ratio)
最经典的风险调整指标:
Sharpe = (策略收益率 - 无风险利率) / 收益率标准差
夏普比率衡量的是:每承担一单位总风险,能获得多少超额收益。
我个人习惯:夏普比率大于1算不错,大于2算优秀。但要注意——它把上行波动和下行波动一视同仁。你想想看,涨得多明明是好事,夏普比率却把它算成“风险”,这不合理吧?
索提诺比率(Sortino Ratio)
索提诺比率就是来修正这个问题的。它只考虑下行风险:
Sortino = (策略收益率 - 无风险利率) / 下行标准差
下行标准差只计算负收益的波动。说白了,涨得再多也不扣分,跌得狠才扣分。
两者对比:
| 指标 | 分母 | 适用场景 |
|---|---|---|
| 夏普比率 | 总波动(上行+下行) | 对称风险偏好 |
| 索提诺比率 | 下行波动 | 厌恶亏损、追求正偏 |
我的经验: 做CTA策略时,我更喜欢用索提诺比率。因为趋势跟踪策略经常有大幅回撤,但收益也是爆发式的。夏普比率会被高波动拖累,索提诺比率更能反映真实的风险调整能力。
3.4 知识体系总览
说了这么多,咱们用一张图把关系理清楚:
这张图把咱们今天讲的内容串起来了。从风险类型出发,到核心指标,再到衍生指标,最后落到一个核心思想:别只看收益,要看风险调整后的收益。
实战建议: 我个人做组合归因时,会同时看三个指标:CVaR(防尾部风险)、最大回撤(防路径风险)、索提诺比率(衡量真实风险调整能力)。三个指标都过关的策略,我才敢上实盘。
好了,这一节的内容就到这儿。记住:风险不是数字游戏,它是真金白银的教训。把CVaR、回撤和风险调整指标用好了,你的组合管理能力会上一个台阶。
公众号:蓝海资料掘金营,微信deep3321