← 返回量化与 AI 投研概念库

尾部风险:VaR 说「95% 的日子最多亏 2%」,剩下那 5% 呢

最后更新 2026-08-18
R2 · 注意风险

你看一份产品的风控页,上面写着:「95% 置信度下,单日风险价值 2%。」

你大概会这么理解:这东西一天最多亏 2%。于是你按「最多亏 2%」去安排自己的钱——该上的杠杆上了,该留的备用金没留。

然后某一天,它亏了 9%。

这不是模型算错了。恰恰相反,那句话从头到尾都是对的,只是它压根就没说过你以为它说了的那件事。这是量化风控里最贵的一次误读,贵到 2008 年整个行业为它交了一次学费。

先说人话:这个数字到底在回答什么

修防洪堤的时候,工程师会问一个问题:堤要修多高,才能挡住一百年里九十九年的水位?

算出来一个数,比如八米。堤修到八米,往后你可以说:一百年里有九十九年,水漫不过来。

现在请注意这句话里没有的部分——它完全没有说,剩下那一年水来了,会有多高。可能八米零一,也可能十二米。堤的高度只回答「多高能挡住绝大多数」,它对「挡不住的那次会怎样」一个字都没提。这两个问题是分开的,答案也毫不相干。

VaR(Value at Risk,中文常译作「在险价值」或「风险价值」)就是那道堤的高度。它把一段历史里所有的亏损从小到大排队,然后回答:站在第 95%(或者别的位置)这个刻度上的那个亏损,是多少。

它是一道门槛,不是一个上限。跨过门槛之后的世界,它从来没有描述过。

投资层:那句话完整的意思是什么

「95% 置信度下,单日 VaR 是 2%」,把它拆开,是三个必须同时讲清的东西:

一个时间窗口。 单日?十天?一个月?窗口越长,同一个组合的 VaR 越大。有人拿单日 VaR 和别人的十日 VaR 比大小,这是在比两个不同的东西。

一个概率刻度。 「95%」这个词叫置信度——说白了就是「你打算管到第几名的坏日子」。95% 是每二十个交易日里最差的那一天;99% 是每一百个交易日里最差的那一天。刻度越靠边,你管的日子越极端。

一个亏损金额。 也就是那一天亏掉的比例或者钱数。

所以那句话准确的意思是:在过去这段历史的分布下,二十天里大约有一天,你的亏损会超过 2%。至于超过之后会到哪里,本句不负责。

对你的决策意味着什么?意味着如果你按「最多亏 2%」来配仓位,你配的是那十九天的日常,把第二十天完全空着。而真正让人退出市场的,从来不是那十九天。

它的致命缺陷:门槛之外,一片空白

缺陷一:两个天差地别的组合,VaR 可以一模一样

设想两个组合,都是「二十天里有一天会跌破 2%」。

第一个组合,破线那天通常跌 2.3%,最惨一次跌了 4%。 第二个组合,破线那天大多也就 2.1%,但每隔几年会有一次跌 40%。

它们的 95% VaR 完全相同。你拿着这个数字,看不出任何区别。

这才是 VaR 最要命的地方——它对「尾巴有多长」完全不敏感。而一个投资者真正会被打死的方式,恰恰全部藏在尾巴里。用一个对尾巴不敏感的数去管理尾部风险,等于用一把只能量到八米的尺子去测深渊。

缺陷二:分散化有时候会让 VaR 变大

这一条反直觉,但很重要。

一个正常的风险度量应该有这样的性质:把两块资产放一起,总风险不应该超过各自风险之和——分散化至少不该帮倒忙。VaR 不保证这一点。在某些分布下(尤其是有跳跃、有明显尾巴的那种),组合的 VaR 会大于两部分 VaR 相加。

后果是什么?后果是你没法用 VaR 做拆分和汇总。你不能把各部门的 VaR 加起来当作全公司的 VaR,也不能靠「把 VaR 摊到各条线」来分配风险额度——这个数学上不成立。很多大机构的风险预算体系,地基就建在这个不成立的加法上。

缺陷三:同一个组合,换个算法就换个答案

VaR 不是一个算法,是一类问题。至少有三条常见路子:

历史模拟法。 直接翻过去的实际收益,排队取分位。优点是不预设分布形状,历史有多丑就多丑;缺点是历史里没发生过的事,它一辈子也算不出来。

参数法(也叫方差-协方差法)。 假设收益服从某个已知分布——最常见的就是正态分布,然后用均值和标准差直接推出分位点。快、省算力,但它继承了假设的全部毛病:正态分布的尾巴远比真实市场薄,这个问题在 正态分布与肥尾 里已经讲透,本篇不重复。

蒙特卡洛模拟。 用随机数生成大量可能的未来路径,再从模拟结果里取分位。灵活,但它的输出质量完全取决于你喂给它的分布假设和参数——这一层的机制见 蒙特卡洛检验

同一个组合,三种算法算出三个 VaR 是常态。所以当有人只给你一个 VaR 数字、不告诉你用哪种方法、用了多长的历史窗口,这个数字基本没法解读。

