蒙特卡洛模拟法计算 VaR 的场景生成技术

作者: , 共 1656 字
系列:VaR Primer

查看该系列所有文章

一个场景是所有风险因子的表现序列。历史场景是指风险因子在历史上某天的实际表现,随机场景则是计算机随机模拟生成的。通常蒙特卡洛模拟法需生成至少 1000 个随机场景,然后计算组合在每个场景下的损益,最后取 5%分位点得到组合的 VaR 值。

由于蒙特卡洛法所需要的随机场景较多,场景的生成速度非常重要。下面介绍标准计算模型、技术改进和一些更进一步的技术改进方向。

注:下面只讨论如何生成「一个」随机场景。要生成多个,简单重复即可。

1. 标准模型

前面已经提到过一种随机场景生成方法:假设风险矩阵  \( \Sigma\)\( N\times N\) 的半正定矩阵,其中\( N\) 为风险因子的个数。它可分解为\( \Sigma=C'C\) ,那么可以生成因子场景为:

$$r=C'z$$

其中\( z\) 为随机数的向量,为独立的正态分布。

这是标准的场景生成模型。但如果严格按照尚需步骤走会有以下问题:

  • 需要生成中间的风险矩阵,如果风险因子\( n\) 较大,保存和计算这个风险矩阵所需要计算和内存资源较大。
  • 计算\( \Sigma=C'C\) 的分解比较费时。
  • 上述计算是不稳定的,这体现在两个方面:
    1. 当增加一个新的风险因子(持仓),上述分解需要全部重算,效率较低;
    2. 当增加一个新的风险因子(持仓)时,即使使用同样的随机数,上面的计算结果将截然不同,比如同一个持仓在不同组合里面计算的 VaR 将不一样。

2. 技术改进

模型仍然是上面那个模型,但关键支持在于\( C\) 的生成算法。若\( \Sigma\) 是任意的半正定矩阵,我们别无它法。但需要注意这里的\( \Sigma\) 比较特殊。

假设\( n\) 个风险因子过去\( T\) 天的的收益率组成一个\( T\times N\) 的矩阵\( D\) ,其中\( T\) 为计算 VaR 的样本长度。那么有

$$\Sigma = \frac{1}{T}D'D$$

亦即\( \frac{D}{\sqrt{T}}\) 就是上面我们所需要的一个\( C\) 。我们只需要生成满足正态分布的\( T\times 1\) 的随机数向量\( z\) ,然后\( \frac{D'z}{\sqrt{T}}\) 就是我们需要的一个场景。

这中间不需要计算风险矩阵,也不需要做半正定矩阵的分解。计算的时间复杂性从\( N^3\) 下降到\( NT\) ,空间复杂性从\( N^2\) 下降到\( NT\) ,均有数量级上的下降。比如如果风险因子数量超过 1 万,在一年的样本下,计算速度将加快 40 万倍,内存使用量少 40 倍

抛开上面的数学,场景\( \frac{D'z}{\sqrt{T}}\) 有更直观的解释,它事实上是风险因子的历史场景的随机组合。这么理解蒙特卡洛方法,是不是简单多了?

要保存这种随机组合很简单,每个场景只需要保存\( T\) 个随机数,而且它跟风险因子的个数完全无关,这也彻底解决了上面提到的计算不稳定的情况。

当然,这种角度也有局限性。那就是无法直接对风险矩阵(也就是相关性)进行任何调整。

3. 更进一步的改进方向

为了更进一步地提升效率,以及提高蒙特卡洛模拟法在不同样本期间计算的稳定性,有更进一步的改进或简化。

首先,为了提高在不同样本期间计算的稳定性,我们在最开始就生成足够长的随机字符串。第一天计算使用前\( T\) 个随机数,第二天使用从第二个随机数开始的\( T\) 个随机数,依次类推。这样计算第一天 VaR 使用的场景和计算第二天 VaR 使用的场景中有部分随机因素是重叠的,这可以大大降低由于场景变动较大带来的蒙特卡洛 VaR 不稳定的现象。

其次,我们还可以做更进一步地简化,比如随机场景不是过去样本期间所有场景的随机组合,而是其中某两个场景的组合,这样计算复杂性可进一步降低;同时,当计算第二天的 VaR 时,并不更换全部的随机场景,而是只用最新的行情数据更新少数几个场景,这样也可以降低场景生成成本。

Q. E. D.

系列: VaR Primer »
对于一个组合(比如一些债券的现券),假设使用另外一个资产(比如国债期货)进行对冲,那么不同的对冲数量下,组合 VaR 值的变化将如下图蓝线所示,对冲资产的增量 VaR将如红色线所示:
类似文章:
风险管理 » VaR Primer
回顾 VaR 的定义,\( F\) 为未来收益的累计分布函数,那么
风险管理 » VaR Primer
在计算 VaR 之前,需要先明确所计算 VaR 的参数。最重要的两个参数为时间期限和置信度,前者对应所需衡量风险的时间段,后者对应风险的容忍度。
风险管理 » VaR Primer
在一个大型的组合中,有成千上万只不同的证券,但不同证券的价格可能受到同样的因素所驱动,比如同一个国家的债券几乎都受到该国的基准利率所影响。为了简化 VaR 的计算,通常将那些最根本的因素挑选出来,这些因素被称为风险因子。根据风险因子的状态,计算证券的价格被称为估值。
风险管理 » VaR Primer
VaR 衡量一个投资的收益的分位点,衡量未来在一定概率上的损失情况,但某些时候还不够,比如说卖出一个深度价外期权,它的 VaR 为 0 ,但这不代表它没有风险。这类风险被称为尾部风险,可以用 ES 来衡量。
对于一个组合(比如一些债券的现券),假设使用另外一个资产(比如国债期货)进行对冲,那么不同的对冲数量下,组合 VaR 值的变化将如下图蓝线所示,对冲资产的增量 VaR将如红色线所示:
相似度: 0.132
BASEL 的框架要求所有使用内部模型法计量市场风险必须要进行回溯测试。回溯测试可以:
VaR 随着市场的变动是一件让风险管理者为难的事情:
相似度: 0.106
风险管理 » VaR Primer
投资者和投资组合管理者面临着各种各样的风险,包括市场风险、信用风险、流动性风险和操作风险等。市场风险是指因为股票价格、利率、汇率、商品价格的变动带来的风险,是投资者面临的最直接的风险,往往也是其它风险的导火索。VaR 是用来衡量市场风险的主要工具之一。
风险管理用到的指标通常有两种计算方式,一种是事前的( ex ante ),一种是事后的( ex post )。
这个 Excel 模板使用参数法和历史法计算资产组合的VaR,两个函数分别是 ParaVaR 和 HistVaR ,是以前写的VaR Primer的一个实现。具体使用方法可参考模板以及 VBA 的代码注释。
之前对普通 Excel 文件,我都保存为默认的 xlsx 格式,带 vba 的保存为 xlsm 格式。最近从同事那里见到一个高大上的 excel 文件格式: xlsb。我学习了一下,觉得甚为强大,在此推荐一下。
比特币协议里使用了 ECDSA (椭圆曲线签名算法),我之前以为它和基于大数分解的 RSA 公钥密码体系差不多。这两天看了下维基百科,才发现它们之间的差异挺大。