06 - 市场风险
06 - 市场风险
定位:给有10年金融经验的架构师/PM讲清楚"市场风险怎么量化、怎么建模、怎么落地" 目标:理解VaR三大方法论、ES/CVaR、波动率建模(GARCH)、极值理论(EVT)、压力测试 前提:你知道什么是收益率、标准差、正态分布,但不需要精通随机过程
一、核心概念与直觉
1.1 三大风险的定位
金融机构面临三大核心风险,它们的本质完全不同:
| 风险类型 | 核心问题 | 时间尺度 | 典型例子 |
|---|---|---|---|
| 市场风险 | 市场价格变动导致我亏多少? | 短期(天/周) | 股市暴跌、利率飙升、汇率剧变 |
| 信用风险 | 对方还不了钱我亏多少? | 中长期(月/年) | 借款人违约、债券违约 |
| 操作风险 | 内部失误/外部事件导致亏多少? | 任意 | 系统故障、人为操作错误、欺诈 |
市场风险的核心特征:
- 风险来源是价格波动——股价、利率、汇率、商品价格
- 影响是即时的——今天收盘价就能算出今天亏了多少
- 是双向的——价格上涨或下跌都可能带来损失(取决于你持有多头还是空头)
1.2 核心问题:未来可能亏多少?
这是市场风险管理的终极问题。VaR(Value at Risk)就是回答这个问题的核心工具。
用天气预报做类比:
天气预报说:
"95%的概率,明天降雨量不会超过50mm"
VaR说:
"95%的概率,明天投资组合的损失不会超过100万"
两者都在说:
"在某个概率下,坏事不会坏到什么程度"
注意两者也有同样的缺陷:
天气预报不告诉你"如果超过50mm,会下多大"
VaR不告诉你"如果超过100万,会亏多少"
→ 这就是ES/CVaR要回答的问题
1.3 市场风险在架构设计中的影响
| 你要设计的系统 | 需要理解的市场风险概念 |
|---|---|
| 交易限额系统 | VaR计算、实时风险限额监控 |
| 投组风控系统 | 协方差矩阵、组合VaR |
| 衍生品估值系统 | 波动率曲面、Greeks |
| 压力测试系统 | 情景生成、重估值引擎 |
| 风险报告系统 | 日报/周报/月报的自动化生成 |
| 资本计量系统 | Basel内部模型法、ES替代VaR |
二、VaR(Value at Risk)方法论
2.1 VaR的精确定义
定义:在给定的置信水平α和持有期T内,投资组合可能遭受的最大损失。
数学表达:
P(Loss ≤ VaR_α) = α
即:损失小于或等于VaR的概率为α
三要素:
- 置信水平α:通常95%或99%
- 持有期T:通常1天或10天
- VaR金额:一个具体的数字
例子:
1天95% VaR = 100万
含义:
在正常市场条件下,未来1天内
有95%的概率,损失不会超过100万
换个说法:
有5%的概率,损失会超过100万
即平均每20个交易日,有1天损失可能超过100万
关键提醒:VaR说的是"不会超过"的上限,不是"一定会亏"。实际损失可能是0,可能是赚钱的,也可能是亏100万,也可能是亏500万(但VaR不关心亏500万这件事——ES才关心)。
2.2 参数法(方差-协方差法)
核心假设
假设投资组合收益率服从正态分布。
正态分布的好处是:只需要两个参数(均值μ和标准差σ)就能完全描述分布。
单资产VaR公式
VaR_α = z_α × σ × √T × Position
其中:
z_α = 标准正态分布的α分位数
z_95% = 1.645 (95%置信水平)
z_99% = 2.326 (99%置信水平)
σ = 日收益率的标准差(日波动率)
√T = 时间缩放因子(平方根法则)
Position = 头寸市值
直觉解释:
VaR = "几个标准差" × "波动率" × "时间调整" × "头寸大小"
单资产完整计算示例
已知:
持有某股票 1000万
日收益率标准差 σ = 2%
求1天95% VaR
计算:
VaR = 1.645 × 0.02 × √1 × 10,000,000
= 1.645 × 0.02 × 10,000,000
= 329,000
解读:
在正常市场条件下
95%的概率明天亏损不超过 32.9万
如果求10天99% VaR:
VaR = 2.326 × 0.02 × √10 × 10,000,000
= 2.326 × 0.02 × 3.162 × 10,000,000
= 1,470,835
解读:
99%的概率未来10天亏损不超过 147.1万
多资产组合VaR
当投资组合有多个资产时,需要考虑资产间的相关性。
VaR_portfolio = z_α × √(w'Σw) × Portfolio_Value
其中:
w = 权重向量(每个资产占总组合的比例)
Σ = 协方差矩阵(N×N矩阵,描述N个资产间的协方差)
w' = w的转置
√(w'Σw) = 组合波动率(考虑了所有资产的相关性)
协方差矩阵示例(2个资产):
假设:
资产A: 权重60%, 日波动率2%
资产B: 权重40%, 日波动率3%
A和B的相关系数 ρ = 0.5
协方差矩阵 Σ:
Σ = [σ_A² ρ·σ_A·σ_B] = [0.0004 0.0003]
[ρ·σ_A·σ_B σ_B² ] [0.0003 0.0009]
w = [0.6, 0.4]
w'Σw = 0.6² × 0.0004 + 2 × 0.6 × 0.4 × 0.0003 + 0.4² × 0.0009
= 0.000144 + 0.000144 + 0.000144
= 0.000432
组合波动率 = √0.000432 = 2.078%
组合VaR(1天95%) = 1.645 × 0.02078 × 10,000,000 = 341,831
对比:
如果不考虑分散化,简单加总VaR = 0.6×329,000 + 0.4×493,500 = 394,800
考虑分散化后VaR = 341,831
分散化效应 = 394,800 - 341,831 = 52,969(节省了约13%)
关键洞察:资产相关性越低,分散化效应越大。如果ρ=1(完全正相关),组合VaR等于各资产VaR之和。如果ρ=-1(完全负相关),VaR可以降到0。这就是分散投资的数学基础。
参数法的优缺点
| 维度 | 评价 |
|---|---|
| 优点 | 计算简单快速——只需要均值、方差和协方差 |
| 优点 | 可解释性强——VaR有封闭解 |
| 优点 | 适合大规模组合——只要有协方差矩阵 |
| 缺点 | 正态假设在尾部失效——实际收益率有肥尾 |
| 缺点 | 低估极端损失——3σ事件的实际概率远高于正态分布预测 |
| 缺点 | 不能处理非线性产品(如期权) |
2.3 历史模拟法
核心思想
不做任何分布假设,直接用过去N天的实际收益率来模拟可能的损失。
步骤:
1. 收集过去N天(如500天)的收益率序列:r_1, r_2, ..., r_500
2. 用每天的收益率重新估值当前组合:
PnL_i = Portfolio × r_i (第i天情景下的盈亏)
3. 将500个PnL从小到大排序
4. 取第α%分位数作为VaR
例如95% VaR,500个样本:
排序后取第25个最差的值(500 × 5% = 25)
这个值就是VaR
完整计算示例
假设持有1000万的股票指数,用过去10天收益率模拟:
日期 收益率 PnL (万)
Day 1 +1.2% +12.0
Day 2 -0.8% -8.0
Day 3 +0.5% +5.0
Day 4 -2.1% -21.0 ← 第2差
Day 5 +0.3% +3.0
Day 6 -1.5% -15.0 ← 第3差
Day 7 +0.9% +9.0
Day 8 -3.0% -30.0 ← 最差
Day 9 +0.1% +1.0
Day 10 -0.2% -2.0
排序(从最差到最好):
-30.0, -21.0, -15.0, -8.0, -2.0, +1.0, +3.0, +5.0, +9.0, +12.0
10天样本,90% VaR = 第1个最差值 = 30万
(10 × 10% = 1,取第1个)
实际中通常用500-1000天数据,这里简化演示
加权历史模拟法
标准历史模拟法假设"过去每天的权重相同",但直觉告诉我们近期数据更有参考价值。
加权方法:
w_i = λ^(N-i) × (1-λ) / (1-λ^N)
λ = 衰减因子(0 < λ < 1)
通常 λ = 0.97 ~ 0.99
效果:
λ = 0.97 时:
昨天的权重 ≈ 今天 × 0.97
10天前的权重 ≈ 今天 × 0.97^10 ≈ 今天 × 0.74
100天前的权重 ≈ 今天 × 0.97^100 ≈ 今天 × 0.048
好处:
近期市场发生了剧烈波动 → 加权后VaR会迅速上升
标准方法则要等好几个月才能反映
历史模拟法的优缺点
| 维度 | 评价 |
|---|---|
| 优点 | 无分布假设——不管是肥尾还是偏态,历史数据本身就包含了这些特征 |
| 优点 | 能捕捉非线性关系——期权等复杂产品可以直接重估值 |
| 优点 | 直觉简单——"过去发生过,未来可能再发生" |
| 缺点 | 依赖历史数据长度——500天样本只有25个5%分位数的数据点 |
| 缺点 | 隐含假设"历史会重演"——如果极端事件没有在历史窗口中出现,VaR就低估了 |
| 缺点 | 数据窗口影响大——包含2008年则VaR偏高,不包含则偏低 |
| 缺点 | 尾部估计不稳定——极端分位数的估计波动很大 |
2.4 蒙特卡洛模拟法
核心思想
通过随机模拟大量可能的未来价格路径,计算每条路径下的盈亏,从而构建损失分布。
步骤:
1. 假设资产价格遵循某个随机过程(如几何布朗运动)
2. 生成N条随机路径(如10,000条)
3. 计算每条路径末端的组合价值
4. 与当前价值对比得到N个PnL
5. 从N个PnL中取VaR
几何布朗运动(GBM)
最常用的资产价格模型,假设价格变化的对数收益率服从正态分布:
连续形式:
dS = μ·S·dt + σ·S·dW
S = 当前价格
μ = 漂移率(期望收益率)
σ = 波动率
dW = 维纳过程增量(标准正态 × √dt)
离散模拟(用于编程):
S_{t+Δt} = S_t × exp((μ - σ²/2)·Δt + σ·√Δt·Z)
Z ~ N(0,1) 标准正态随机数
Δt = 时间步长(如1/252表示1个交易日)
代码示意(TypeScript风格伪代码)
/**
* 蒙特卡洛VaR模拟
*/
function monteCarloVaR(params: {
currentPrice: number;
position: number; // 持有数量
mu: number; // 年化漂移率
sigma: number; // 年化波动率
days: number; // 持有期(天)
numSimulations: number; // 模拟次数
confidenceLevel: number;// 置信水平
}): number {
const { currentPrice, position, mu, sigma, days, numSimulations, confidenceLevel } = params;
const dt = days / 252; // 年化时间步长
const pnlArray: number[] = [];
for (let i = 0; i < numSimulations; i++) {
// 生成标准正态随机数
const z = generateStandardNormal();
// GBM模拟终端价格
const simulatedPrice = currentPrice * Math.exp(
(mu - sigma * sigma / 2) * dt + sigma * Math.sqrt(dt) * z
);
// 计算盈亏
const pnl = (simulatedPrice - currentPrice) * position;
pnlArray.push(pnl);
}
// 排序取分位数
pnlArray.sort((a, b) => a - b);
const varIndex = Math.floor(numSimulations * (1 - confidenceLevel));
return -pnlArray[varIndex]; // 返回正数表示损失
}
// 使用示例
const var95 = monteCarloVaR({
currentPrice: 100,
position: 100000,
mu: 0.08, // 8%年化收益
sigma: 0.20, // 20%年化波动率
days: 1,
numSimulations: 100000,
confidenceLevel: 0.95
});
// var95 ≈ 20.7万(与参数法结果接近:1.645 × 0.20/√252 × 100 × 100000 ≈ 20.7万)
蒙特卡洛法的优缺点
| 维度 | 评价 |
|---|---|
| 优点 | 能处理任意复杂的产品——期权、结构化产品、路径依赖产品 |
| 优点 | 能使用任意分布——不局限于正态分布 |
| 优点 | 能模拟多步路径——路径依赖产品需要 |
| 缺点 | 计算量大——10000次模拟 × 每次重估值所有资产 |
| 缺点 | 精度依赖模拟次数——模拟次数翻4倍,精度才翻1倍(√N收敛) |
| 缺点 | 依赖模型假设——GBM假设不一定正确 |
三种方法对比总结
简单度 计算速度 尾部捕捉 非线性产品 分布假设
参数法 ★★★★★ ★★★★★ ★★☆☆☆ ★☆☆☆☆ 需要(正态)
历史模拟 ★★★★☆ ★★★★☆ ★★★★☆ ★★★★☆ 不需要
蒙特卡洛 ★★☆☆☆ ★★☆☆☆ ★★★★☆ ★★★★★ 需要(可选任意)
实际使用:
银行日常风控报告 → 参数法(快)
监管资本计量 → 历史模拟法(合规要求)
衍生品组合 → 蒙特卡洛(必须)
最佳实践 → 多种方法并行,交叉验证
2.5 ES(Expected Shortfall) / CVaR(Conditional VaR)
VaR的致命缺陷
VaR有一个致命问题:它不告诉你"如果超过VaR会亏多少"。
两个投资组合可能有相同的VaR,但尾部风险完全不同:
组合A(正态分布):
95% VaR = 100万
超过VaR后的损失:101万, 105万, 110万(尾部集中)
组合B(肥尾分布):
95% VaR = 100万 ← 一样!
超过VaR后的损失:150万, 300万, 1000万(尾部发散)
VaR说两个组合"风险一样"——这显然是错的
ES的定义
ES_α = E[Loss | Loss > VaR_α]
即:在损失超过VaR的条件下,损失的期望值(平均值)
直觉:
VaR问:"最坏的5%情况的门槛在哪里?"
ES问:"最坏的5%情况平均有多坏?"
ES的计算
方法一:参数法(正态分布下)
ES_α = σ × φ(z_α) / (1 - α)
其中 φ 是标准正态密度函数
z_95% = 1.645, φ(1.645) = 0.1031
ES_95% = σ × 0.1031 / 0.05 = σ × 2.063
对比:VaR_95% = σ × 1.645
所以在正态分布下,ES_95% / VaR_95% = 2.063 / 1.645 ≈ 1.25
→ ES比VaR大约25%
方法二:历史模拟法
将VaR以下的所有损失取平均值
例如500天数据,5%分位 = 25天
ES = 这25天损失的平均值
方法三:蒙特卡洛
取所有超过VaR的模拟结果的平均值
数值示例
沿用历史模拟法的例子(10天数据,简化演示):
排序后PnL(万):
-30.0, -21.0, -15.0, -8.0, -2.0, +1.0, +3.0, +5.0, +9.0, +12.0
90% VaR(10%分位)= 第1个 = 30.0万
ES = -30.0 万(只有1个数据点在尾部,所以ES = VaR = 30万)
如果用20天数据,80% VaR对应第4差的值:
假设最差4个PnL为:-30, -21, -15, -12
VaR = 12万
ES = (30 + 21 + 15 + 12) / 4 = 19.5万
→ ES(19.5万) > VaR(12万)
一致性风险度量的四个公理
ES是一致性风险度量(Coherent Risk Measure),VaR不是。
一个好的风险度量应该满足四个公理:
1. 单调性(Monotonicity)
如果A的损失在任何情况下都≤B → ρ(A) ≤ ρ(B)
"更安全的东西,风险度量应该更小"
2. 正齐次性(Positive Homogeneity)
ρ(λX) = λ·ρ(X),λ>0
"头寸翻倍,风险翻倍"
3. 平移不变性(Translation Invariance)
ρ(X + c) = ρ(X) - c
"加入无风险资产c,风险减少c"
4. 次可加性(Subadditivity) ← 关键!
ρ(A+B) ≤ ρ(A) + ρ(B)
"组合的风险 ≤ 各部分风险之和"
→ 分散投资不应该增加风险
VaR违反第4条(次可加性)!
可以构造出 VaR(A+B) > VaR(A) + VaR(B) 的例子
这意味着VaR可能得出"分散投资增加风险"的荒谬结论
ES满足所有四条 → 所以Basel III要求用ES替代VaR
Basel III的转变
Basel II → VaR(99%,10天)
问题:低估尾部风险,2008危机暴露
Basel III / FRTB → ES(97.5%,可变持有期)
改进:
1. 用ES替代VaR → 捕捉尾部风险
2. 97.5% ES ≈ 99% VaR(在正态分布下大致对应)
3. 引入可变持有期 → 流动性差的资产用更长持有期
4. 引入Default Risk Charge(DRC) → 单独处理信用违约风险
三、波动率建模
3.1 为什么要建模波动率?
VaR的核心输入是波动率σ。波动率估计得准不准,直接决定VaR准不准。
但波动率不是常数——它随时间变化:
- 平时波动率10%
- 2008年金融危机时波动率飙到80%
- 2020年3月新冠恐慌时VIX从15飙到82
波动率的三个典型特征:
- 聚集性(Clustering):大波动后面跟大波动,小波动后面跟小波动
- 均值回归:极端波动率最终会回到长期均值
- 非对称性(杠杆效应):下跌时波动率上升更快(因为恐慌>贪婪)
3.2 历史波动率
最简单的方法:直接计算历史收益率的标准差。
给定N天收益率序列 r_1, r_2, ..., r_N
σ = √(1/(N-1) × Σ(r_i - r̄)²)
其中 r̄ = Σr_i / N(均值,通常假设为0简化计算)
年化:σ_annual = σ_daily × √252
例:
过去20天日收益率:+0.5%, -0.3%, +1.2%, -0.8%, ...
计算标准差 = 0.8%(日)
年化波动率 = 0.8% × √252 = 12.7%
缺陷:所有历史数据等权重。10天前的暴跌和昨天的暴跌被同等对待。但直觉告诉我们:昨天的暴跌对预测明天波动率更重要。
3.3 EWMA(指数加权移动平均)
公式
σ²_t = λ·σ²_{t-1} + (1-λ)·r²_{t-1}
其中:
σ²_t = 今天的波动率估计(方差)
σ²_{t-1} = 昨天的波动率估计
r²_{t-1} = 昨天的收益率平方(代理实际波动)
λ = 衰减因子,RiskMetrics推荐 λ = 0.94
直觉解释
今天的波动率 = 94%的"昨天的波动率估计" + 6%的"昨天实际的波动"
→ 如果昨天没什么大事(r小),波动率缓慢衰减
→ 如果昨天暴跌(r大),波动率急剧上升
→ 自动实现了"近期数据权重更高"
展开递推看权重衰减
展开递推:
σ²_t = (1-λ)·r²_{t-1} + λ·(1-λ)·r²_{t-2} + λ²·(1-λ)·r²_{t-3} + ...
第k天前的权重 = (1-λ)·λ^(k-1)
λ = 0.94 时:
昨天(k=1): 权重 = 6.00%
2天前(k=2): 权重 = 5.64%
5天前(k=5): 权重 = 4.69%
10天前(k=10): 权重 = 3.47%
20天前(k=20): 权重 = 1.90%
50天前(k=50): 权重 = 0.29%
等效窗口长度 ≈ 1/(1-λ) = 1/0.06 ≈ 17天
→ 大约等价于用17天的历史波动率,但近期权重更高
EWMA vs 历史波动率
简单历史波动率 EWMA(λ=0.94)
等效窗口 你设定的N天 ≈17天(但是加权的)
反应速度 慢(需要等旧数据退出窗口) 快(昨天暴跌今天就反映)
实现复杂度 简单 同样简单(递推公式)
存储 需要N天数据 只需要σ²_{t-1}一个值
参数 窗口长度N 衰减因子λ
3.4 GARCH(1,1)模型
动机
EWMA是GARCH的特例。GARCH增加了一个重要特性:长期均值回归。
EWMA的问题:波动率只会衰减或上升,没有一个"锚"。GARCH引入了常数项ω,使波动率在长期会回到一个稳定水平。
公式
GARCH(1,1):
σ²_t = ω + α·r²_{t-1} + β·σ²_{t-1}
其中:
ω = 常数项(决定长期波动率水平)
α = ARCH项系数(昨天实际波动的反应程度)
β = GARCH项系数(昨天波动率估计的持续程度)
约束条件:
α ≥ 0, β ≥ 0, ω > 0
α + β < 1 ← 保证平稳性(波动率不会爆炸到无穷)
长期波动率(无条件方差):
σ²_long = ω / (1 - α - β)
推导:在稳态下 σ²_t = σ²_{t-1} = σ²_long
σ²_long = ω + α·E[r²] + β·σ²_long
因为 E[r²] ≈ σ²_long
σ²_long = ω + (α + β)·σ²_long
σ²_long × (1 - α - β) = ω
σ²_long = ω / (1 - α - β)
EWMA是GARCH的特例
令 ω = 0, α = 1-λ, β = λ
GARCH: σ²_t = 0 + (1-λ)·r²_{t-1} + λ·σ²_{t-1}
= λ·σ²_{t-1} + (1-λ)·r²_{t-1}
= EWMA公式
所以EWMA就是 ω=0 的GARCH
→ 没有长期均值(α+β=1,"单位根")
→ 波动率冲击永远不会消退
计算示例
假设 GARCH(1,1) 参数估计结果:
ω = 0.000002
α = 0.08
β = 0.91
验证平稳性:α + β = 0.99 < 1 ✓
长期波动率:
σ²_long = 0.000002 / (1 - 0.99) = 0.0002
σ_long = √0.0002 = 0.01414 = 1.414%(日)
年化 = 1.414% × √252 = 22.4%
假设昨天 r_{t-1} = -3%(暴跌),σ_{t-1} = 1.5%
今天波动率:
σ²_t = 0.000002 + 0.08 × (-0.03)² + 0.91 × (0.015)²
= 0.000002 + 0.08 × 0.0009 + 0.91 × 0.000225
= 0.000002 + 0.000072 + 0.000205
= 0.000279
σ_t = √0.000279 = 1.67%
对比昨天的1.5% → 今天升到1.67%(因为昨天暴跌了)
如果接下来几天市场平稳(r ≈ 0):
σ² 会慢慢从0.000279衰减回长期值0.0002
半衰期 ≈ ln(2) / ln(1/(α+β)) = ln(2) / ln(1/0.99) ≈ 69天
→ 大约69个交易日波动率回到一半
波动率聚集(Volatility Clustering)
GARCH为什么能捕捉波动率聚集?
当昨天有大波动(|r_{t-1}|大):
α·r²_{t-1} 变大 → σ²_t 变大 → 预测今天波动率也高
当昨天很平静(|r_{t-1}|小):
α·r²_{t-1} 很小 → σ²_t 主要由 β·σ²_{t-1} 决定
如果之前波动率就低,今天预测也低
→ "大波动后面跟大波动"自然出现
这是金融市场的经典实证发现(Mandelbrot 1963)
GARCH族扩展
标准GARCH的缺陷:α·r² 对正收益和负收益的反应相同
但实际中:下跌对波动率的冲击 > 上涨对波动率的冲击(杠杆效应)
EGARCH(指数GARCH):
ln(σ²_t) = ω + α·(|z_{t-1}| - E|z|) + γ·z_{t-1} + β·ln(σ²_{t-1})
γ < 0 → 负收益(z<0)时波动率上升更多
优点:无需约束参数为正(因为取了对数)
GJR-GARCH(门限GARCH):
σ²_t = ω + (α + γ·I_{r<0})·r²_{t-1} + β·σ²_{t-1}
I_{r<0} = 指示函数,r<0时为1
γ > 0 → 负收益时额外增加 γ·r² 的波动率
→ 直观简单,应用最广
TGARCH:
类似GJR-GARCH但建模的是σ而非σ²
参数估计:最大似然估计(MLE)
给定收益率序列 r_1, r_2, ..., r_T
在正态分布假设下:
对数似然函数:
L = -T/2 × ln(2π) - 1/2 × Σ[ln(σ²_t) + r²_t/σ²_t]
其中 σ²_t 由GARCH递推式计算
最大化L → 得到ω, α, β的最优估计
实际中用数值优化(L-BFGS等)求解
通常用统计软件(Python的arch包/R的rugarch包)
3.5 隐含波动率
概念
历史波动率和GARCH都是"向后看"(用历史数据)。隐含波动率是"向前看"——从期权价格反推市场对未来波动率的预期。
Black-Scholes期权定价公式:
C = S·N(d₁) - K·e^(-rT)·N(d₂)
d₁ = [ln(S/K) + (r + σ²/2)·T] / (σ·√T)
d₂ = d₁ - σ·√T
在这个公式中:
S(股价)、K(行权价)、r(无风险利率)、T(到期时间) 都是已知的
C(期权价格) 也是市场可观测的
唯一未知的就是 σ(波动率)
从C反解σ → 这个σ就是隐含波动率(Implied Volatility, IV)
→ 只能数值求解(牛顿法)
波动率微笑(Volatility Smile)
如果Black-Scholes的正态分布假设是对的:
所有行权价K对应的IV应该相同
但实际上:
IV
|
| \ /
| \ /
| \ /
| \________/
|
+──────────────────── K/S
OTM Put ATM OTM Call
→ 深度虚值期权的IV更高
→ 形成"微笑"形状(股票市场更像"偏斜"——左边更高)
原因:
市场认为极端下跌的概率 > 正态分布的预测
→ 深度OTM Put的IV更高(保险需求大)
→ 反映了真实世界的肥尾特征
波动率曲面
把不同行权价K和不同到期日T的IV画在三维图上:
IV
↑
| ╱‾‾‾‾╲
| ╱ ╲
| ╱ ╲
|╱__________╲___→ K
╱
T
→ 这就是波动率曲面(Volatility Surface)
→ 是衍生品定价和风控的核心输入
→ 需要每天更新(从期权市场数据构建)
四、极值理论(EVT)
4.1 为什么需要EVT?
正态分布严重低估尾部风险。
事件类型 正态分布预测概率 实际发生频率
───────────────────────────────────────────────
3σ事件(日跌3%) 0.27% 每月约1次
4σ事件(日跌4%) 0.006% 每年约2-3次
5σ事件(日跌5%) 0.00006% 实际每几年1次
6σ事件(日跌6%) 0.0000002% 不该发生...
───────────────────────────────────────────────
2008年金融危机中:
2008年10月15日,标普跌9% ≈ 7σ事件
在正态分布下概率 ≈ 10^(-12)
相当于宇宙年龄也不该发生一次
1987年黑色星期一:
单日跌22% ≈ 25σ事件
正态分布下概率 ≈ 10^(-135)
→ 正态分布在尾部完全失效
"正态分布是骗人的。它让你以为灾难几乎不可能发生。"
— Nassim Taleb
EVT(极值理论) 的目标:用专门描述极端事件的数学工具来建模尾部,取代正态分布的尾部。
4.2 广义帕累托分布(GPD)与POT方法
POT(Peaks Over Threshold)方法
核心思想:
不建模整个分布——只建模超过某个阈值u的极端损失
数学基础(Pickands-Balkema-de Haan定理):
对于一大类分布,超过阈值u的超额部分X-u的条件分布
当u足够大时,近似服从广义帕累托分布(GPD)
GPD的CDF:
G_ξ,β(x) = 1 - (1 + ξx/β)^(-1/ξ) 当 ξ ≠ 0
= 1 - exp(-x/β) 当 ξ = 0
参数:
ξ(形状参数/尾部指数):
ξ > 0 → 肥尾分布(Pareto型,尾部衰减慢,如金融数据)
ξ = 0 → 指数分布(轻尾,如正态分布的尾部)
ξ < 0 → 有界尾部(如均匀分布,有上界)
β(尺度参数):
控制分布的"宽度"
阈值u的选择
阈值u的选择是POT方法最关键也最主观的步骤
选太低:非极端数据混入,GPD拟合不好
选太高:数据太少,估计不精确
方法一:Mean Excess Plot(均值超额图)
Mean Excess Function: e(u) = E[X - u | X > u]
对于GPD分布:e(u) = (β + ξu) / (1 - ξ)
→ e(u)是u的线性函数!
做法:
1. 对不同的u值,计算超过u的样本的平均超额
2. 画 e(u) vs u
3. 找到图形开始呈线性的点 → 那就是合适的u
e(u)
| /
| / ← 线性区域:GPD成立
| /
| /
|/_____ ← 非线性:u太小
+────────── u
↑选这里
方法二:经验法则
通常取样本的90%-95%分位数作为阈值
例如1000天数据,取第50-100个最大损失作为极端值
GPD参数估计与VaR/ES计算
假设GPD参数估计结果:ξ = 0.3, β = 0.01, 阈值u = 2%
超过阈值的样本比例 p_u = 50/1000 = 5%
VaR_α = u + β/ξ × [(n/k × (1-α))^(-ξ) - 1]
其中:n = 总样本数, k = 超过阈值的样本数
ES_α = VaR_α/(1-ξ) + (β - ξ·u)/(1-ξ)
ξ > 0(肥尾)时的关键影响:
ξ越大 → 尾部越厚 → VaR和ES越大
当ξ ≥ 0.5时,方差不存在(极端肥尾)
当ξ ≥ 1时,均值不存在(超级肥尾)
4.3 GEV(广义极值分布)与块极大值方法
Block Maxima方法
核心思想:
把数据分成若干"块"(如每月一块)
取每块中的最大值(极端值)
这些极大值的分布近似GEV
Fisher-Tippett-Gnedenko定理:
块极大值在适当标准化后收敛到GEV分布
GEV的CDF:
H_ξ(x) = exp(-(1 + ξ·(x-μ)/σ)^(-1/ξ))
三个家族:
ξ = 0 → Gumbel分布(轻尾,如正态分布的极值)
ξ > 0 → Fréchet分布(肥尾,如金融收益率的极值)
ξ < 0 → Weibull分布(有界尾部)
POT vs Block Maxima
POT(GPD) Block Maxima(GEV)
数据使用 所有超过阈值的数据 每块只用1个极大值
数据效率 高(用更多极端数据) 低(丢弃大量数据)
主观选择 阈值u的选择 块大小的选择
理论基础 条件超额分布→GPD 块极大值分布→GEV
实际推荐 更常用(数据效率高) 在极端值很稀少时使用
4.4 Copula(连接函数)
问题:多资产的联合尾部依赖
单个资产的尾部风险用EVT处理
但投资组合有多个资产——它们的极端事件是否同时发生?
2008年:几乎所有资产类别同时暴跌("所有相关性趋向于1")
正常时期:资产相关性可能只有0.3
危机时期:相关性飙升到0.8+
→ 需要建模"联合尾部依赖"
→ Copula是解决这个问题的工具
Copula的核心思想
Sklar定理(Copula理论基石):
任意多元联合分布F(x₁, x₂, ..., x_n)都可以分解为:
F(x₁, ..., x_n) = C(F₁(x₁), ..., F_n(x_n))
其中:
F_i(x_i) = 第i个变量的边际分布(CDF)
C(...) = Copula函数(连接函数)
直觉:
Copula把"每个变量长什么样"和"变量之间怎么关联"分开了
边际分布:描述每个资产的收益率分布(可以是任意分布)
Copula:描述资产之间的依赖结构(相关性的广义化)
→ 可以给每个资产用GPD建模尾部
→ 用Copula描述它们的联合行为
常见Copula类型
1. Gaussian Copula(高斯连接函数)
C(u₁, u₂) = Φ₂(Φ⁻¹(u₁), Φ⁻¹(u₂); ρ)
参数:相关系数矩阵
特点:尾部独立——极端事件不会同时发生
致命缺陷:2008年CDO危机的罪魁祸首之一
David Li的Gaussian Copula CDO模型:
假设违约相关性用Gaussian Copula描述
→ 尾部独立假设导致CDO高级层风险被严重低估
→ 所有高级层被评为AAA
→ 2008年全部暴雷
2. t-Copula(t分布连接函数)
C(u₁, u₂) = t₂(t⁻¹_ν(u₁), t⁻¹_ν(u₂); ρ, ν)
参数:相关系数ρ + 自由度ν
特点:尾部相关——ν越小尾部相关性越强
优势:比Gaussian Copula更好地捕捉"危机时所有资产一起跌"
推荐:金融风控首选
3. Clayton Copula
C(u₁, u₂) = (u₁^(-θ) + u₂^(-θ) - 1)^(-1/θ)
特点:下尾相关 + 上尾独立
适用:下跌风险建模——"一起跌但不一定一起涨"
直觉:暴跌时联动,暴涨时各自为政
4. Gumbel Copula
特点:上尾相关 + 下尾独立
适用:极端上涨情景(相对少用于风控)
Copula在风控中的应用
应用方式:
1. 用EVT(GPD)建模每个资产的边际分布(特别是尾部)
2. 用Copula(推荐t-Copula)建模资产间的依赖关系
3. 蒙特卡洛模拟 → 生成联合极端情景 → 计算组合VaR/ES
优势:
相比参数法(正态分布 + 线性相关系数):
✓ 能建模肥尾(GPD)
✓ 能建模尾部相关性(t-Copula)
✓ 能建模非对称相关性(Clayton)
代价:
× 计算复杂
× 参数估计困难(特别是高维Copula)
× 模型风险——选错Copula类型后果严重
五、压力测试
5.1 为什么需要压力测试?
VaR和ES回答的是"正常到中等极端"情况下的风险
压力测试回答的是"极端到不可思议"情况下的风险
VaR/ES的局限:
- 基于历史数据或模型假设
- 如果"黑天鹅"从未发生过,VaR/ES捕捉不到
- 模型假设可能在极端情况下完全失效
压力测试的价值:
- 不依赖统计模型
- 直接构造"如果XX发生了会怎样"
- 覆盖VaR/ES覆盖不到的情景
监管要求:
- Basel要求银行定期进行压力测试
- 2010年后美联储CCAR/DFAST → 系统性银行必须通过压力测试
- 欧洲EBA也有类似要求
5.2 历史情景法
用真实发生过的危机重新估值当前投资组合
常用历史情景:
| 情景 | 时间 | 主要冲击 | 持续时间 |
|------|------|---------|---------|
| 1987黑色星期一 | 1987.10 | 美股单日-22% | 1天 |
| 亚洲金融危机 | 1997-1998 | 亚洲货币暴跌、股市崩盘 | 数月 |
| LTCM崩溃 | 1998.8-9 | 信用利差飙升、流动性枯竭 | 数周 |
| 互联网泡沫 | 2000-2002 | 纳斯达克跌-78% | 2年 |
| 2008全球金融危机 | 2008.9-2009.3 | 全面崩溃 | 6个月 |
| 2020新冠恐慌 | 2020.2-3 | 标普-34%、VIX=82 | 5周 |
| 2022加息风暴 | 2022.1-12 | 股债双杀、加密崩盘 | 全年 |
方法:
1. 提取该历史时期内各风险因子的变化量
例如2008年情景:
股票: -40%
利率: -200bp
信用利差: +500bp
汇率(EURUSD): +15%
波动率(VIX): +300%
2. 将这些变化量施加到当前投资组合
3. 重新估值所有头寸
4. 计算总损失
优点:
情景真实可信("确实发生过")
易于向管理层和监管解释
缺点:
只覆盖已发生过的危机
"下一次危机不会是上一次的重演"
5.3 假设情景法
由风险管理团队构造极端但合理(extreme but plausible)的假设情景
构造原则:
✓ 极端但不荒谬("利率+300bp"合理,"利率+3000bp"不合理)
✓ 考虑因子间的相关性(利率上升→股市下跌→信用利差扩大)
✓ 覆盖当前组合最大的风险暴露
常见假设情景模板:
情景1:利率冲击
短端利率: +300bp
长端利率: +200bp(曲线走平)
信用利差: +100bp
股票: -15%
情景2:股市崩盘
全球股票: -40%
波动率: +200%
信用利差: +300bp
利率: -100bp(避险→国债被买)
情景3:新兴市场危机
新兴市场股票: -50%
新兴市场货币: -30%
大宗商品: -40%
利率(发达): -50bp
情景4:流动性枯竭
所有资产流动性降低
买卖价差扩大5-10倍
无法在正常时间内平仓
→ 被迫以极大折扣抛售
5.4 逆向压力测试
传统压力测试:给定情景 → 计算损失
逆向压力测试:给定损失水平 → 反推需要什么情景
例如:
"什么情况下我们会亏损超过资本金的30%?"
反推:
可能需要股票跌50% + 利率升500bp + 信用利差升800bp
同时所有hedge失效
同时市场流动性枯竭
价值:
帮助识别"什么可以杀死我们"
强制思考"不可能的事情"
更好的业务连续性规划
5.5 压力测试在架构设计中的影响
系统架构需求:
1. 重估值引擎
- 需要对所有持仓按压力情景重新估值
- 线性产品(股票/债券):直接乘以冲击因子
- 非线性产品(期权):需要全面重新定价
- 计算量大 → 可能需要分布式计算/GPU加速
2. 情景管理
- 存储和管理几十到上百个压力情景
- 情景版本控制
- 情景审批流程
3. 报告系统
- 压力测试结果的自动化报告
- 与VaR/ES报告的整合
- 监管报告格式要求
4. 触发机制
- 日常运行(每日/每周)
- 事件驱动运行(市场大跌时自动触发)
- Ad-hoc运行(管理层要求的临时压力测试)
六、工程落地要点
6.1 VaR计算系统架构
两种模式:
模式一:批量VaR(End-of-Day)
┌─────────┐ ┌──────────┐ ┌───────────┐ ┌──────────┐
│ 持仓数据 │────→│ 市场数据 │────→│ VaR引擎 │────→│ 风险报告 │
│ (T日收盘)│ │ (收益率/ │ │ (参数法/ │ │ (VaR/ES │
│ │ │ 协方差) │ │ 历史模拟/ │ │ /限额) │
└─────────┘ └──────────┘ │ 蒙特卡洛)│ └──────────┘
└───────────┘
运行时间:每天收盘后
SLA:2小时内出报告
适用:监管报告、风险限额检查
模式二:准实时VaR(Intraday)
┌─────────┐ ┌──────────┐ ┌───────────┐ ┌──────────┐
│ 实时持仓 │────→│ 实时行情 │────→│ 增量VaR │────→│ 风险仪表盘│
│ (每笔交易│ │ (每秒更新)│ │ (参数法 │ │ (实时限额 │
│ 更新) │ │ │ │ 增量计算)│ │ 监控) │
└─────────┘ └──────────┘ └───────────┘ └──────────┘
延迟要求:秒级
通常只用参数法(快)
蒙特卡洛实时做不了 → 用预计算+插值近似
6.2 协方差矩阵的计算和存储
挑战:N个资产 → N×N的矩阵
资产数 矩阵大小 存储量
100 10,000 ~80KB
1000 1,000,000 ~8MB
10000 100,000,000 ~800MB
计算挑战:
- 用历史数据估计:需要T > N(样本数 > 资产数),否则矩阵奇异
- 大矩阵可能不正定(数值问题)→ 需要正定化处理
- 每天更新 → 增量更新比全量更新高效
实际方案:
1. 因子模型降维:1000个资产用30个因子描述 → 30×30矩阵
2. RiskMetrics方法:EWMA估计协方差,逐日增量更新
3. 分块存储:按资产类别分块,跨类别用低分辨率
4. 缓存策略:协方差矩阵T日有效,T+1日重新计算
6.3 蒙特卡洛模拟的并行化
蒙特卡洛天然适合并行化——每条路径独立
CPU并行:
10000条路径 / 8核 = 每核1250条
现代CPU可以在秒级完成简单资产的模拟
GPU加速:
NVIDIA CUDA:10000条路径可以同时运行
加速比:10-100倍
适用场景:期权组合(每条路径需要重新定价)
分布式计算:
Spark/Ray等框架
将路径分配到多台机器
最终汇总结果
随机数生成:
伪随机数:Mersenne Twister(标准选择)
低差异序列(准蒙特卡洛):Sobol/Halton序列
→ 收敛速度比伪随机更快(O(1/N) vs O(1/√N))
→ 适合中等维度(<100维)的问题
6.4 风险报告自动化
日报模板:
┌────────────────────────────────────────┐
│ Daily Risk Report │
│ Date: 2026-04-13 │
├────────────────────────────────────────┤
│ 1. Portfolio Summary │
│ Total NAV: $1,234,567,890 │
│ Daily PnL: -$2,345,678 (-0.19%) │
│ │
│ 2. VaR Summary │
│ 1-Day 95% VaR: $12,345,678 (1.0%) │
│ 1-Day 99% VaR: $18,234,567 (1.5%) │
│ 10-Day 99% ES: $45,678,901 (3.7%) │
│ │
│ 3. VaR Utilization │
│ VaR Limit: $20,000,000 │
│ Current VaR: $12,345,678 (62%) │
│ Status: GREEN │
│ │
│ 4. Stress Test Results │
│ 2008 Scenario: -$98,765,432 (-8%) │
│ Rate +300bp: -$45,678,901 (-4%) │
│ Equity -40%: -$67,890,123 (-5%) │
│ │
│ 5. VaR Backtesting │
│ 99% VaR Exceedances (250 days): 3 │
│ Expected: 2.5 │
│ Traffic Light: GREEN │
└────────────────────────────────────────┘
Backtesting(回测检验):
如果99% VaR的突破次数 > 预期太多 → 模型有问题
Basel "交通灯"规则:
绿灯:0-4次突破(250天窗口)→ 正常
黄灯:5-9次突破 → 需要调查
红灯:10+次突破 → 必须修正模型
七、常见误区与面试重点
7.1 常见误区
误区1:"VaR是最大损失"
✗ VaR不是最大损失——它是"在某个概率下的损失上限"
✗ 实际损失可以远超VaR(这就是ES存在的意义)
误区2:"99% VaR比95% VaR安全很多"
✗ 99% VaR只比95% VaR大约40%(正态分布下2.326/1.645=1.41)
✗ 但99%对应的尾部数据更少,估计更不稳定
误区3:"VaR越低越好"
✗ VaR低可能是因为"分散化效应"(好事)
✗ 也可能是因为"模型低估了风险"(坏事)
✗ VaR需要配合回测检验来判断准确性
误区4:"GARCH模型能预测波动率"
✗ GARCH预测的是条件方差(下一期的方差)
✗ 预测精度随时间衰减——超过几天后基本回到长期均值
✗ 但对于日度风控已经足够
误区5:"Copula解决了相关性问题"
✗ Copula只是一个更灵活的工具
✗ 选错Copula类型 → 风险可能比用简单相关系数更大
✗ Gaussian Copula在2008年的教训
误区6:"压力测试就是极端VaR"
✗ 压力测试不是统计方法——是"如果……会怎样"的分析
✗ 不需要概率——情景本身就是假设的
✗ VaR和压力测试是互补的,不是替代的
7.2 面试高频问题
Q: 解释VaR的三种计算方法的优缺点
A: 参数法快但假设正态(尾部失效),历史模拟无假设但依赖历史窗口,
蒙特卡洛灵活但计算密集。实际中多种方法并行。
Q: 为什么Basel III用ES替代VaR?
A: VaR不满足次可加性(分散化可能增加VaR),且不衡量尾部严重程度。
ES满足一致性风险度量四公理,能捕捉"超过VaR后平均亏多少"。
Q: GARCH和EWMA的区别?
A: EWMA是ω=0的GARCH特例,没有长期均值回归。GARCH有常数项ω,
波动率冲击最终会消退回长期水平。
Q: 什么是Copula?为什么Gaussian Copula在2008年出了问题?
A: Copula将边际分布和依赖结构分离。Gaussian Copula假设尾部独立
(极端事件不同时发生),但2008年所有资产同时暴跌,导致基于
Gaussian Copula定价的CDO高级层全部违约。
Q: 如何设计一个市场风险系统的架构?
A: 需要考虑:批量vs实时两种模式、协方差矩阵的高效计算和存储、
蒙特卡洛的并行化、压力测试引擎、风险报告自动化、VaR回测
检验。关键取舍是精度vs速度(参数法快但粗,MC精但慢)。
八、延伸阅读
经典教材
- John Hull - Options, Futures, and Other Derivatives — 市场风险和衍生品的标准教材
- Philippe Jorion - Value at Risk — VaR方法论的圣经
- Alexander McNeil - Quantitative Risk Management — EVT和Copula的最佳参考
- Ruey Tsay - Analysis of Financial Time Series — GARCH族模型的全面介绍
论文
- Engle (1982) - Autoregressive Conditional Heteroskedasticity — ARCH模型原始论文
- Bollerslev (1986) - Generalized ARCH — GARCH模型原始论文
- Artzner et al. (1999) - Coherent Measures of Risk — 一致性风险度量的四公理
- Li (2000) - On Default Correlation: A Copula Function Approach — Gaussian Copula CDO定价
在线资源
- RiskMetrics Technical Document — EWMA和VaR方法论的工业标准
- Basel Committee: Minimum capital requirements for market risk (FRTB) — 最新监管要求
- Kevin Dowd - Measuring Market Risk — 免费在线版
九、与已有笔记的关联
关联笔记矩阵:
本笔记主题 已有笔记 关联点
─────────────────────────────────────────────────────────
VaR计算系统架构 → 03-risk-engine 风控引擎的市场风险模块
波动率建模 → 02-statistical-arbitrage 时间序列分析基础
蒙特卡洛模拟 → 03-latency-engineering 计算密集型任务的并行化
压力测试架构 → 05-clearing-settlement 清算系统的压力测试需求
Copula/EVT → 04-credit-risk-modeling 信用组合的联合违约建模
协方差矩阵存储 → Arch Day 100+ 分布式存储架构
本笔记重点回顾:
→ VaR三方法的trade-off是面试核心考点
→ ES替代VaR的原因(一致性风险度量)是高频考点
→ GARCH的直觉(波动率聚集+均值回归)需要能讲清楚
→ Copula的Gaussian vs t选择影响是2008危机的核心教训
→ 压力测试的工程落地需要理解重估值引擎架构