风险的度量:波动率、VaR、CVaR、最大回撤——我们到底该用哪个?
做风险预算,第一步就是回答一个灵魂拷问:风险到底是什么?
你打开任何一本量化教材,都会看到一堆风险指标——波动率、VaR、CVaR、最大回撤。新手往往一脸懵:我到底该用哪个?
说实话,我刚开始做量化那会儿也犯过难。有一次我拿着一个策略的回测报告去见老板,上面只放了波动率和最大回撤。老板看了一眼,问了一句让我至今难忘的话:“你这个策略,最坏情况下一天能亏多少?” 我答不上来。因为波动率和最大回撤,都回答不了这个问题。
所以今天,我们就来把这几个指标掰开揉碎,讲清楚它们的本质、适用场景,以及——在风险预算里,我到底该用哪个。
1. 波动率:最基础,但最不“风险”
波动率,说白了就是收益率的标准差。它衡量的是资产价格上下波动的剧烈程度。
优点很明显:计算简单,数据好拿,而且有很好的数学性质——方差可加、可分解,做优化时特别顺手。
但问题也很大。我举个例子:
- 策略A:每天稳定赚0.1%,偶尔一天亏5%
- 策略B:每天上下波动2%,但长期不赚钱
你猜哪个波动率更高?很可能是B。但哪个更危险?显然是A——因为A的那一次亏损,可能直接让你爆仓。
核心结论:波动率只告诉你“动得有多厉害”,不告诉你“会亏多少”。在风险预算里,它适合做约束条件,不适合做目标函数。
2. VaR:终于能回答“最坏情况”了
VaR(Value at Risk,在险价值)回答的就是老板那个问题:“最坏情况下,一天能亏多少?”
它的定义很简单:在给定的置信水平(比如95%)下,未来一段时间内的最大可能损失。
举个例子:95% VaR = -2%,意思是——有95%的把握,你的亏损不会超过2%。
听起来不错对吧?但我得提醒你一个坑:VaR 不告诉你那剩下的5%会发生什么。
我曾经见过一个策略,95% VaR 只有 -1.5%,看起来非常安全。结果呢?那5%的尾部里,有一次直接亏了30%。VaR 完全没捕捉到。
避坑指南:VaR 不满足“次可加性”(subadditivity),这意味着分散化投资组合的 VaR 可能比各资产 VaR 之和还大——这显然违背了“分散化降低风险”的基本常识。
3. CVaR:尾部风险的“照妖镜”
CVaR(Conditional VaR,条件在险价值),也叫 Expected Shortfall(期望损失)。它回答的是:“当最坏情况真的发生时,我平均会亏多少?”
还是刚才那个例子:95% VaR = -2%,那 CVaR 就是——在所有亏损超过2%的日子里,这些亏损的平均值。
这个指标好在哪里?它关注尾部。那些极端行情、黑天鹅事件,VaR 可能视而不见,但 CVaR 会把它算得清清楚楚。
我个人习惯在风险预算里用 CVaR 作为核心目标。为什么?因为它满足次可加性,而且对尾部风险极其敏感。你想想看,做风险预算不就是为了防范极端情况吗?
实战技巧:计算 CVaR 时,建议用历史模拟法或蒙特卡洛模拟。参数法(假设正态分布)会严重低估尾部风险——金融市场哪有那么“乖”的正态分布?
4. 最大回撤:投资者的“心理底线”
最大回撤(Maximum Drawdown),就是从净值最高点到最低点的最大跌幅。
这个指标特别直观。你跟客户说“这个策略最大回撤15%”,他马上就能理解——哦,最惨的时候亏了15%。
但我要泼一盆冷水:最大回撤是一个“事后”指标。它只能告诉你过去发生了什么,不能预测未来。而且它极度依赖样本区间——如果你选的区间刚好没遇到大熊市,最大回撤会非常好看,但这不代表策略真的安全。
我记得有一次回测一个CTA策略,三年最大回撤只有8%,看起来稳得很。结果一拉到2015年股灾期间,最大回撤直接飙到35%。这就是样本偏差的威力。
我的建议:最大回撤适合做风控红线——比如“回撤超过20%就强制止损”。但不适合做风险预算的优化目标,因为它不满足任何数学上的优良性质。
5. 到底该用哪个?一张表说清楚
| 指标 | 优点 | 缺点 | 风险预算中的角色 |
|---|---|---|---|
| 波动率 | 计算简单,数学性质好 | 不区分涨跌,忽略尾部 | 约束条件 |
| VaR | 直观,监管常用 | 不满足次可加性,忽略尾部 | 辅助参考 |
| CVaR | 关注尾部,满足次可加性 | 计算稍复杂 | 核心目标 |
| 最大回撤 | 直观,客户易理解 | 事后指标,样本依赖 | 风控红线 |
6. 代码实战:用Python计算这四个指标
光说不练假把式。我们来看看怎么用Python算这些指标。假设你有一组收益率数据:
import numpy as np
import pandas as pd
# 模拟收益率数据(1000个交易日)
np.random.seed(42)
returns = np.random.normal(0.001, 0.02, 1000)
# 1. 波动率(年化)
volatility = np.std(returns) * np.sqrt(252)
print(f"年化波动率: {volatility:.2%}")
# 2. VaR(95%置信水平,日度)
var_95 = np.percentile(returns, 5)
print(f"95% VaR (日): {var_95:.2%}")
# 3. CVaR(95%置信水平,日度)
cvar_95 = returns[returns <= var_95].mean()
print(f"95% CVaR (日): {cvar_95:.2%}")
# 4. 最大回撤
cum_returns = np.cumprod(1 + returns)
peak = np.maximum.accumulate(cum_returns)
drawdown = (cum_returns - peak) / peak
max_drawdown = drawdown.min()
print(f"最大回撤: {max_drawdown:.2%}")
输出结果:
年化波动率: 31.75%
95% VaR (日): -3.18%
95% CVaR (日): -4.52%
最大回撤: -28.34%
你看,CVaR 比 VaR 更“悲观”——它告诉你尾部平均亏损是4.52%,而不是3.18%。这多出来的1.34%,就是那些极端行情带来的真实风险。
7. 我的最终建议
做了这么多年风险预算,我的经验是:
- 核心用 CVaR:它最贴近“风险”的本质——尾部损失。
- 波动率做辅助:用来控制整体波动水平,或者做约束条件。
- VaR 做监管合规:很多机构要求报 VaR,那就报呗,但心里要有数。
- 最大回撤做风控红线:设一个硬性止损线,别让回撤失控。
嗯,说白了就是——CVaR 是将军,波动率是参谋,VaR 是外交官,最大回撤是守门员。各司其职,缺一不可。
下次有人问你“风险怎么度量”,你可以把这张表甩给他。然后说一句:“看你想防什么——防日常波动,还是防黑天鹅?”