第4章:风险价值(VaR)——你的投资组合到底能亏多少?

做资产配置,最怕什么?怕亏钱。但更怕的是——不知道会亏多少。

风险价值(Value at Risk,简称VaR)就是用来回答这个问题的。它告诉你:在给定的置信水平下,你的投资组合在未来一段时间内,最大可能损失是多少。

举个例子:你算出来日VaR是100万,置信水平95%。这意味着——明天有95%的概率,你的亏损不会超过100万。但反过来,也有5%的概率,亏损会超过100万。

嗯,这个指标在金融圈里几乎是标配。巴塞尔协议用它,银行风控用它,连很多私募大佬私下聊天也会提一嘴。我个人习惯是,做任何资产配置方案之前,先跑一遍VaR,心里有个底。

核心公式(非参数形式):
VaRα = inf{ l ∈ ℝ : P(L > l) ≤ 1-α }
其中L是损失,α是置信水平(比如95%)。

4.1 VaR的三个关键参数

要算VaR,你得先定三个东西:

  • 持有期:你关心多久?一天?一周?一个月?
  • 置信水平:你希望多保守?95%还是99%?
  • 观察窗口:用过去多少天的数据来算?

这三个参数怎么选?我建议你根据实际场景来。比如做日内交易,持有期就是1天,置信水平95%就够了。但如果是养老金这种长期资金,我建议用99%置信水平,持有期拉长到一个月甚至一个季度。

我的经验:别盲目追求高置信水平。99%的VaR看起来更安全,但需要的样本量更大,而且尾部风险其实很难准确估计。我一般先用95%做快速筛查,再用99%做压力测试。

4.2 三种主流计算方法

算VaR的方法很多,但最常用的就三种。我一个个说。

4.2.1 参数法(方差-协方差法)

这个方法假设资产收益率服从正态分布。说白了,就是假设市场是“乖孩子”,涨跌都符合钟形曲线。

公式很简单:

VaR = - (μ × T + zα × σ × √T) × P

其中:

  • μ:预期收益率(通常取0,因为短期预测不准)
  • σ:波动率(标准差)
  • zα:对应置信水平的分位数(95%对应1.645,99%对应2.326)
  • T:持有期(天数)
  • P:投资组合市值

举个例子:你有一个1000万的组合,日波动率1.5%,95%置信水平下,日VaR就是:

VaR = - (0 + 1.645 × 1.5% × √1) × 1000万 = -24.675万

也就是说,明天有95%的概率亏损不超过24.675万。

注意:参数法最大的问题是——它假设收益率是正态分布。但真实市场有肥尾效应。我遇到过好几次,明明VaR算出来只有几十万,结果一天亏了几百万。为什么?因为市场暴跌时,极端事件发生的概率远高于正态分布预测的。

4.2.2 历史模拟法

这个方法不假设任何分布。它直接用过去的数据来模拟未来。

步骤很简单:

  1. 收集过去N天的收益率数据(比如过去500天)
  2. 把这些收益率从小到大排序
  3. 找到第(1-α)×N个位置的收益率
  4. 这个收益率乘以当前市值,就是VaR

举个例子:你收集了过去500天的日收益率,排序后第25小的收益率是-2.5%(因为500×5%=25)。那么95%置信水平下的VaR就是-2.5%×1000万=-25万。

我的习惯:历史模拟法是我最常用的方法。它简单、直观,而且不需要任何假设。但要注意——历史不会简单重复。我曾经用过去3年的数据算VaR,结果2020年疫情爆发时,市场波动远超历史范围。所以,我建议至少用5年以上的数据,并且定期更新。

4.2.3 蒙特卡洛模拟法

这个方法最灵活,也最复杂。它通过随机生成大量可能的未来路径,来模拟投资组合的收益分布。

基本步骤:

  1. 设定资产价格的随机过程(比如几何布朗运动)
  2. 生成大量随机路径(比如10000条)
  3. 计算每条路径下的投资组合收益
  4. 对这些收益排序,找到对应置信水平的分位数

代码示例(Python风格):

import numpy as np

def monte_carlo_var(portfolio_value, mu, sigma, T, n_simulations=10000, alpha=0.95):
    # 生成随机收益率
    returns = np.random.normal(mu, sigma, n_simulations)
    # 计算模拟的资产价值
    simulated_values = portfolio_value * (1 + returns)
    # 计算损失
    losses = portfolio_value - simulated_values
    # 排序并找到VaR
    losses_sorted = np.sort(losses)
    var_index = int((1 - alpha) * n_simulations)
    return losses_sorted[var_index]

# 示例:1000万组合,日收益率均值0.05%,波动率1.5%
var_95 = monte_carlo_var(10000000, 0.0005, 0.015, 1)
print(f"95% VaR: {var_95:.2f}")
三种方法对比:
方法 优点 缺点 适用场景
参数法 计算快,公式简单 假设正态分布,忽略肥尾 快速估算,流动性好的资产
历史模拟法 无分布假设,直观 依赖历史数据,无法预测新事件 常规风控,数据充足的组合
蒙特卡洛法 灵活,可处理复杂结构 计算量大,依赖模型假设 衍生品定价,压力测试

4.3 避坑指南:我踩过的那些坑

做VaR这么多年,我踩过不少坑。分享几个给你:

  • 坑一:忽略相关性变化。 我刚开始做多资产组合时,用历史相关性算VaR,结果2008年金融危机时,所有资产的相关性都趋近于1,组合VaR严重低估。后来我学会了用动态相关性模型。
  • 坑二:持有期选错。 做高频交易的朋友用日VaR,结果一天内爆仓。为什么?因为他的持有期应该是分钟级,不是天级。
  • 坑三:置信水平选太高。 99.9%的VaR看起来很安全,但需要海量数据才能准确估计。我见过有人用500个数据点算99.9%的VaR,结果就是第0.5个百分位——这根本没法算。
重要提醒:VaR不是万能的。它只告诉你“大概率不会亏多少”,但无法告诉你“如果真的亏了,会亏多少”。这就是为什么我们需要补充条件VaR(CVaR)和压力测试。我一般把VaR当作第一道防线,而不是唯一防线。

4.4 知识体系总览

下面这张图,是我自己整理的知识框架。你可以看到VaR在整个风险管理体系中的位置,以及三种方法之间的关系。

风险价值(VaR)知识体系 VaR 定义 持有期 置信水平 观察窗口 参数法(正态假设) 方差-协方差法 历史模拟法 无分布假设 蒙特卡洛模拟法 随机路径生成 优点:计算快 缺点:忽略肥尾 优点:直观、无假设 缺点:依赖历史 优点:灵活、复杂 缺点:计算量大 补充:CVaR + 压力测试

这张图里,你可以看到VaR的核心定义、三个关键参数、三种计算方法,以及各自的优缺点。最下面我加了补充——CVaR和压力测试。为什么?因为VaR告诉你“大概率亏多少”,但CVaR告诉你“如果真的亏了,平均亏多少”。两者结合,才是完整的风险画像。

我的建议:刚开始学VaR,先用历史模拟法上手。它最直观,也最容易理解。等你熟悉了,再尝试蒙特卡洛法处理复杂组合。参数法嘛——我建议你谨慎使用,除非你确定你的资产收益率接近正态分布。

好了,这一章就到这里。VaR是个好工具,但别迷信它。记住:风险管理不是算出一个数字就完事了,而是理解这个数字背后的假设和局限。


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