缺陷四:越极端的分位,越是由极少数几个点决定的

这一条是工程层面的,但杀伤力最大。

用历史模拟法算 99% VaR,需要多少数据?假设你有 250 个交易日的收益,99% 分位大约落在「第 2 到 3 差的那一天」附近。也就是说,这个数字实际上是由两三个观测值决定的。

换一段样本,那两三天变了,VaR 就跟着变。你以为自己在测量一个稳定的属性,其实是在读一个极不稳定的估计量。样本越短,这个问题越夸张——三十天的数据算 99% VaR,等于用最差的那一天当答案。

为什么它在 2008 年集体失灵

上面四条缺陷是常态存在的,平时不至于出事。真正让它变成灾难,是几件事叠在了一起。

校准窗口取自平静期。 VaR 靠历史算,而危机前的几年恰恰是波动率长期低位。用那段历史校准出来的堤,天生就矮。低波动本身不代表安全,它常常只代表尾巴还没来

相关性假设在最需要它的时候崩掉。 组合的 VaR 依赖资产之间的相关性——即「它们是不是一起动」。平时各类资产的相关性不高,模型据此判定分散效果良好、组合风险不大。危机一来,几乎所有风险资产同时下跌,相关性向 1 靠拢,分散效果消失。模型里那个让 VaR 变小的因素,在真实的坏日子里根本不存在。这层机制见 相关性

它从风险度量变成了额度指标。 这一条最隐蔽。当 VaR 被写进考核、变成「只要 VaR 不超标就可以继续加仓」的红线,聪明的做法就变成了在不抬高 VaR 的前提下把风险塞进尾巴里——比如持有那种「平时很稳、极小概率崩掉」的头寸。这类头寸在 95% 分位以内几乎看不出波动,VaR 报表一片绿,而真实的风险全堆在那道门槛外面。一个指标一旦变成目标,就会被优化,而不是被满足。

分位数以外的信息从未被报告。 说到底,如果当时的报表在 VaR 旁边同时给出「一旦破线,平均会亏多少」,很多决策不会是那样。这个补上来的数就是 ES。

ES:把「破线之后有多惨」也算出来

ES(Expected Shortfall,期望短缺,有时也叫 CVaR、条件在险价值)回答的是 VaR 拒绝回答的那个问题:在所有超过门槛的坏日子里,平均亏多少。

回到防洪堤。VaR 是堤高八米,ES 是「漫堤的那些年,水平均有十一米」。前者告诉你堤够不够,后者告诉你堤破了会怎样。这两个数放在一起,你才知道自己在面对什么。

ES 顺手修掉了缺陷一和缺陷二:两个 VaR 相同但尾巴长短不同的组合,ES 会明显区分开;而且 ES 满足「分散化不帮倒忙」的性质,可以拆分、可以汇总。危机之后,国际银行监管框架修订的方向之一,正是把交易账簿的风险度量从 VaR 转向 ES(具体条款以监管原文为准)。

代价也有:ES 是尾部若干个点的平均,比 VaR 更依赖样本、估计噪音更大。它更诚实,但也更不稳。

系统层:真实系统里,它长什么样

概念讲完,看一眼它在代码里的样子。Vibe-Trading 的组合风险 X 光模块里,尾部风险是这么算的:

def _tail_risk(port: pd.Series, levels: Sequence[float]) -> dict[str, Any]:
    out: dict[str, Any] = {}
    losses = -port.to_numpy(dtype=float)
    for level in levels:
        if len(losses) < 2:
            var = es = None
        else:
            var = float(np.quantile(losses, level))
            tail = losses[losses >= var]
            es = float(tail.mean()) if len(tail) else None
        key = f"{int(round(level * 100))}"
        out[f"var_{key}"] = _finite(var)
        out[f"expected_shortfall_{key}"] = _finite(es)
    out["method"] = "historical simulation (non-parametric)"
    return out

短短十几行,藏着四个值得停下来看的决定。

第一行就把收益翻成了亏损。 losses = -port,之后所有的分位都在亏损这条轴上取。这不是风格问题——如果你在收益轴上取 95% 分位,取到的是最好的那批日子。方向搞反是这类计算里的经典错误。

VaR 和 ES 从来不单独出现。 每一个 level 都同时吐出 var_expected_shortfall_ 两个字段,而不是提供一个「要不要顺便算 ES」的开关。渲染成给人看的摘要时也是绑在一起的:

f"- tail (historical): VaR95 {tail['var_95']:.2%}, ES95 {tail['expected_shortfall_95']:.2%}"

这是一个把教训写进结构里的做法——想只看 VaR 都做不到。上面说的那些误读,很大一部分源于报表里只有一个数。

方法被写成了字段,跟着结果一起走。 method 这一行明确标注「历史模拟(非参数)」。缺陷三说的就是这件事:一个 VaR 数字脱离了算法就没法解读,所以算法名和数字必须是同一份输出的一部分,不能靠人记。

