第十五章:曲面在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 压力测试的实战框架
下面这张图是我自己项目里用的框架。说白了,就是把曲面拆成「常态波动」和「尾部跳跃」两部分。
15.5 几个实战技巧
嗯,这里我要分享几个踩坑换来的经验。
- 不要只用一个波动率数字:我见过有人用平值IV代替整个曲面,结果VaR低估了40%。曲面每个节点都有自己的脾气。
- 注意期限结构的一致性:短期波动率可以跳,但长期波动率不能跟着乱跳。我曾经在生成情景时忘了加期限平滑约束,结果出现了「今天波动率100%,明天就回到20%」的荒谬情景。
- 回测你的情景生成器:用过去10年的数据做回测。看看你生成的情景里,有多少次真的覆盖了实际发生的极端行情。我自己的标准是:覆盖率至少80%。
一个小技巧:压力测试时,可以给曲面加一个「相关性冲击」。比如同时让波动率上升和相关性上升,这种组合情景在传统VaR里根本不会出现,但现实中经常发生。
15.6 监管视角下的曲面VaR
巴塞尔协议III的FRTB(交易账户基础审查)框架,其实已经隐含了对曲面VaR的要求。它要求银行使用「可观察到的波动率微笑」来校准风险因子。说白了,监管层也知道平值波动率不够用。
我个人建议,如果你的组合涉及多个期限和行权价,直接用曲面VaR。虽然计算量大了点,但至少不会被监管打回来重做。
好了,关于曲面在VaR和压力测试中的应用,今天就聊到这。记住一句话:波动率曲面不是装饰品,它是风险管理的显微镜。