第三节: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的两种方式:

  1. 参数法:假设收益率服从正态分布,直接算。但说实话,金融数据哪有那么乖?
  2. 历史模拟法:直接用历史数据排序,取尾部均值。我比较推荐这个。

来个代码示例:

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(条件在险价值) 最大回撤(MDD) Calmar比率 = 年化收益 / MDD 夏普比率 = 超额收益 / 总波动 索提诺比率 = 超额收益 / 下行波动 核心思想:用风险调整后的收益衡量策略质量 尾部风险 路径风险 衍生指标

这张图把咱们今天讲的内容串起来了。从风险类型出发,到核心指标,再到衍生指标,最后落到一个核心思想:别只看收益,要看风险调整后的收益

实战建议: 我个人做组合归因时,会同时看三个指标:CVaR(防尾部风险)、最大回撤(防路径风险)、索提诺比率(衡量真实风险调整能力)。三个指标都过关的策略,我才敢上实盘。

好了,这一节的内容就到这儿。记住:风险不是数字游戏,它是真金白银的教训。把CVaR、回撤和风险调整指标用好了,你的组合管理能力会上一个台阶。


公众号:蓝海资料掘金营,微信deep3321