样本长度有硬门槛。 同一份文件里定义了最短历史(当前默认三十个交易日,可配置),历史不够的标的会被剔进 skipped 名单,而不是照算不误。理由正是缺陷四:短样本的极端分位由个别观测值决定,算出来只会给人一个虚假的精确感。默认的分位档位(当前是 95% 和 99%,可通过参数改)同理——档位越靠边,对样本长度的要求越苛刻。

顺带说一句,这个模块把尾部风险和相关性、分散化比率放在同一份报告里输出,不是随手排的版:危机里让 VaR 失效的那个机制——相关性抬升、分散化蒸发——恰好就在隔壁两个字段里。分开看是三个数,一起看才是一个故事。

一个对照:也有系统压根不算 VaR

freqtrade 是另一种态度。翻遍它的优化目标目录,一个 VaR 都没有,取而代之的是一整排以回撤为核心的损失函数——最大回撤、相对回撤、分标的回撤、卡玛比率、收益与回撤的组合。它的历史统计模块里也有专门算最大回撤的函数。

这个选择是有道理的。VaR 描述的是分布,回答「典型的坏日子有多坏」;回撤描述的是路径,回答「从最高点掉下来实际掉了多深、这条真实走过的路上最难受的一段是什么样」。对于一个会被强平、会被追加保证金、会被人在半夜手动关掉的账户来说,路径比分布重要得多——分布不会让你爆仓,路径会。这条线索见 最大回撤:从数字到体感

两种度量不是替代关系。VaR/ES 管的是「一天能坏到什么程度」,回撤管的是「连着坏下去会拖多久多深」。 只看前者会低估持续性伤害,只看后者会忽略单次跳空。至于只惩罚向下波动的那一类度量,是第三个角度,见 下行风险

失效边界与常见误用

把 VaR 当成最大亏损。 这是本篇从头讲到尾的那个误读。它是门槛,不是上限。看到 VaR,第一反应应该是问「那 ES 呢」。

拿不同口径的 VaR 比大小。 窗口、置信度、算法,三样只要有一样不同,两个数就没有可比性。没标注方法的 VaR 数字,可以当它不存在。

用短样本算极端分位。 一年数据算 99% VaR,本质是在读最差的两三天。它会给出一个小数点后两位的漂亮数字,精确感完全是假的。

把风险度量当成约束条件去优化。 只要「VaR 不超标」变成通行证,就一定会有人找到那种把风险藏进尾巴的做法。风控指标只有在没人试图绕过它的时候才有效——而现实中总有人在绕。

以为换成 ES 就安全了。 ES 修的是「不告诉你破线后多惨」和「不能相加」这两个毛病,它修不了「历史里没发生过的事我算不出来」。任何靠历史算出来的尾部度量,都无法覆盖一次前所未见的冲击。

把这些数当预测。 它们全都是对已经过去那段历史的描述。市场结构在变,杠杆在变,参与者在变,昨天的尾巴形状不承诺明天。

🚧 避坑

「我们的 VaR 一直很低」不是安全的证据,有时候恰恰是危险的信号。 一个长期低波动、VaR 长期贴地的组合,可能真的很稳,也可能只是把风险全部堆在了那道门槛外面——两者在 VaR 报表上长得一模一样。区分它们要靠 ES、靠压力测试、靠看这个组合亏钱的时候是怎么亏的,而不是靠盯着那个一直很小的数字自我安慰。

小结

  • VaR 回答的是「二十天(或一百天)里最差的那一天,会亏多少」,它是一道门槛,不是亏损上限。门槛之外的世界,它一个字都没描述。
  • 四个结构性缺陷:对尾巴长短不敏感、不能相加(分散化有时反而让它变大)、换算法就换答案、极端分位由极少数观测值决定。
  • 2008 年的失灵是几件事叠加:用平静期校准出的矮堤、危机中相关性抬升让分散效果蒸发、以及它从度量变成额度后被反向优化——风险被塞进了门槛外面,报表却一片绿。
  • ES(期望短缺)补上了那个空白:破线之后平均亏多少。它对尾巴敏感、可以相加,代价是估计噪音更大。
  • 工程上的对策是把教训写进结构:VaR 与 ES 成对输出,算法名跟着数字一起走,样本不够就拒绝计算而不是照算不误。也有系统干脆不算 VaR,只盯回撤——因为分布不会让你爆仓,路径会。

一句话记住这篇:别人告诉你「最多亏这么多」的时候,真正该追问的是「万一超过了,会到哪里」——前一个数有人算,后一个数常常没人算。

本文所引源码均来自上述快照版本,是阅读代码得出的机制说明,不是运行结果;具体行为请以你手上那个版本为准。回 量化与 AI 投研概念库 看其它概念各自在说什么;本站内容为投资教育,不构成任何投资建议,边界见 免责声明

内容有错、看不懂、或想看下一篇?告诉我们 →

本文为投资教育整理,不构成任何投资建议;不荐个股/基金、不预测点位、不承诺收益。关键数据与结论请结合权威来源自行验证,并见风险免责声明