曼德博分形第五章:现代资产组合理论(MPT)的崩溃

Read in English

为什么夏普比率、风险价值(VaR)与布莱克-斯科尔斯模型在底层分布具有分形特征时,会系统性低估灾难性下行风险。

🔊 聆听文章 (Listen to Article)

曼德博分形第五章:现代资产组合理论(MPT)的崩溃

"现代资产组合理论建立在一栋沙堡上:只要海浪保持温和,它看起来固若金汤;但金融市场的海浪从来不是温和的高斯波浪,而是分形的、偶尔具有毁灭性的巨浪。" —— 本华·曼德博

MPT 与布莱克-斯科尔斯共享的致命假设

哈里·马科维茨(Harry Markowitz)的现代资产组合理论(Modern Portfolio Theory, MPT)与费雪·布莱克(Fischer Black)、迈伦·斯科尔斯(Myron Scholes)的期权定价模型,尽管应用场景不同,却共享同一组数学假设:资产收益率服从正态分布,波动率是已知或可估计的常数,价格路径连续且不存在跳跃。

曼德博在本书前四章已用实证数据证明:真实市场收益率具有肥尾(第一章)、分形自相似结构(第二章)、长期记忆(第三章)与波动率集群(第四章)。本章将这些证据串联起来,系统性证明 MPT 与布莱克-斯科尔斯赖以生存的数学地基已经崩塌。

夏普比率的系统性失真

夏普比率(Sharpe Ratio)的经典定义为:

$$Sharpe = \frac{E[R_p] - R_f}{\sigma_p}$$

这一公式隐含了两个关键假设:收益率的均值 $E[R_p]$ 与标准差 $\sigma_p$ 都是有限且稳定可估的统计量。 但若真实收益率服从曼德博描述的柯西分布或低 $\alpha$ 值帕累托分布,其理论方差可能为无穷大,样本标准差会随样本量增加而不收敛,导致同一策略在不同回测窗口下计算出的夏普比率可以出现数倍甚至数十倍的差异。

夏普比率的样本不稳定性示意 (肥尾分布下):

计算窗口: 250 天       计算窗口: 1000 天      计算窗口: 2500 天
Sharpe = 2.8           Sharpe = 1.4            Sharpe = 0.6
(未包含极端尾部样本)    (包含1次尾部事件)        (包含2-3次尾部事件)

正态分布假设下,理论上应收敛于同一稳定值;
肥尾分布下,夏普比率随样本窗口漂移,且长期趋势通常是向下修正

VaR(风险价值)的结构性低估

风险价值(Value at Risk, VaR)是华尔街与监管机构广泛使用的风险度量指标,定义为在给定置信水平 $c$ 下,未来特定期间内的最大预期损失:

$$P(\text{Loss} > VaR_c) = 1 - c$$

在正态分布假设下,99% 置信度的 VaR 计算公式为:

$$VaR_{99\%} = \mu - 2.33\sigma$$

这一公式的核心问题在于:它只回答了"损失有 1% 的概率超过某个阈值",却完全没有告诉你,一旦超过这个阈值,损失究竟会有多大。 在肥尾分布下,超越 VaR 阈值后的损失分布本身也是肥尾的,可能是 VaR 数值的数倍。

风险度量指标 正态分布假设下的表现 肥尾分布下的实际表现
标准差 $\sigma$ 稳定收敛的风险度量 可能不收敛,随样本量漂移
夏普比率 唯一的、稳健的风险调整收益指标 样本窗口敏感,历史上限失真
VaR (99%) 精确刻画尾部风险边界 严重低估边界之外的条件损失规模
CVaR / 期望损失 (ES) 与 VaR 高度相关,冗余 唯一能捕捉肥尾条件损失均值的指标

条件风险价值(CVaR):曼德博式风险度量的正确工具

为弥补 VaR 的结构性缺陷,学界与部分领先机构采用条件风险价值(Conditional VaR, CVaR),也称期望损失(Expected Shortfall):

$$CVaR_c = E[\text{Loss} \mid \text{Loss} > VaR_c]$$

CVaR 回答的正是 VaR 回避的问题:一旦损失突破 VaR 边界,平均而言会损失多少? 在肥尾分布下,CVaR 与 VaR 之间的差距会显著大于正态分布假设下的理论差距。

import numpy as np

def compare_var_cvar(returns: np.ndarray, confidence: float = 0.99):
    """
    对比正态分布假设 VaR 与基于历史模拟的 VaR / CVaR
    :param returns: 历史收益率序列(建议使用日对数收益率)
    :param confidence: 置信水平,如 0.99 表示 99%
    """
    mu, sigma = np.mean(returns), np.std(returns)
    z_score = 2.326  # 99% 置信度对应的正态分布分位数
    normal_var = mu - z_score * sigma

    sorted_returns = np.sort(returns)
    cutoff_index = int((1 - confidence) * len(returns))
    historical_var = sorted_returns[cutoff_index]
    historical_cvar = np.mean(sorted_returns[:cutoff_index]) if cutoff_index > 0 else historical_var

    return {
        "正态假设VaR": f"{normal_var*100:.2f}%",
        "历史模拟VaR": f"{historical_var*100:.2f}%",
        "历史模拟CVaR(条件损失)": f"{historical_cvar*100:.2f}%",
        "CVaR相对正态VaR的低估幅度": f"{(historical_cvar - normal_var)*100:.2f}个百分点"
    }

# 示例:模拟一段包含肥尾冲击的收益率序列
np.random.seed(3)
normal_part = np.random.normal(0.0005, 0.01, 950)
fat_tail_shocks = np.random.normal(-0.08, 0.03, 50)  # 极端下跌样本
mixed_returns = np.concatenate([normal_part, fat_tail_shocks])
print(compare_var_cvar(mixed_returns))

可执行的操作规则

  1. 停止将夏普比率作为策略比较的唯一标准。 对任何策略同时计算索提诺比率(Sortino Ratio)与 CVaR,尤其关注策略在样本外肥尾事件中的实际条件损失规模。
  2. 将 VaR 视为风险管理的下限而非上限。 监管与内部风控报告中的 VaR 数字只应作为最低限度的资本缓冲要求,真实的压力测试预算应基于 CVaR 或历史情景模拟法设定。
  3. 对布莱克-斯科尔斯定价的深度虚值期权保持警惕。 该模型假设的对数正态分布严重低估了尾部事件概率,深度虚值看跌期权的"理论公允价"往往显著低于其真实的保险价值,裸卖此类期权收取的权利金不足以覆盖真实尾部风险。