第十五章:曲面在VaR与压力测试中的应用

聊到风险管理,很多人的第一反应就是算VaR。嗯,这个指标确实重要。但我要说,如果你只用平值隐含波动率去算VaR,那结果基本就是自欺欺人。为什么?因为市场极端波动时,波动率曲面会彻底变形。

我个人习惯把曲面看作一个「压力传感器」。平时它很平静,一旦市场出现黑天鹅,曲面的形状变化比价格本身更敏感。今天我们就聊聊怎么用曲面来生成情景,做真正的压力测试。

15.1 为什么传统VaR不够用?

传统VaR假设收益率服从正态分布。说白了,就是觉得极端行情十年一遇。但我在项目中遇到过好几次,模型说「千年一遇」的波动,结果第二年就来了。

问题出在哪?

  • 正态分布低估尾部风险:实际金融数据的峰度远高于3
  • 忽略波动率微笑:虚值期权在极端行情下波动率飙升
  • 静态假设:传统VaR不反映波动率曲面的动态变化

核心观点:曲面VaR不是算一个数字,而是算一个「波动率场景树」。

15.2 用曲面生成情景:三步走

我建议把曲面情景生成拆成三步。你想想看,这样逻辑更清晰。

第一步:提取曲面主成分

曲面有几十个节点,但真正驱动它变化的只有几个因子。我个人习惯用PCA(主成分分析)来降维。

# Python示例:曲面PCA分解
import numpy as np
from sklearn.decomposition import PCA

# 假设曲面数据 shape = (天数, 行权价档次, 期限档次)
# 先展平为 (天数, 特征数)
surface_flat = surface_data.reshape(n_days, -1)

pca = PCA(n_components=3)
pca.fit(surface_flat)

# 三个主成分解释度通常超过95%
print(f"解释方差比: {pca.explained_variance_ratio_}")

# 主成分1:水平移动(整体波动率升降)
# 主成分2:倾斜变化(价外vs价内)
# 主成分3:曲率变化(微笑程度)

我的经验:三个主成分就够了。我曾经试过用五个,结果过拟合严重,回测效果反而更差。

第二步:生成极端情景

有了主成分,我们就可以生成「合理但极端」的情景。怎么做?对主成分得分进行蒙特卡洛模拟,但加上尾部约束。

# 生成极端情景
np.random.seed(42)
n_scenarios = 10000

# 对主成分得分进行t分布采样(尾部更厚)
from scipy.stats import t
scores = t.rvs(df=3, size=(n_scenarios, 3))

# 乘以特征值,还原到原始尺度
scaled_scores = scores * np.sqrt(pca.explained_variance_)

# 重构曲面情景
scenarios = pca.mean_ + np.dot(scaled_scores, pca.components_)
scenarios = scenarios.reshape(n_scenarios, *surface_data.shape[1:])

注意:t分布的自由度不要设太高。df=3时尾部已经够厚了,再低容易生成物理上不可能的波动率(比如负值)。

第三步:计算情景VaR

每个情景对应一个完整的波动率曲面。用这些曲面重新定价你的期权组合,然后取95%或99%分位数。

# 计算情景PnL
pnl = np.zeros(n_scenarios)
for i in range(n_scenarios):
    # 用第i个情景曲面重新定价
    new_prices = price_options(scenarios[i], strikes, maturities)
    pnl[i] = np.sum(new_prices - current_prices)

# VaR at 95%
var_95 = np.percentile(pnl, 5)
print(f"曲面VaR(95%): {var_95:.2f}")

15.3 极端市场下的波动率行为

我记得2020年3月那次市场动荡,波动率曲面出现了几个典型特征。这些特征在压力测试中必须考虑。

市场状态 曲面特征 对VaR的影响
快速下跌 虚值看跌期权波动率飙升,微笑右端上翘 尾部风险放大2-3倍
流动性枯竭 曲面出现「断层」,买卖价差急剧扩大 VaR低估实际风险
波动率集群 短期波动率远高于长期,期限结构倒挂 近月合约风险被严重低估

避坑指南:我曾经在压力测试中只用了历史波动率,结果完全没捕捉到2020年3月的曲面扭曲。后来我改成「历史+合成情景」混合法,效果好了很多。

15.4 压力测试的实战框架

下面这张图是我自己项目里用的框架。说白了,就是把曲面拆成「常态波动」和「尾部跳跃」两部分。

曲面压力测试框架 当前曲面数据 历史极端事件库 宏观经济情景 PCA分解 → 主成分扰动 → 曲面重构 (生成10000+个合理极端情景) 曲面VaR报告 (含分位数、贡献度) 压力测试矩阵 (情景×产品×损益)

15.5 几个实战技巧

嗯,这里我要分享几个踩坑换来的经验。

  1. 不要只用一个波动率数字:我见过有人用平值IV代替整个曲面,结果VaR低估了40%。曲面每个节点都有自己的脾气。
  2. 注意期限结构的一致性:短期波动率可以跳,但长期波动率不能跟着乱跳。我曾经在生成情景时忘了加期限平滑约束,结果出现了「今天波动率100%,明天就回到20%」的荒谬情景。
  3. 回测你的情景生成器:用过去10年的数据做回测。看看你生成的情景里,有多少次真的覆盖了实际发生的极端行情。我自己的标准是:覆盖率至少80%。

一个小技巧:压力测试时,可以给曲面加一个「相关性冲击」。比如同时让波动率上升和相关性上升,这种组合情景在传统VaR里根本不会出现,但现实中经常发生。

15.6 监管视角下的曲面VaR

巴塞尔协议III的FRTB(交易账户基础审查)框架,其实已经隐含了对曲面VaR的要求。它要求银行使用「可观察到的波动率微笑」来校准风险因子。说白了,监管层也知道平值波动率不够用。

我个人建议,如果你的组合涉及多个期限和行权价,直接用曲面VaR。虽然计算量大了点,但至少不会被监管打回来重做。

好了,关于曲面在VaR和压力测试中的应用,今天就聊到这。记住一句话:波动率曲面不是装饰品,它是风险管理的显微镜。

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