第 22 章 风险价值(VaR)
第 19a、19b 章的希腊字母(delta、gamma、vega 等)从不同侧面刻画衍生品组合的风险。金融机构通常每天对其暴露的每一个市场变量计算这些指标,而市场变量常有成百上千个,于是每天产生海量的风险数字。这些数字对交易员很有用,但回答不了高管和监管者最关心的问题:整个机构到底承担了多大的风险?
**风险价值(Value at Risk, VaR)**试图用一个数字概括一个金融资产组合的总风险。它被企业财务主管、基金经理和金融机构广泛使用,银行监管者传统上用它来确定银行必须持有的资本。本章介绍 VaR 的定义和两类主要计算方法——历史模拟法(historical simulation)与模型构建法(model-building approach),讨论含期权组合的非线性问题、压力测试与回测,最后介绍用主成分分析(PCA)为利率组合降维计算 VaR。
对量化交易者来说,本章几乎每一节都直接对应风控系统中的一个模块。更重要的是,组合方差公式 \(\sigma_P^2=\boldsymbol\alpha^{\mathsf T}C\boldsymbol\alpha\) 不只是 VaR 的计算工具,它也是组合优化、风险预算和风险归因的共同基础。第 06 册第 07a、07b 章从计量角度讨论 VaR 的分位数估计与极值理论,可与本章对照。
学习目标
- 准确表述 VaR 的定义(时间跨度 \(N\)、置信水平 \(X\)),理解它与预期亏损(ES)的区别,以及 \(\sqrt N\) 规则的适用条件。
- 会用历史模拟法计算 VaR:构造情景、对组合重估、取百分位,并理解滚动窗口与单个极端日对结果的影响。
- 会用模型构建法(方差-协方差法)计算线性组合的 VaR,掌握矩阵形式 \(\sigma_P^2=\boldsymbol\alpha^{\mathsf T}C\boldsymbol\alpha\),会计算分散化收益。
- 会处理利率工具(现金流映射)和期权(delta 线性化、delta-gamma 二次模型),理解 gamma 正负对 VaR 偏差方向的影响。
- 了解蒙特卡洛 VaR、部分模拟法,比较各方法的优劣;理解压力测试与回测的作用。
- 会用利率曲线的主成分(平移、扭转、弯曲)计算 VaR,理解因子得分互不相关带来的计算简化。
读前导读
这一章在解决什么问题。 这一章你会觉得最熟悉。CFA 二级、三级的风险管理部分讲过 VaR 的三种算法(参数法/方差-协方差法、历史模拟法、蒙特卡洛法)、VaR 的局限、ES(CVaR)、压力测试和回测;FRM 一级的"Valuation and Risk Models"更是几乎逐节对应本章。所以本章对你的价值不在概念,而在三个"为什么"和"怎么做"上:
第一,参数法背后的组合方差公式 \(\sigma_P^2=\boldsymbol\alpha^{\mathsf T}C\boldsymbol\alpha\) 到底是什么。它就是 CFA 两资产组合方差公式的 \(n\) 资产版本,写成矩阵只是为了紧凑。第二,期权组合为什么让参数法失效,以及失效的方向。这要用到泰勒展开:delta 是一阶项,gamma 是二阶项,和债券的"久期 + 凸性"一模一样。卖期权的组合(负 gamma)就像负凸性的 MBS,正态 VaR 会系统性低估它的风险。第三,利率组合怎样用主成分分析(PCA)降维。你在固定收益里学过"平行移动、斜率变化、曲率变化",PCA 就是从数据里把这三种变动形态"算"出来,而且保证它们互不相关。
本章还补充了 CFA 教材较少展开的几处:Cornish–Fisher 展开(把偏度纳入 VaR)、成分 VaR(欧拉分解,FRM 二级会深入)、Kupiec 回测的似然比检验。
需要先想起来的数学。
- 分位数与正态分布表。 VaR 就是损失分布的分位数。\(N^{-1}(0.01)=-2.326\)、\(N^{-1}(0.05)=-1.645\) 你已熟悉。注意记号:\(N(\cdot)\) 是标准正态累积分布函数,\(N^{-1}\) 是它的反函数;本章 \(N\) 同时用来表示天数,按上下文区分。
- 矩阵与二次型。 \(\boldsymbol\alpha^{\mathsf T}C\boldsymbol\alpha\) 展开就是 \(\sum_i\sum_j\alpha_i\alpha_jC_{ij}\)。例:\(\boldsymbol\alpha=(10,5)\),\(C=\begin{pmatrix}0.0004&0.00006\\0.00006&0.0001\end{pmatrix}\),结果 \(=100\times0.0004+25\times0.0001+2\times50\times0.00006=0.0485\),正是正文"验证"那一步。半正定指对任意 \(\boldsymbol\alpha\) 都有 \(\boldsymbol\alpha^{\mathsf T}C\boldsymbol\alpha\ge0\),即"任何组合的方差都不为负"。见 第 00 册第 06 章 线性代数速成。
- 泰勒展开到二阶。 \(\Delta P\approx\delta\Delta S+\frac12\gamma(\Delta S)^2\),与"价格变化 ≈ −久期 × 收益率变化 + ½ × 凸性 × 收益率变化²"同构。见 第 00 册第 02 章 导数与泰勒展开。
- 正态分布的高阶矩与偏度。 \(X\sim N(0,\sigma^2)\) 时 \(E X^2=\sigma^2\)、\(EX^4=3\sigma^4\)、\(EX^6=15\sigma^6\),奇数阶矩为 0。偏度 = 三阶中心矩 / 标准差³,衡量分布向哪边歪。见 第 00 册第 07 章 概率中的分析工具。
- 特征值与特征向量。 对称矩阵 \(C\) 满足 \(C\mathbf v=\lambda\mathbf v\) 的方向 \(\mathbf v\) 称为特征向量,\(\lambda\) 为特征值。PCA 中特征向量是因子载荷,特征值是因子方差。见 第 00 册第 06 章。
怎么读这一章。 22.1–22.3 节你可以快速读,重点留意几个实务约定:百分位的取法、\(\sqrt N\) 规则的成立条件、历史模拟的"悬崖效应"。22.4 节(线性模型、矩阵形式、现金流映射、delta 线性化)和 22.5 节(二次模型)是核心,要配合讲解框读透。22.5 节的矩公式和 Cornish–Fisher 第一次可以只看结论"负 gamma → 负偏 → VaR 更大"。22.6–22.8 节对 CFA 持证人基本是复习。22.9 节 PCA 是本章第二个重点,建议手算一遍表 22.9 的因子敞口。"量化实战"中的成分 VaR 和 Kupiec 检验值得细读。
22.1 VaR 度量
定义
VaR 回答的陈述形式是:
我们有 \(X\%\) 的把握,在未来 \(N\) 天内损失不会超过 \(V\) 美元。
\(V\) 就是 VaR。它是两个参数的函数:时间跨度 \(N\) 天和置信水平 \(X\%\)。换句话说,\(N\) 天内损失超过 \(V\) 的概率只有 \((100-X)\%\)。监管机构要求银行计算市场风险 VaR 时取 \(N=10\)、\(X=99\)。
用分布的语言:
- 从组合价值变化(收益)的分布看,VaR 是 \(N\) 天收益分布的第 \((100-X)\) 百分位对应的损失。损失是负的收益,VaR 关注的是收益分布的左尾。例如 \(N=5\)、\(X=97\) 时,VaR 是 5 天收益分布的第 3 百分位(原书图 22.1)。
- 从损失分布看,VaR 是损失分布的第 \(X\) 百分位,关注右尾。
用公式写,若 \(L\) 为 \(N\) 天损失,则
优点与缺点
VaR 的优点是易于理解:它回答了"情况能糟到什么程度"这个简单问题。高管们乐于把所有市场变量的所有希腊字母压缩成一个数字。
缺点是:VaR 只说"损失超过 \(V\) 的概率是 1%",不说"超过时会损失多少"。这可能诱使交易员构造原书图 22.2 那样的收益分布——与图 22.1 的 VaR 相同,但尾部的潜在损失大得多。比如卖出深度虚值期权:99% 的时候赚一点权利金,1% 以下的时候可能巨亏,而 VaR 对这部分完全视而不见。
预期亏损
预期亏损(expected shortfall, ES),又称条件 VaR(C-VaR)或尾部损失(tail loss),弥补了这一缺陷。VaR 问"情况能糟到什么程度",ES 问"如果情况真的变糟,预期会损失多少":
例如 \(X=99\)、\(N=10\) 时,ES 是 10 天损失超过 10 天 99% VaR 时的平均损失。
Artzner、Delbaen、Eber、Heath(1999)提出了一个好的风险度量应具备的性质,满足这些性质的度量称为一致性风险度量(coherent risk measures)。标准 VaR 并不全部满足——它不满足次可加性(subadditivity):两个组合合并后的 VaR 可能大于各自 VaR 之和,这与"分散化降低风险"的直觉相悖。ES 满足全部性质。
金融直觉:次可加性指 \(\rho(A+B)\le\rho(A)+\rho(B)\),即"合并后的风险不超过各自风险之和"。VaR 违反它的经典例子(FRM 常考):两笔独立的债券,各自违约概率 0.8%,违约损失 100。单独看,违约概率低于 1%,各自 99% VaR 都是 0;合在一起,至少一笔违约的概率约 1.6%,超过 1%,组合 99% VaR 变成 100。合并后 VaR 从 0+0 变成 100,"分散化"反而增加了 VaR。原因是 VaR 只看一个分位点,对点以外的尾部"看不见"。ES 对整段尾部取平均,不会出现这种情况。巴塞尔 FRTB 改用 97.5% ES 计算市场风险资本,主要理由之一就是这里。 正文提到的四条一致性性质是:单调性(在每个情景下都亏得更多的组合风险更大)、平移不变性(加入现金 \(c\) 使风险减少 \(c\))、正齐次性(头寸放大 \(k\) 倍风险也放大 \(k\) 倍)、次可加性。
Business Snapshot 22.1:银行监管者如何使用 VaR
- Basel I(1988):巴塞尔银行监管委员会规定了信用风险资本的计算。
- 1996 年修正案(1998 年实施):要求银行为市场风险也持有资本。它区分交易账户(trading book)——每日按市价重估的股票、债券、互换、远期、期权等——和银行账户(banking book)——主要是贷款,通常不定期重估。交易账户的资本用 \(N=10\)、\(X=99\) 的 VaR 计算:资本 = \(k\times\) VaR(另加特定风险的调整),乘数 \(k\) 由监管者对每家银行分别设定,至少为 3.0。VaR 程序完善、检验充分的银行通常为 3.0。
- Basel II(约 2007 年实施):用 1 年期、99.9% 的 VaR 计算信用风险和操作风险的资本。
- Basel II.5(2012 年实施):修改了市场风险资本的计算,引入压力 VaR(stressed VaR)——基于特别不利时期市场变量变动的 VaR。
- Basel III:提高资本的数量以及其中权益资本的比例。
- 2012 年 5 月,巴塞尔委员会发布讨论稿,考虑把市场风险的度量从 VaR 改为预期亏损。
时间跨度
实务中先计算 \(N=1\) 天的市场风险 VaR,因为通常没有足够的数据直接估计市场变量更长时间的行为。然后通常假设
当组合价值的逐日变化独立同分布、且为均值为零的正态分布时,这个规则精确成立(\(N\) 个独立同分布正态变量之和的标准差是单个的 \(\sqrt N\) 倍,百分位与标准差成正比)。其他情况下只是近似:收益有自相关时会偏离,厚尾分布在时间加总后会逐渐趋近正态,而组合在 10 天内实际上也会被调整。
推导拆解:\(\sqrt N\) 规则用了哪几个假设。 设每日变化 \(\Delta P_1,\dots,\Delta P_N\),\(N\) 天变化是它们的和。 方差:\(\mathrm{Var}(\sum\Delta P_t)=\sum_t\mathrm{Var}(\Delta P_t)+2\sum_{s<t}\mathrm{Cov}(\Delta P_s,\Delta P_t)\)。若相互独立(或至少不相关),协方差全为 0;若同分布,每项方差都是 \(\sigma^2\),于是方差 \(=N\sigma^2\),标准差 \(=\sigma\sqrt N\)。 分位数:若每日变化是均值 0 的正态,和也是均值 0 的正态,分位数 = \(z\times\) 标准差,于是 VaR 也按 \(\sqrt N\) 放大。若均值不为零,均值按 \(N\) 放大、标准差按 \(\sqrt N\) 放大,两者不再成比例。 自相关为 \(\rho\)(只有相邻日相关)时,协方差项有 \(N-1\) 个,方差变为 \(N\sigma^2+2(N-1)\rho\sigma^2\)。\(\rho>0\)(趋势)时 VaR 大于 \(\sqrt N\) 规则给出的值,这是练习 3 的答案来源。
22.2 历史模拟法
基本思想
历史模拟法用过去的数据直接作为未来的指引。以 1 天、99% VaR、使用 501 天数据为例:
- 识别市场变量:找出影响组合价值的全部市场变量——利率、股价、商品价格、汇率等,全部以本币计量。例如对一家德国银行,一个市场变量是以欧元计的标普 500 指数。
- 构造情景:收集这些变量最近 501 天的数据,得到 500 个"从今天到明天"的情景。把数据的第一天记为 Day 0。情景 1:所有市场变量的百分比变化与 Day 0 到 Day 1 相同;情景 2:与 Day 1 到 Day 2 相同;依此类推。
- 重估组合:对每个情景,计算组合从今天到明天的美元价值变化,得到日损失的经验分布(收益为负损失)。
- 取百分位:500 个损失中,99 百分位的估计是第 5 大损失。如果过去 501 天的变化能代表明天可能发生的情况,我们就有 99% 的把握,明天的损失不会超过这个 VaR。
关于百分位的取法:也可以用第 6 大损失,或者第 5、第 6 大的平均,没有唯一标准。Excel 的 PERCENTILE 函数在有 \(n\) 个观测、\(k\) 为整数时,把排名第 \(k+1\) 的观测作为 \(k/(n-1)\) 百分位,其他百分位用线性插值。实现 VaR 系统时,插值规则应当写清楚并固定下来。
代数表达。设 \(v_i\) 为某市场变量第 \(i\) 天的值,今天为第 \(n\) 天。第 \(i\) 个情景下明天的值为
即把第 \(i\) 天的百分比变化"嫁接"到今天的水平上。
示例:四个股指的组合
一位美国投资者在 2008 年 9 月 25 日持有一个价值 1,000 万美元的组合(原书表 22.1,单位千美元):
| 指数 | 投资额(千美元) |
|---|---|
| DJIA | 4,000 |
| FTSE 100 | 3,000 |
| CAC 40 | 1,000 |
| Nikkei 225 | 2,000 |
| 合计 | 10,000 |
作者网站提供了 501 天的指数收盘价、汇率和完整计算的 Excel 表。为简化,只使用四个指数都交易的日子,不考虑股息。
换算成本币。外国指数要先换算成美元。例如 2008 年 8 月 10 日 FTSE 100 为 5,823.40,汇率为 1.8918 美元/英镑,美元计值约 11,016.71。原书表 22.2 给出美元计值的数据:Day 0(2006 年 8 月 7 日)DJIA 11,219.38,FTSE 11,131.84,CAC 6,373.89,Nikkei 131.77;Day 1(8 月 8 日)分别为 11,173.59、11,096.28、6,378.16、134.38;……Day 500(2008 年 9 月 25 日)分别为 11,022.06、9,599.90、6,200.40、112.82。
白话解释(附原文日期疑点):这里"美元计值"是 \(5{,}823.40\times1.8918=11{,}016.71\),即把英镑计价的指数点位换算成美元,这样英镑汇率的波动也被计入了美国投资者的风险。需要注意,2008 年 8 月 10 日是星期日,不是交易日;从数据窗口(Day 0 为 2006 年 8 月 7 日)和当时的指数、汇率水平看,原书这里应为 2006 年 8 月 10 日,本句的年份疑为笔误,读者以原书为准。
背景:2007 年 8 月开始的信用市场动荡已持续一年多,股价连续数月下跌,波动率上升;雷曼兄弟在十天前破产,7,000 亿美元的问题资产救助计划(TARP)尚未获国会通过。
情景 1 的计算。DJIA 在情景 1 下明天的值为
类似地,FTSE、CAC、Nikkei 分别为 9,569.23、6,204.55、115.05。组合价值(千美元)为
即收益 14,334 美元(损失为 \(-14.334\) 千美元)。原书表 22.3 列出了 500 个情景,例如情景 2 组合价值 10,027.481(损失 \(-27.481\)),情景 3 为 9,946.736(损失 53.264),情景 499 为 9,857.465(损失 142.535),情景 500 为 10,126.439(损失 \(-126.439\))。原书图 22.3 是损失的直方图。
排序。原书表 22.4 把损失从大到小排序:
| 排名 | 情景 | 损失(千美元) |
|---|---|---|
| 1 | 494 | 477.841 |
| 2 | 339 | 345.435 |
| 3 | 349 | 282.204 |
| 4 | 329 | 277.041 |
| 5 | 487 | 253.385 |
| 6 | 227 | 217.974 |
| 7 | 131 | 202.256 |
| 8 | 238 | 201.389 |
最大的损失来自情景 494,即雷曼破产时的市场变动。
- 1 天 99% VaR = 第 5 大损失 = 253,385 美元;
- 10 天 99% VaR \(=\sqrt{10}\times253{,}385=801{,}274\) 美元。
如果要算同一数据的 ES,可以取比 VaR 更大的 4 个损失的平均,或者取前 5 个损失的平均——又是一个需要固定下来的约定。
滚动更新
VaR 每天用最近 501 天的数据重新计算。9 月 26 日(Day 501)用 Day 1 到 Day 501 的数据(不再使用 Day 0);9 月 29 日(Day 502)用 Day 2 到 Day 502;依此类推。
这意味着:雷曼破产那一天会在窗口中停留约两年,一直主导着尾部;两年后它滑出窗口,VaR 会突然下降。这种"悬崖效应"是固定窗口历史模拟的固有特征,也是监管者引入压力 VaR 的原因之一。
实务中的复杂性
- 实际银行组合远比四个指数复杂:成千上万个头寸,包括远期、期权等衍生品,而且每天都在变化。交易使组合风险增加,VaR 通常上升;反之下降。VaR 是按"组合在下一个营业日保持不变"计算的。
- 常常要考虑数百上千个市场变量。以利率为例,银行需要多个币种的多条零息利率期限结构,所考虑的市场变量是用来构建这些期限结构的那些变量(第 4 章),每条零息曲线可能多达 10 个市场变量。
22.3 模型构建法
日波动率
期权定价中时间以年为单位,波动率是"每年的波动率"。模型构建法中时间以天为单位,使用"每日波动率"。假设一年有 252 个交易日,由第 15a 章式 (15.2),一年连续复利收益的标准差为 \(\sigma_{year}\) 或 \(\sigma_{day}\sqrt{252}\),所以
日波动率约为年波动率的 6%(\(1/\sqrt{252}\approx0.063\))。
第 15a 章 15.4 节指出 \(\sigma_{day}\) 近似等于一天百分比价格变化的标准差。计算 VaR 时,假设二者严格相等,即把日波动率定义为一天百分比变化的标准差。下面假设已经有了日波动率与相关系数的估计(第 23 章讨论如何估计)。
单一资产
持有 1,000 万美元的微软股票,计算 \(N=10\)、\(X=99\) 的 VaR。先算 1 天。
微软的日波动率为 2%(约相当于年化 32%),所以头寸的日变化标准差为 \(2\%\times1{,}000\) 万 \(=20\) 万美元。
期望变化取零。惯例是假设所考虑期间内市场变量的期望变化为零。这并不严格成立,但很合理:短期内期望变化远小于标准差。例如微软的期望年收益为 20%,一天的期望收益约 \(0.20/252\approx0.08\%\),而标准差是 2%;10 天期望约 0.8%,标准差约 \(2\%\times\sqrt{10}\approx6.3\%\)。
假设正态。为与第 15a 章一致,本可以假设明天的股价服从对数正态,但一天很短,二者几乎没有区别。由 \(N^{-1}(0.01)=-2.326\),正态变量下降超过 2.326 个标准差的概率为 1%。所以
- 1 天 99% VaR \(=2.326\times200{,}000=465{,}300\) 美元;
- 10 天 99% VaR \(=465{,}300\times\sqrt{10}=1{,}471{,}300\) 美元。
再看 500 万美元的 AT&T 头寸,日波动率 1%(约年化 16%):日标准差 5 万美元,1 天 99% VaR \(=50{,}000\times2.326=116{,}300\) 美元,10 天 99% VaR \(=367{,}800\) 美元。
两个资产
组合 = 1,000 万美元微软 + 500 万美元 AT&T。假设两者的收益服从二元正态,相关系数 0.3。由统计学,
取 \(\sigma_X=200{,}000\),\(\sigma_Y=50{,}000\):
1 天 99% VaR \(=220{,}200\times2.326=512{,}300\) 美元;10 天 99% VaR \(=1{,}620{,}100\) 美元。
分散化的好处
| 头寸 | 10 天 99% VaR(美元) |
|---|---|
| 微软 | 1,471,300 |
| AT&T | 367,800 |
| 两者之和 | 1,839,100 |
| 组合 | 1,620,100 |
\((1{,}471{,}300+367{,}800)-1{,}620{,}100=219{,}000\) 美元就是分散化收益。如果两只股票完全相关(\(\rho=1\)),组合 VaR 等于两者之和;相关性不完全时,部分风险被"分散掉"了。最早研究分散化收益的是 Markowitz(1952),他因此获得 1990 年诺贝尔经济学奖。
22.4 线性模型
一般形式
设组合价值为 \(P\),由 \(n\) 种资产组成,投资于资产 \(i\) 的金额为 \(\alpha_i\),\(\Delta x_i\) 为资产 \(i\) 一天的收益率。组合一天的价值变化为
上一节的例子中(单位百万美元)\(\alpha_1=10\),\(\alpha_2=5\),\(\Delta P=10\Delta x_1+5\Delta x_2\)。
若 \(\Delta x_i\) 服从多元正态,那么 \(\Delta P\) 作为它们的线性组合也服从正态,只需知道均值和标准差。设各 \(\Delta x_i\) 期望为零,则 \(\Delta P\) 均值为零。设 \(\sigma_i\) 为资产 \(i\) 的日波动率,\(\rho_{ij}\) 为资产 \(i\) 与 \(j\) 收益的相关系数(\(\rho_{ii}=1\)),则
等价地,
\(N\) 天变化的标准差为 \(\sigma_P\sqrt N\),\(N\) 天 99% VaR \(=2.326\,\sigma_P\sqrt N\)。
推导拆解:(22.2) 就是 CFA 组合方差公式的推广。 \(\Delta P=\sum_i\alpha_i\Delta x_i\) 是随机变量的线性组合。方差的双线性性质给出 \(\mathrm{Var}(\sum_i\alpha_i\Delta x_i)=\sum_i\sum_j\alpha_i\alpha_j\mathrm{Cov}(\Delta x_i,\Delta x_j)\),而 \(\mathrm{Cov}(\Delta x_i,\Delta x_j)=\rho_{ij}\sigma_i\sigma_j\),代入即得 (22.2)。 双重求和里 \(i=j\) 的项是 \(\alpha_i^2\sigma_i^2\);\(i\ne j\) 的项成对出现(\((i,j)\) 和 \((j,i)\) 相等),合并成 \(2\sum_{j<i}\),这就是"等价地"那一行。\(n=2\) 时就是 \(\alpha_1^2\sigma_1^2+\alpha_2^2\sigma_2^2+2\rho\alpha_1\alpha_2\sigma_1\sigma_2\),和你熟悉的两资产公式完全一样,只是这里 \(\alpha\) 是金额而不是权重,所以算出来的是金额的标准差。 "多元正态的线性组合仍是正态"是这里的关键假设:有了它,\(\Delta P\) 的分位数只需均值和标准差就能确定。若各资产收益是厚尾的,这一步就不再成立,这正是参数法低估尾部风险的根源。
组合经理更常用收益率的形式:组合一天收益 \(\Delta P/P\) 的方差为 \(\sum_i\sum_j\rho_{ij}w_iw_j\sigma_i\sigma_j\),其中 \(w_i=\alpha_i/P\) 为权重。
验证:\(\sigma_1=0.02\),\(\sigma_2=0.01\),\(\rho_{12}=0.3\),
\(\sigma_P=0.2202\)(百万美元/天),10 天 99% VaR \(=2.326\times0.2202\times\sqrt{10}=1.62\) 百万美元,与上节一致。
相关矩阵与协方差矩阵
相关矩阵(原书表 22.5):第 \(i\) 行第 \(j\) 列为 \(\rho_{ij}\),对角线为 1,矩阵对称。配合各资产的日标准差,即可用 (22.2) 计算组合方差。
分析师也常直接用方差与协方差。令 \(\text{var}_i=\sigma_i^2\),\(\text{cov}_{ij}=\sigma_i\sigma_j\rho_{ij}\),则
协方差矩阵(原书表 22.6)的对角线是方差,所以又称方差-协方差矩阵(variance–covariance matrix),也是对称的。写成矩阵形式:
其中 \(\boldsymbol\alpha\) 是第 \(i\) 个元素为 \(\alpha_i\) 的列向量,\(C\) 是方差-协方差矩阵。协方差矩阵通常由历史数据估计(第 23 章 23.8 节用四指数的例子示范)。因此模型构建法也常被称为方差-协方差法。
由于 \(\sigma_P^2\ge0\) 对任意 \(\boldsymbol\alpha\) 成立,\(C\) 必须是半正定的。用不一致的方法分别估计各个协方差(例如用不同长度的数据窗口),得到的矩阵可能不是半正定的,此时某些组合会算出负方差。这与 21b 章 Cholesky 分解无解是同一个问题。
处理利率
不可能为每一个债券价格或每一个期限的利率单独定义一个市场变量,必须简化。
方法一:久期。只假设收益率曲线平行移动,只需一个市场变量(平移量)。用久期关系
其中 \(D\) 为修正久期,\(\Delta y\) 为一天的平行移动量。这种方法通常不够精确,因为收益率曲线的变化不只是平移(见 22.9 节)。
方法二:现金流映射。常用的做法是以若干标准期限的零息债券价格作为市场变量:1 个月、3 个月、6 个月、1 年、2 年、5 年、7 年、10 年、30 年。然后把组合中每个工具的现金流映射到这些标准期限上。
例:100 万美元的 1.2 年期国债,每半年付息,票面利率 6%,在 0.2、0.7、1.2 年付息,1.2 年还本。
- 先把它看作 3 万美元的 0.2 年零息债 + 3 万美元的 0.7 年零息债 + 103 万美元的 1.2 年零息债;
- 把 0.2 年的头寸替换为近似等价的 1 个月和 3 个月零息债头寸,0.7 年的替换为 6 个月和 1 年,1.2 年的替换为 1 年和 2 年。
最终,这只附息债被视为 1 个月、3 个月、6 个月、1 年、2 年零息债的组合。这就是现金流映射(cash-flow mapping),具体的映射方法见原书 Technical Note 25(其要点是:映射后的头寸应保持现值不变,并保持风险——即方差——不变)。
历史模拟法不需要现金流映射,因为在每个情景下都可以由所考虑的市场变量算出完整的利率期限结构,直接对每个工具重估。
线性模型的应用
- 股票和债券组合(无衍生品):最简单。现金流映射把债券转为标准期限零息债,组合价值的变化与股票收益和这些零息债收益成线性关系。
- 外汇远期:到期日为 \(T\) 的买入外币远期 = 外币 \(T\) 期零息债多头 + 本币 \(T\) 期零息债空头,各自做现金流映射。
- 利率互换(第 7 章):可视为浮动利率债与固定利率债的交换。固定利率债是普通附息债;浮动利率债在下一个付息日之后价值等于面值,可以看作到期日为下一个付息日的零息债。于是互换化为债券的多空组合,用现金流映射处理。
线性模型与期权
对于单一股票(价格 \(S\))上的期权组合,设组合的 delta 为 \(\delta\)(本节与下节用小写 \(\delta\)、\(\gamma\),避免与表示变化量的 \(\Delta\) 混淆)。由 \(\delta\approx\Delta P/\Delta S\),
令 \(\Delta x=\Delta S/S\) 为一天的百分比变化,则 \(\Delta P=S\delta\Delta x\)。有多个市场变量时,
\(S_i\) 为第 \(i\) 个市场变量的值,\(\delta_i\) 为组合对它的 delta。这与 (22.1) 的形式相同,只需令 \(\alpha_i=S_i\delta_i\)(即"delta 等价的股票头寸"),然后用 (22.2) 或 (22.3) 计算 \(\Delta P\) 的标准差。
金融直觉:这就是 CFA/FRM 里的 "delta-normal VaR"。delta 为 1,000 的期权组合,在股价小幅变动时,表现得像持有 1,000 股股票,即 \(1{,}000\times S\) 美元的股票头寸。于是期权组合的 VaR 就当作这笔"等价股票头寸"的 VaR 来算。它和用"修正久期 × 价格"把债券换算成对收益率的线性敞口(即 DV01 思路)是同一种一阶近似,因此也有同样的缺陷:变动大时忽略了曲率(对债券是凸性,对期权是 gamma)。
例 22.1:一个组合包含微软期权和 AT&T 期权,对微软的 delta 为 1,000,对 AT&T 的 delta 为 20,000;股价分别为 120 和 30 美元。则
相当于投资 12 万美元于微软、60 万美元于 AT&T。日波动率分别为 2% 和 1%,相关系数 0.3,\(\Delta P\) 的标准差(千美元)为
由 \(N(-1.645)=0.05\),5 天 95% VaR \(=1.645\times\sqrt5\times7{,}099=26{,}110\) 美元。
22.5 二次模型
Gamma 使分布偏斜
组合含有期权时,线性模型只是近似,它忽略了 gamma——组合价值与市场变量之间关系的曲率。
原书图 22.4 说明:gamma 为正时,组合价值变化的分布正偏;gamma 为负时负偏。具体地:
- 原书图 22.5:看涨期权多头(正 gamma)把一天后资产价格的正态分布映射为一个正偏的期权价值分布。期权价值是标的价格的凸函数,上涨时涨得越来越快,下跌时跌得越来越慢。
- 原书图 22.6:看涨期权空头(负 gamma)映射为负偏分布。
VaR 关键取决于分布的左尾:
- 正 gamma 组合的左尾比正态薄,若假设 \(\Delta P\) 正态,算出的 VaR 偏高;
- 负 gamma 组合的左尾比正态厚,正态假设下算出的 VaR 偏低。
后者更危险:卖出期权的组合(做市商、波动率卖方)恰恰是负 gamma 的,用 delta-正态法会系统性低估它们的风险。
金融直觉:用债券类比最直观。正凸性的普通债券,收益率上升时价格跌得比久期预测的少,收益率下降时涨得比久期预测的多,所以只用久期会高估下行风险,对应"正 gamma 时正态 VaR 偏高"。负凸性的 MBS 或可赎回债券恰好相反:利率下降时涨不动(被提前偿还或赎回),利率上升时照跌甚至跌得更多,只用久期会低估下行风险,对应"负 gamma 时正态 VaR 偏低"。卖期权的组合就是股票市场里的"负凸性资产"。
Delta-gamma 近似
由第 19b 章(原书第 19 章附录)的泰勒展开,单一资产的组合
(完整的展开是 \(\Delta P=\Theta\Delta t+\delta\Delta S+\frac12\gamma(\Delta S)^2\),实务中 \(\Theta\Delta t\) 很小,通常忽略。)令 \(\Delta x=\Delta S/S\):
有 \(n\) 个市场变量、每个工具只依赖一个变量时:
工具可能依赖多个变量时(如一篮子期权、外币计价的股票期权):
其中 \(\gamma_{ij}=\dfrac{\partial^2P}{\partial S_i\partial S_j}\) 称为交叉 gamma(cross gamma)。
矩与 Cornish–Fisher 展开
(22.7) 下 \(\Delta P\) 不再是正态的,不像 (22.1) 那样好用。但可以计算 \(\Delta P\) 的各阶矩,再用统计学中的 Cornish–Fisher 展开由矩估计分布的百分位(原书 Technical Note 10)。
单一变量、\(\Delta x\sim N(0,\sigma^2)\)(\(\sigma\) 为日波动率)时:
这些结果来自正态分布的矩 \(E(\Delta x^2)=\sigma^2\)、\(E(\Delta x^4)=3\sigma^4\)、\(E(\Delta x^6)=15\sigma^6\),奇数阶矩为零。例如 \(E(\Delta P^2)=S^2\delta^2\sigma^2+\frac14S^4\gamma^2\cdot3\sigma^4\)。
推导拆解:三阶矩的展开。记 \(a=S\delta\),\(b=\frac12S^2\gamma\),则 \(\Delta P=a\Delta x+b\Delta x^2\)。 用 \((u+v)^3=u^3+3u^2v+3uv^2+v^3\):\(\Delta P^3=a^3\Delta x^3+3a^2b\Delta x^4+3ab^2\Delta x^5+b^3\Delta x^6\)。 取期望,奇数次项 \(\Delta x^3,\Delta x^5\) 的期望为 0,剩下 \(3a^2b\cdot3\sigma^4+b^3\cdot15\sigma^6\)。 代回 \(a,b\):\(9\cdot S^2\delta^2\cdot\frac12S^2\gamma\sigma^4=4.5S^4\delta^2\gamma\sigma^4\);\(15\cdot\frac18S^6\gamma^3\sigma^6=1.875S^6\gamma^3\sigma^6\)。与正文一致。 要得到偏度,还需把"原点矩"换成"中心矩":三阶中心矩 \(=E\Delta P^3-3\mu E\Delta P^2+2\mu^3\)(\(\mu=E\Delta P\)),再除以标准差的三次方。代码中
skew一行就是这个公式。可以看出偏度的符号主要由 \(\gamma\) 的符号决定。
由前三阶矩可以算出均值 \(\mu_P\)、标准差 \(\sigma_P\) 和偏度 \(\xi_P\)。Cornish–Fisher 展开(只保留偏度项)给出 \(\Delta P\) 的 \(q\) 分位数近似为
其中 \(z_q\) 是标准正态的 \(q\) 分位数。偏度为负时(负 gamma),\(w_{0.01}\) 比 \(z_{0.01}=-2.326\) 更负,VaR 更大。原书 DerivaGem Sample Application E 实现了这一方法。
白话解释:Cornish–Fisher 是"给正态分位数打补丁"。正态时 1% 分位数在 \(-2.326\) 个标准差处;分布有偏度时,把这个位置挪一挪。挪多少由 \(\frac16(z_q^2-1)\xi_P\) 决定:\(z_{0.01}^2-1=4.41\),所以修正量约为 \(0.735\xi_P\)。例如偏度 \(\xi_P=-0.956\)("量化实战"中的组合),\(w_{0.01}\approx-2.326-0.703=-3.03\),分位数向左挪了约 30%,VaR 相应变大。这就是 FRM 里"modified VaR"的做法。展开只是近似,偏度很大或尾部很厚时会不准,那时应改用模拟。
22.6 蒙特卡洛模拟
模型构建法也可以用蒙特卡洛模拟(21b 章)生成 \(\Delta P\) 的分布。计算 1 天 VaR 的步骤:
- 用当前的市场变量值,按常规方法为组合估值;
- 从 \(\Delta x_i\) 的多元正态分布中抽样一次(用 21b 章的 Cholesky 方法);
- 用抽样的 \(\Delta x_i\) 确定一天后各市场变量的值;
- 用这些值按常规方法重估一天后的组合价值;
- 第 4 步减第 1 步,得到一个 \(\Delta P\) 样本;
- 重复第 2–5 步多次,构建 \(\Delta P\) 的概率分布。
VaR 就是该分布的相应百分位。例如有 5,000 个样本,1 天 99% VaR 是第 50 差的结果,95% VaR 是第 250 差的结果。与历史模拟一样,可以用**极值理论(extreme value theory)**平滑尾部,以更好地估计极端百分位。\(N\) 天 VaR 通常取 1 天 VaR 乘以 \(\sqrt N\)(组合含期权时这只是近似,但多数 VaR 方法实务中都这样做)。
缺点:速度慢。整个组合——可能包含数十万个工具——要重估很多次(Jamshidian & Zhu 1997 提出了限制重估次数的方法)。
部分模拟法(partial simulation approach):假设 (22.7) 描述了 \(\Delta P\) 与 \(\Delta x_i\) 的关系,从第 2 步直接跳到第 5 步,无须完整重估组合。每次试验只需计算一个二次型,速度快几个数量级。历史模拟法有时也采用类似的做法:用 delta-gamma 近似代替完整重估。
22.7 方法比较
| 模型构建法(方差-协方差) | 历史模拟法 | |
|---|---|---|
| 速度 | 很快 | 慢(每个情景要重估组合) |
| 分布假设 | 市场变量多元正态 | 无,由历史数据决定联合分布 |
| 厚尾 | 无法反映(表 20.1 显示实际日变化尾部远比正态厚) | 自然包含历史上出现过的厚尾 |
| 与波动率更新结合 | 容易(第 23 章的 EWMA、GARCH) | 不易(Hull & White 1998 给出了方法) |
| 利率工具 | 需要现金流映射 | 无须现金流映射 |
| 期权 | 需要 delta 或 delta-gamma 近似 | 可完整重估 |
| 特殊弱点 | 低 delta 组合效果差 | 窗口内的极端日主导结果;悬崖效应 |
关于"低 delta 组合效果差"(原书习题 22.21):如果组合 delta 接近零(例如做市商把 delta 对冲掉了),线性模型给出的 VaR 接近零,但组合仍有 gamma 和 vega 风险。这时线性模型完全失效,必须用二次模型或完整重估。
22.8 压力测试与回测
压力测试
**压力测试(stress testing)**估计组合在过去 10–20 年中最极端的市场变动下会有什么表现。
- 测试美国股市的极端变动:可以设所有市场变量的百分比变化等于 1987 年 10 月 19 日的变化(当天标普 500 变动了 22.3 个标准差)。如果认为太极端,可以用 1988 年 1 月 8 日(6.8 个标准差)。
- 测试英国利率的极端变动:可以用 1992 年 4 月 10 日(10 年期国债收益率变动 7.7 个标准差)。
情景也可以由高管提出:定期开会"头脑风暴",结合当前经济环境和全球不确定性,构想可能出现的极端情景。
压力测试的意义在于考虑那些偶尔确实会发生、但在假设的分布下几乎不可能发生的极端事件。例如日变动 5 个标准差的事件,在正态假设下大约 7,000 年才发生一次,而现实中每 10 年见到一两次并不罕见(比较表 20.1)。
2007–2008 年信用危机之后,监管者提出了压力 VaR:基于压力市场时期(如 2008 年)市场变量变动的历史模拟 VaR。
回测
**回测(back testing)**检验 VaR 估计在过去的表现,是 VaR 方法的重要现实检验。对 1 天 99% VaR,统计实际日损失超过当日 VaR 的天数比例(称为"例外"):
- 如果约为 1%,方法尚可接受;
- 如果是 7%,方法就很可疑。
把这个直观判断做成统计检验,常用的是 Kupiec(1995)的失败比例检验(本节补充,原书未展开):若 \(T\) 天中有 \(x\) 次例外,在"例外概率为 \(p\)"的原假设下,似然比统计量
近似服从自由度为 1 的 \(\chi^2\) 分布。
推导拆解:LR 统计量怎么读。 每一天"例外/不例外"是一次伯努利试验。若例外概率为 \(p\),观察到 \(T\) 天里恰好 \(x\) 次例外这组结果的似然(概率)正比于 \((1-p)^{T-x}p^x\)。 分母用样本例外率 \(\hat p=x/T\) 代入,这是"数据最支持的概率";分子用原假设的 \(p=1\%\) 代入。两者之比在 0 到 1 之间,越接近 1 说明原假设与数据越吻合。 取 \(-2\ln\) 把"比值接近 1"变成"统计量接近 0",并使它在大样本下近似服从 \(\chi^2(1)\)(自由度 1 是因为只检验一个参数 \(p\))。\(\chi^2(1)\) 的 5% 临界值是 3.84。 这与 CFA 里的假设检验逻辑相同:统计量超过临界值才拒绝原假设。"功效低"意味着第二类错误(模型有问题却没被发现)的概率很高。
这个检验的功效相当低:1,000 天里出现 14 次例外(期望 10 次),通常不足以拒绝原假设(见"量化实战")。这也是巴塞尔框架按例外次数分"绿区/黄区/红区"而非单纯做显著性检验的原因之一。
22.9 主成分分析
动机
利率曲线上的各个期限高度相关:10 年期利率上升时,7 年期和 30 年期利率几乎总是同向变动。直接用 8 个甚至更多期限的利率作为市场变量,既冗余又难以解释。主成分分析(principal components analysis, PCA)是处理一组高度相关的市场变量风险的标准统计工具。它用市场变量变动的历史数据,定义一组能解释这些变动的成分或因子。
示例:美元互换利率
数据:1、2、3、4、5、7、10、30 年期互换利率,2000–2011 年共 2,780 个日观测。原书表 22.7 给出八个因子(主成分)的因子载荷(factor loadings)。每个因子的载荷平方和为 1;所有载荷同时变号不改变因子的含义。前三个因子的载荷如下:
| 期限 | PC1 | PC2 | PC3 |
|---|---|---|---|
| 1 年 | 0.216 | −0.501 | 0.627 |
| 2 年 | 0.331 | −0.429 | 0.129 |
| 3 年 | 0.372 | −0.267 | −0.157 |
| 4 年 | 0.392 | −0.110 | −0.256 |
| 5 年 | 0.404 | 0.019 | −0.355 |
| 7 年 | 0.394 | 0.194 | −0.195 |
| 10 年 | 0.376 | 0.371 | 0.068 |
| 30 年 | 0.305 | 0.554 | 0.575 |
(PC4–PC8 的载荷见原书表 22.7。本教材依据的精读笔记中这几列的负号在文本抽取时丢失,无法可靠还原,因此不予列出,请直接查阅原书。)
三个因子的含义:
- PC1 ≈ 平行移动(shift):所有载荷同号且大小相近。一单位该因子使 1 年利率上升 0.216 个基点、2 年上升 0.331 个基点……
- PC2 = 扭转(twist),即斜率的变化:1–4 年的载荷为负,5–30 年为正,短端与长端反向变动。
- PC3 = 弯曲(bowing),即曲率的变化:短端(1、2 年)与长端(10、30 年)同向,中间期限反向。
原书图 22.7 画出了前三个因子。几乎任何国家的任何收益率曲线做 PCA,都能得到类似的结果。
因子得分与解释的方差
8 个利率、8 个因子,任何一天的利率变化都可以通过解一个 8 元线性方程组表示为因子的线性组合。某天某因子的数量称为该天的因子得分(factor score)。
因子的重要性由其因子得分的标准差衡量。原书表 22.8(单位:基点):
| 因子 | PC1 | PC2 | PC3 | PC4 | PC5 | PC6 | PC7 | PC8 |
|---|---|---|---|---|---|---|---|---|
| 得分标准差 | 17.55 | 4.77 | 2.08 | 1.29 | 0.91 | 0.73 | 0.56 | 0.53 |
1 个标准差的 PC1 对应 1 年利率变动 \(0.216\times17.55=3.78\) 个基点、2 年利率变动 \(0.331\times17.55=5.81\) 个基点,等等。
PCA 的两个关键性质:
- 因子得分在样本中互不相关。例如平移量与扭转量在 2,780 天中的相关系数为零。
- 因子得分方差之和等于原数据的总方差:
于是第一因子解释了 \(17.55^2/338.8=90.9\%\) 的方差,前两个因子解释了 \((17.55^2+4.77^2)/338.8=97.7\%\),第三个再解释 1.3%。利率变动的风险绝大部分由前两三个因子解释,因此可以把利率组合的风险与这几个因子挂钩,而不必管 8 个利率。
从线性代数的角度(第 01 册第 02b 章):因子载荷是利率变动协方差矩阵的特征向量,因子得分的方差是对应的特征值。因子得分不相关、方差可加,正是因为对称矩阵可以被正交矩阵对角化。
白话解释:把 PCA 想成"换一套坐标轴来描述利率曲线的变动"。原来的坐标轴是 8 个期限的利率,彼此高度相关,信息大量重叠。PCA 找出一组新坐标轴(因子载荷向量),满足三个条件:彼此垂直(载荷向量两两内积为 0,每个向量长度为 1,即"载荷平方和为 1");第一根轴方向上的波动最大;每根后续轴在与前面垂直的前提下波动最大。在新坐标下,利率变动 = \(\sum_k f_k\times(\text{第 }k\text{ 个载荷向量})\),\(f_k\) 就是因子得分。 "对角化"的金融含义:在新坐标下,协方差矩阵只剩对角线(各因子的方差),非对角元素(因子间的协方差)全为 0。所以算组合方差时,不再需要交叉项,直接把各因子的"敞口² × 方差"相加即可,这就是下面 VaR 计算只有两项平方和的原因。
用 PCA 计算 VaR
原书表 22.9 给出一个利率组合对各期限利率变动 1 个基点的价值变化(百万美元):
| 期限 | 3 年 | 4 年 | 5 年 | 7 年 | 10 年 |
|---|---|---|---|---|---|
| 价值变化 | +10 | +4 | −8 | −7 | +2 |
用前两个因子(解释 97.7% 的方差)。组合对第一个因子的敞口(百万美元/因子得分基点)为
对第二个因子的敞口为
设两个因子得分为 \(f_1,f_2\)(基点),则
因子得分互不相关,标准差见表 22.8,所以
1 天 99% VaR \(=18.48\times2.326=42.99\) 百万美元。
推导拆解:因子敞口为什么是"价值变化 × 载荷"的加总。 第一步,因子 1 得分为 \(f_1\) 时,期限 \(k\) 的利率变动为 \(\ell_{k1}f_1\) 个基点(\(\ell_{k1}\) 是 PC1 在期限 \(k\) 的载荷)。 第二步,组合对期限 \(k\) 每 1bp 的价值变化是 \(D_k\)(表 22.9 的数字,相当于各期限的 DV01),所以期限 \(k\) 带来的价值变化是 \(D_k\ell_{k1}f_1\)。 第三步,对所有期限求和:\(\Delta P=(\sum_kD_k\ell_{k1})f_1\),括号里就是对因子 1 的敞口 0.05。因子 2 同理得 \(-3.87\)。 第四步,\(\Delta P=0.05f_1-3.87f_2\) 是两个不相关随机变量的线性组合,方差就是 \(0.05^2\sigma_{f_1}^2+3.87^2\sigma_{f_2}^2\),没有协方差项。 这和 CFA 固定收益里的"关键利率久期"思路一致:先算每个期限的敞口,再按情景加总。PCA 的贡献是给出了"哪些情景最常见、各自多大"。
解读:这个组合几乎不暴露于第一个因子(平行移动),却显著暴露于第二个因子(扭转)——它是一个"做平坦化/陡峭化"的曲线交易。如果只用一个因子,会严重低估 VaR(原书习题 22.11);只考虑平行移动的久期法同样会严重低估。这正是 22.4 节说久期法"通常不够精确"的具体含义。
推广
PCA 原则上也可以用于利率以外的变量,例如多个股指:识别描述指数变动的几个因子,用最重要的几个代替原始指数做 VaR 分析。效果取决于变量之间的相关程度——相关性越高,少数因子解释的方差越多。由于 VaR 通常把组合变化与市场变量的百分比变化 \(\Delta x_i\) 联系起来,对百分比变化而非绝对变化做 PCA 可能更合适。
量化实战
本章内容在量化交易中的用途
- 风控系统。方差-协方差 VaR、历史模拟 VaR、蒙特卡洛 VaR 是量化基金和自营交易风控系统的标准模块。实现细节——多币种数据按本币对齐、只用共同交易日、滚动 501 天窗口、百分位插值规则、现金流映射到标准期限节点——本章都有对应。
- 组合构建与风险归因。\(\sigma_P^2=\boldsymbol w^{\mathsf T}\Sigma\boldsymbol w\) 是均值-方差优化、风险平价、风险预算的核心。把组合 VaR 按欧拉公式分解为各资产的成分 VaR(\(\text{CVaR}_i=\alpha_i\,(C\boldsymbol\alpha)_i/\sigma_P\times z\sqrt N\),各项之和恰为组合 VaR),可以回答"风险来自哪里",这是分散化收益的细化(本节补充,原书未展开)。
- 统计风险因子。PCA 是构建统计风险模型、利率曲线因子(水平/斜率/曲率)、降维协方差估计的基础工具。"因子得分不相关、方差可加"让风险归因变得简单。
- 期权组合风险。delta-gamma 近似、交叉 gamma、部分模拟法是期权做市风险系统常用的快速重估技术;低 delta 组合必须用非线性方法。
- 模型验证。VaR 回测(例外率检验)、压力测试情景(1987、2008 等历史日)是策略上线和风控审核的必备环节。表 22.4 显示单个极端日(雷曼破产)可以主导历史模拟的尾部。
Python 示例:四种 VaR 计算与回测
代码分六部分:(1) 复算 22.3–22.4 节的方差-协方差 VaR、分散化收益、例 22.1,并给出成分 VaR 分解;(2) 用模拟的厚尾(多元 \(t\))数据做历史模拟 VaR 和 ES,与同一数据的正态 VaR 比较(这里的数据是随机生成的,不是原书的真实指数数据);(3) 负 gamma 期权组合的二次模型:delta-正态、Cornish–Fisher、部分模拟三种 VaR,并用模拟验证矩公式;(4) 复算原书表 22.9 的 PCA VaR;(5) 在模拟的收益率曲线数据上做 PCA,观察平移、扭转因子;(6) Kupiec 回测。
import numpy as np
from scipy.stats import norm, chi2
rng = np.random.default_rng(7)
z99, z95 = norm.ppf(0.99), norm.ppf(0.95)
# ---------- 1. 模型构建法:22.3–22.4 节 ----------
alpha = np.array([10.0, 5.0]) # 百万美元:微软、AT&T
vol = np.array([0.02, 0.01]); rho = 0.3
C = np.array([[vol[0]**2, rho*vol[0]*vol[1]], [rho*vol[0]*vol[1], vol[1]**2]])
sigP = np.sqrt(alpha @ C @ alpha)
var_ind = z99*np.sqrt(10)*alpha*vol
var_p = z99*np.sqrt(10)*sigP
print("单资产10天99%%VaR(百万) %s, 组合 %.4f, 分散化收益 %.4f" % (np.round(var_ind, 4), var_p, var_ind.sum() - var_p))
# 成分 VaR(欧拉分解):各资产贡献之和 = 组合 VaR
comp = alpha*(C @ alpha)/sigP * z99*np.sqrt(10)
print("成分VaR", np.round(comp, 4), "合计", round(comp.sum(), 4))
# 例 22.1:期权组合的 delta 线性化
a1 = np.array([120*1000, 30*20000])/1000 # 千美元
s1 = np.sqrt(a1 @ C @ a1)
print("例22.1 sigma=%.3f千美元 5天95%%VaR=%.0f美元" % (s1, z95*np.sqrt(5)*s1*1000))
# ---------- 2. 历史模拟法(用模拟的厚尾数据代替真实数据) ----------
pos = np.array([4000, 3000, 1000, 2000]) # 千美元:四个指数
Corr = np.array([[1, .5, .5, .2], [.5, 1, .7, .3], [.5, .7, 1, .3], [.2, .3, .3, 1]])
dvol = np.array([0.012, 0.013, 0.014, 0.015])
L = np.linalg.cholesky(Corr)
nu = 4 # 多元 t,自由度 4:厚尾
n = 500
zz = rng.standard_normal((n, 4)) @ L.T
w = rng.chisquare(nu, size=(n, 1))/nu
ret = zz/np.sqrt(w) * dvol*np.sqrt((nu-2)/nu) # 缩放使日标准差 = dvol
loss = -(ret @ pos) # 500 个情景下的损失(千美元)
srt = np.sort(loss)[::-1]
hs_var = srt[4] # 第 5 大损失
hs_es = srt[:5].mean()
cov_hat = np.cov(ret.T)
norm_var = z99*np.sqrt(pos @ cov_hat @ pos)
print("\n历史模拟 1天99%%VaR = %.1f, ES = %.1f, 10天VaR = %.1f (千美元)" % (hs_var, hs_es, hs_var*np.sqrt(10)))
print("同一数据的正态(方差-协方差)VaR = %.1f" % norm_var)
print("最大的 5 个损失:", np.round(srt[:5], 1))
# ---------- 3. 二次模型:空头期权组合 ----------
S, sd = 100.0, 0.02 # 日波动率 2%
delta, gamma = -30.0, -5.0 # 组合 delta、gamma(负 gamma)
m1 = 0.5*S**2*gamma*sd**2
m2 = S**2*delta**2*sd**2 + 0.75*S**4*gamma**2*sd**4
m3 = 4.5*S**4*delta**2*gamma*sd**4 + 1.875*S**6*gamma**3*sd**6
var_ = m2 - m1**2
skew = (m3 - 3*m1*m2 + 2*m1**3)/var_**1.5
zq = norm.ppf(0.01)
zcf = zq + (zq**2 - 1)*skew/6 # Cornish–Fisher(只保留偏度项)
cf_var = -(m1 + zcf*np.sqrt(var_))
lin_var = -zq*abs(S*delta*sd)
x = rng.standard_normal(1_000_000)*sd
dP = S*delta*x + 0.5*S**2*gamma*x**2 # 部分模拟(delta-gamma 关系)
mc_var = -np.quantile(dP, 0.01)
print("\n二次模型 均值 %.3f 标准差 %.3f 偏度 %.3f" % (m1, np.sqrt(var_), skew))
print(" 1天99%%VaR: delta-正态 %.2f | Cornish-Fisher %.2f | 部分模拟 %.2f" % (lin_var, cf_var, mc_var))
print(" 模拟矩检验: E=%.3f E2=%.2f(公式 %.2f) E3=%.1f(公式 %.1f)" % (dP.mean(), (dP**2).mean(), m2, (dP**3).mean(), m3))
# ---------- 4. 用 PCA 计算 VaR:表 22.9 例 ----------
load = {3: (0.372, -0.267), 4: (0.392, -0.110), 5: (0.404, 0.019), 7: (0.394, 0.194), 10: (0.376, 0.371)}
expo = {3: 10, 4: 4, 5: -8, 7: -7, 10: 2} # 每 1bp 的价值变化(百万)
e1 = sum(expo[k]*load[k][0] for k in expo); e2 = sum(expo[k]*load[k][1] for k in expo)
sd_f = np.array([17.55, 4.77])
sig_dp = np.sqrt((e1*sd_f[0])**2 + (e2*sd_f[1])**2)
print("\nPCA 因子敞口 %.2f, %.2f sigma=%.2f 1天99%%VaR=%.2f 百万" % (e1, e2, sig_dp, z99*sig_dp))
print(" 只用第一个因子: VaR=%.2f" % (z99*abs(e1)*sd_f[0]))
allsd = np.array([17.55, 4.77, 2.08, 1.29, 0.91, 0.73, 0.56, 0.53])
print(" 方差解释比例:", np.round(np.cumsum(allsd**2)/np.sum(allsd**2), 3))
# ---------- 5. 在模拟收益率曲线数据上做 PCA ----------
mats = np.array([1, 2, 3, 4, 5, 7, 10, 30])
lvl = np.ones(8); slope = (np.log(mats) - np.log(mats).mean()); slope /= np.linalg.norm(slope)
curv = -(np.log(mats) - np.log(5))**2; curv -= curv.mean(); curv /= np.linalg.norm(curv)
F = rng.standard_normal((2780, 3))*np.array([16.0, 5.0, 2.0])
dY = F @ np.vstack([lvl/np.sqrt(8), slope, curv]) + rng.standard_normal((2780, 8))*0.8
evals, evecs = np.linalg.eigh(np.cov(dY.T))
order = np.argsort(evals)[::-1]; evals, evecs = evals[order], evecs[:, order]
evecs *= np.sign(evecs[-1]) # 统一符号:30 年载荷为正
scores = (dY - dY.mean(0)) @ evecs
print("\n模拟曲线 PCA 因子得分标准差:", np.round(np.sqrt(evals[:4]), 2))
print(" 前三因子累计解释:", np.round(np.cumsum(evals)[:3]/evals.sum(), 3))
print(" PC1 载荷:", np.round(evecs[:, 0], 2))
print(" PC2 载荷:", np.round(evecs[:, 1], 2))
print(" 因子得分相关(PC1,PC2) = %.4f" % np.corrcoef(scores[:, 0], scores[:, 1])[0, 1])
# ---------- 6. 回测:Kupiec 例外率检验 ----------
def kupiec(x, T, p=0.01):
ph = x/T
lr = -2*((T-x)*np.log(1-p) + x*np.log(p) - ((T-x)*np.log(1-ph) + x*np.log(ph)))
return lr, chi2.sf(lr, 1)
T = 1000
r_t = rng.standard_t(4, T)*0.01*np.sqrt(2/4) # 真实为 t 分布,日波动 1%
exc = np.sum(-r_t > z99*0.01) # 正态 VaR 的例外
lr, pv = kupiec(exc, T)
print("\n回测 %d 天: 正态99%%VaR 例外 %d 次(期望 %d) Kupiec LR=%.2f p=%.4f" % (T, exc, T//100, lr, pv))
关键输出:
单资产10天99%VaR(百万) [1.4713 0.3678], 组合 1.6201, 分散化收益 0.2190
成分VaR [1.4364 0.1837] 合计 1.6201
例22.1 sigma=7.099千美元 5天95%VaR=26111美元
历史模拟 1天99%VaR = 228.2, ES = 280.6, 10天VaR = 721.6 (千美元)
同一数据的正态(方差-协方差)VaR = 216.0
最大的 5 个损失: [399.8 293.8 249.2 232. 228.2]
二次模型 均值 -10.000 标准差 61.644 偏度 -0.956
1天99%VaR: delta-正态 139.58 | Cornish-Fisher 196.75 | 部分模拟 193.57
模拟矩检验: E=-9.995 E2=3896.84(公式 3900.00) E3=-338059.8(公式 -339000.0)
PCA 因子敞口 0.05, -3.88 sigma=18.52 1天99%VaR=43.08 百万
只用第一个因子: VaR=2.04
方差解释比例: [0.909 0.977 0.989 0.994 0.997 0.998 0.999 1. ]
模拟曲线 PCA 因子得分标准差: [16.04 5.17 2.12 0.82]
前三因子累计解释: [0.882 0.974 0.989]
PC1 载荷: [0.35 0.35 0.35 0.35 0.36 0.36 0.36 0.36]
PC2 载荷: [-0.56 -0.31 -0.17 -0.07 0.01 0.13 0.26 0.69]
因子得分相关(PC1,PC2) = 0.0000
回测 1000 天: 正态99%VaR 例外 14 次(期望 10) Kupiec LR=1.44 p=0.2306
读输出:
- 方差-协方差法:微软 1.4713、AT&T 0.3678、组合 1.6201 百万美元,分散化收益 0.219 百万,与原书完全一致;例 22.1 得 26,111 美元(原书 26,110,舍入差异)。成分 VaR 显示:微软头寸贡献了组合 VaR 的约 89%,AT&T 只贡献约 11%——AT&T 的单独 VaR(0.368)有一半被分散掉了。
- 历史模拟:在厚尾的模拟数据上,第 5 大损失(228.2)高于同一数据算出的正态 VaR(216.0),ES(280.6)又显著高于 VaR。最大的一个损失(399.8)远超其他——这与原书表 22.4 中雷曼破产日的作用类似。
- 二次模型:对 delta \(-30\)、gamma \(-5\) 的组合,delta-正态 VaR 为 139.6,而考虑 gamma 后的部分模拟 VaR 为 193.6,低估约 28%。只用前三阶矩的 Cornish–Fisher 近似(196.8)已经相当接近。模拟的二、三阶矩与原书公式吻合,验证了矩公式。
- PCA VaR:第二个因子的精确敞口是 \(-3.878\),原书取 \(-3.87\),所以本代码给出的 \(\sigma\) 为 18.52、VaR 为 43.08,略高于原书的 18.48、42.99。只用第一个因子时 VaR 只有 2.04 百万——低估了 95%。
- 模拟曲线 PCA:我们用"平移 + 斜率 + 曲率 + 噪声"生成的数据,PCA 恢复出了近似均匀的 PC1 载荷和单调的 PC2 载荷,因子得分的样本相关系数为 0(这是 PCA 的代数性质,不是巧合)。
- 回测:真实分布是 \(t(4)\) 而 VaR 按正态计算,1,000 天中出现 14 次例外(期望 10 次),但 Kupiec 检验的 \(p\) 值为 0.23,无法拒绝"模型正确"。回测的统计功效有限,不能单独作为模型验证的依据。
本章小结
VaR 用"我们有 \(X\%\) 把握未来 \(N\) 天损失不超过 \(V\)"概括组合的总风险,是损失分布的分位数;它不说明超过 \(V\) 时损失多大,预期亏损(ES)弥补了这一缺陷,并且满足一致性风险度量的次可加性。监管资本基于 10 天 99% VaR,乘数至少为 3;\(N\) 天 VaR 通常取 1 天 VaR 乘以 \(\sqrt N\)。历史模拟法用过去 500 个日变化构造情景,第 5 大损失即 1 天 99% VaR,无须分布假设和现金流映射,但计算慢、受窗口内极端日主导、难以纳入波动率更新。模型构建法假设组合变化与市场变量百分比变化线性相关且后者多元正态,此时 \(\sigma_P^2=\boldsymbol\alpha^{\mathsf T}C\boldsymbol\alpha\),VaR \(=2.326\sigma_P\sqrt N\),计算快,但低估厚尾;利率工具要做现金流映射,期权要用 delta 线性化(\(\alpha_i=S_i\delta_i\))或 delta-gamma 二次模型。正 gamma 组合在正态假设下 VaR 偏高,负 gamma 偏低;二次模型可用矩加 Cornish–Fisher、完全蒙特卡洛或部分模拟计算。压力测试覆盖分布假设之外的极端事件,回测检验例外率。利率曲线的 PCA 得到平移、扭转、弯曲三个因子,解释约 99% 的方差;因子得分互不相关,组合 VaR 可以只用少数因子算出,而只看平移的久期法会严重低估曲线交易的风险。
| 概念/公式 | 内容 |
|---|---|
| VaR 定义 | \(P(L>\text{VaR})=1-X\%\);监管:\(N=10\),\(X=99\),资本 \(=k\times\)VaR,\(k\ge3\) |
| 预期亏损 | \(\text{ES}=E[L\mid L>\text{VaR}]\);一致性风险度量 |
| 时间缩放 | \(N\) 天 VaR \(=\sqrt N\times\) 1 天 VaR(i.i.d. 零均值正态时精确) |
| 历史模拟 | 情景 \(v_n\,v_i/v_{i-1}\);500 情景中第 5 大损失 = 1 天 99% VaR |
| 日波动率 | \(\sigma_{day}=\sigma_{year}/\sqrt{252}\) |
| 线性模型 | \(\Delta P=\sum\alpha_i\Delta x_i\),\(\sigma_P^2=\boldsymbol\alpha^{\mathsf T}C\boldsymbol\alpha\),VaR \(=z_X\sigma_P\sqrt N\) |
| 分散化收益 | 各头寸 VaR 之和 − 组合 VaR |
| 期权线性化 | \(\alpha_i=S_i\delta_i\) |
| 二次模型 | \(\Delta P=\sum S_i\delta_i\Delta x_i+\frac12\sum\sum S_iS_j\gamma_{ij}\Delta x_i\Delta x_j\) |
| 单变量矩 | \(E\Delta P=0.5S^2\gamma\sigma^2\);\(E\Delta P^2=S^2\delta^2\sigma^2+0.75S^4\gamma^2\sigma^4\) |
| gamma 与偏差 | 正 gamma:正态 VaR 偏高;负 gamma:偏低 |
| 现金流映射 | 把现金流分配到标准期限零息债 |
| PCA | 载荷 = 协方差矩阵特征向量;得分不相关,方差和 = 总方差;平移/扭转/弯曲 |
| 回测 | 例外率应接近 \(1-X\%\) |
练习
基础
-
一个组合包含两项资产,价值分别为 30 万和 50 万美元,日波动率分别为 1.8% 和 1.2%,相关系数 0.3。求 5 天 99% VaR。 提示:\(\sigma_P=\sqrt{5400^2+6000^2+2\times0.3\times5400\times6000}\) 美元,VaR \(=2.326\times\sqrt5\times\sigma_P\)(原书习题 22.1 的类型)。
-
解释 VaR 与预期亏损的区别。举一个两组合 VaR 相同、ES 显著不同的例子。 提示:比较一个正态分布的组合与一个"99% 概率小赚、1% 以下概率巨亏"的卖期权组合(原书习题 22.8)。
-
用 1 天 99% VaR 为 200 万美元,在什么假设下 10 天 99% VaR 为 632 万美元?如果日收益存在正的一阶自相关,10 天 VaR 应该更大还是更小? 提示:i.i.d. 零均值正态;正自相关时 \(N\) 天收益的方差大于 \(N\) 倍日方差,VaR 更大。
-
一个外汇期权组合对英镑汇率的 delta 为 56.0(单位:每 1 美元汇率变动对应的组合价值变化,单位千美元),当前汇率 1.50,日波动率 0.7%。写出 \(\Delta P\) 与 \(\Delta x\) 的线性关系并求 10 天 99% VaR。 提示:\(\Delta P=1.50\times56.0\,\Delta x=84\Delta x\)(千美元),标准差 \(84\times0.007=0.588\),10 天 99% VaR \(=2.326\times\sqrt{10}\times0.588\approx4.33\) 千美元(delta 56.0 取自原书习题 22.3,汇率与波动率为本教材设定)。
-
在上题中,若组合的 gamma 为 16.2,写出二次关系,并说明正态假设下的 VaR 是偏高还是偏低。 提示:\(\Delta P=84\Delta x+\frac12\times1.5^2\times16.2\,(\Delta x)^2=84\Delta x+18.225(\Delta x)^2\);正 gamma,正态 VaR 偏高(gamma 16.2 取自原书习题 22.4)。
进阶
-
某银行组合对 1 年、2 年、3 年利率变动 1 个基点的价值变化分别为 +5、−2、+3 百万美元。用表 22.7 的前两个因子和表 22.8 的标准差,计算 1 天 99% VaR。只用第一个因子时结果如何? 提示:PC1 敞口 \(5\times0.216-2\times0.331+3\times0.372=1.534\);PC2 敞口 \(5\times(-0.501)-2\times(-0.429)+3\times(-0.267)=-2.448\);\(\sigma=\sqrt{(1.534\times17.55)^2+(2.448\times4.77)^2}\)。
-
为什么组合的 delta 接近零时,模型构建法会严重低估风险?举一个具体的期权组合例子,用二次模型说明。 提示:delta 对冲后的卖出跨式组合:\(\delta\approx0\),\(\gamma<0\),线性模型 VaR ≈ 0,但 \(\Delta P=\frac12S^2\gamma(\Delta x)^2\) 总是负的,VaR 由 \(\gamma\) 决定(原书习题 22.21)。
-
对一个看涨期权空头 + 看跌期权空头的组合(同一标的),分别用 (a) delta 线性法、(b) 部分模拟法(delta-gamma)、(c) 完全重估蒙特卡洛法计算 10 天 99% VaR。设计参数并用 Python 实现,比较三者差异。 提示:完全重估需要对每个模拟的 \(S\) 用 BSM 重新定价;三者的差异会随期限缩短、执行价靠近当前价而增大(原书习题 22.20)。
-
证明成分 VaR 的欧拉分解:若 \(\text{VaR}(\boldsymbol\alpha)=z\sqrt{\boldsymbol\alpha^{\mathsf T}C\boldsymbol\alpha}\),则 \(\sum_i\alpha_i\dfrac{\partial\,\text{VaR}}{\partial\alpha_i}=\text{VaR}\)。 提示:VaR 是 \(\boldsymbol\alpha\) 的一次齐次函数,由欧拉齐次函数定理即得;\(\partial\text{VaR}/\partial\boldsymbol\alpha=zC\boldsymbol\alpha/\sigma_P\)。
-
用"量化实战"中的历史模拟代码,改用 GARCH 型的波动率聚集数据(例如先模拟一段低波动期再接一段高波动期),比较滚动 500 天窗口的历史模拟 VaR 与用最近 60 天估计波动率的正态 VaR 对波动率上升的反应速度。这对理解压力 VaR 有什么启发? 提示:历史模拟对波动率变化反应迟钝(所有 500 天权重相同);Hull & White (1998) 的波动率调整历史模拟、第 23 章的 EWMA 可以解决这一问题。
原书推荐习题:22.1、22.17(方差-协方差 VaR 与分散化收益的基础计算);22.3、22.4、22.18(delta 线性化与 delta-gamma 二次模型,理解 gamma 对尾部的影响);22.10(外汇远期分解为两只零息债的 VaR);22.11、22.19(用 PCA 因子计算利率组合 VaR,比较因子个数的影响);22.20(delta 法、部分模拟、完全模拟三种 VaR 的对比,适合编程);22.14、22.15、22.22(用作者网站数据实现历史模拟 VaR);22.21(低 delta 组合下模型构建法失效的原因);22.8(VaR 与预期亏损的概念区别)。另有 22.2(处理利率工具的三种方法)、22.7(互换的现金流映射)、22.12、22.13(delta、gamma、vega 组合的 VaR 模型)、22.16(久期模型的缺陷)可供选做。
原书对照
| 本章小节 | 原书章节 | PDF 页码 |
|---|---|---|
| 章首导言 | Chapter 22 introduction | p.517 |
| 22.1 VaR 度量 | 22.1 The VaR Measure(含 Business Snapshot 22.1、时间跨度) | p.517–520 |
| 22.2 历史模拟法 | 22.2 Historical Simulation(表 22.1–22.4,图 22.3) | p.520–524 |
| 22.3 模型构建法 | 22.3 Model-Building Approach | p.524–527 |
| 22.4 线性模型 | 22.4 The Linear Model(表 22.5、22.6,例 22.1) | p.527–532 |
| 22.5 二次模型 | 22.5 The Quadratic Model(图 22.4–22.6) | p.532–534 |
| 22.6 蒙特卡洛模拟 | 22.6 Monte Carlo Simulation | p.534–535 |
| 22.7 方法比较 | 22.7 Comparison of Approaches | p.535–536 |
| 22.8 压力测试与回测 | 22.8 Stress Testing and Back Testing | p.536 |
| 22.9 主成分分析 | 22.9 Principal Components Analysis(表 22.7–22.9,图 22.7) | p.536–540 |
| 小结、延伸阅读 | Summary, Further Reading | p.540–541 |
| 习题 | Practice Questions 22.1–22.22 | p.541–543 |
延伸阅读:Artzner, Delbaen, Eber & Heath (1999) 一致性风险度量;Basak & Shapiro (2001);Boudoukh, Richardson & Whitelaw (1998) 历史模拟与 RiskMetrics 的结合;Dowd (1998)《Beyond Value at Risk》;Duffie & Pan (1997) VaR 综述;Embrechts, Klüppelberg & Mikosch (1997) 极值理论;Hull & White (1998) 两篇(波动率更新纳入历史模拟;非正态下的 VaR);Jackson, Maude & Perraudin (1997);Jamshidian & Zhu (1997) 情景模拟;Jorion《Value at Risk》;Longin (2001);Marshall & Siegel (1997);Neftci (2000) 极值理论;Rich (2003)。波动率与相关系数的估计见本册第 23 章。