金融工程高度概览

2019-07-05 10:17:17 浏览数 (1)

金融工程核心内容可由下图高度概括:

整个流程图分为 6 大模块,除了开始的“数据参数”模块,后 5 个模块都有相对应的函数。

模块一:数据参数

模块二:变量计算 (获取函数 I)

模块三:曲线构建 (拔靴函数 B)

模块四:模型校正 (校正函数 C)

模块五:产品估值 (估值函数 M)

模块六:风险计量 (风险函数 L)

这张流程图是我对金融工程理解的浓缩,十年磨一图,相信会对从事金工的读者有所帮助,下面请允许我娓娓道来。

1

数据参数

It is a capital mistake to theorize before one has data. -- Sherlock Holmes

数据永远是重要的,对金融工程也不例外。这个数据可以细分成三类:

  • Θmkt(t): 每天直接观察到的市场数据
    • 存款利率、利率期货价格、掉期利率
    • 利率上限和掉期期权的波动率
    • 外汇即期、外汇掉期点、外汇期权波动率
    • 商品期货价格、商品期权波动率
    • 股票即期价格、权益期权波动率
    • 信用违约掉期基差
  • Θprm(t): 从历史数据推断或交易员制定的额外参数
    • Libor 定盘价 (历史数据点)
    • CMS 和 FX 的相关性系数 (历史数据序列)
    • 短利率的均值回归率 (κ = 0.01)
  • Θnum(t): 数值方案的数值参数
    • 蒙特卡洛的模拟路径 (N = 5,000)
    • 有限差分的网格点数 (N = 1,000)
    • 最优化误差容忍度 (ε = 10-5)

一些要点如下:

  • 市场数据 Θmkt(t) 是流动性最强的,每天观察都在变
  • 额外参数 Θprm(t),比如 κ,在没有极端市场条件时每半个月校正一次,或者直接由交易员给出
  • 数值参数 Θnum(t) 主要考量一个精度和耗时的平衡,不如蒙卡路径越多计算产品的价值当然越精准,但是也耗费时间和计算机资源

有了数据参数之后,就可以进行后面 4 个串行模块的操作了,如下图:

在讨论它们之前,我们先来了解“变量计算”这个模块,因为它在所有其他模块中都用到。

2

变量计算 - 获取函数

Let's look at the first principles and get back to basics. -- Elon Musk

变量指的是金融市场的基础变量 (fundamental variable),常见的变量包括

  • 折现因子(discount factor)
  • 零息债价格(zero-coupon bond price)
  • 零息利率(zero rate)
  • 远期利率(forward rate)
  • 掉期利率(swap rate)
  • 波动率(volatility)

利率型变量都是时间 t 的函数,而波动率有的是时间 t 的函数,有的是时间 t 和行权价格 K 的函数。获取函数 (Extraction) 可以看成是一个可以求出

  • 任意 t 点对应的利率的函数
  • 任意 t 和 K 点的波动率的函数

因此获取函数等同于内插函数 (interpolation) 和外插函数 (extrapolation)。核心理念就是从市场已有的标准点对应的变量内插或外插出非标准点对应的变量

下面我们来看两个例子是如何生成零息债价格和波动率的。

零息债价格

从期限维度上进行线性内插 (linear interpolation) 来获取零息债价格

零息债价格是最基础的变量,有了它,我们可以轻易的求出任何时点的远期利率和掉期利率,如下:

波动率

从期权期限和执行价格两个维度上进行线性内插 (linear interpolation) 及平外插 (flat extrapolation) 来获取波动率

总结

在“变量计算”模块中,获取函数 I 将市场数据 Θmkt(t) 转换成各种基础变量。

I(Θmkt(t)) = {P, F, S, σ}

在金融工程系列,之后我会专门写一贴《市场基础变量计算》,也会详细介绍各种内插外插的方法以及讨论它们的优劣性。

3

曲线构建 - 拔靴函数

Curve boostrapping is full of dilemmas and puzzles as market evolves. -- Dan Li

曲线环境的发展经历了两个阶段:

  1. 单曲线环境 (2007 年之前)
  2. 多曲线环境 (2007 年之后)

故事是这样的,在 2007 年金融危机之前 (pre-crisis):

  • Libor 被公认的无风险利率,在衍生物交易时双方不用放抵押品。因此 Libor 曲线既可以用来折现现金流 (discount curve),又可以用来计算远期利率指标 (index curve)
  • 单货币基差(basis spread) 非常小
    • 如果忽略它,那么指标曲线只有一条
    • 如果不忽略它,那么指标曲线定义为基准曲线 (benchmark curve),此外还有若干条指标曲线 (根据单货币基差推出)
  • 跨货币基差 (cross-currency basis spread) 非常小
    • 如果忽略它,不需要做任何事情
    • 如果不忽略它,需要推出非美元那端的折现曲线,而该曲线用在外汇产品定价上

在 2007 年金融危机之后 (post-crisis):

  • Libor 不再是无风险利率,在衍生物交易时双方要放抵押品。因此隔夜利率互换 (overnight index swap, OIS) 曲线用来折现现金流 (discount curve),而 Libor 只能用来计算远期利率指标 (index curve)
  • 对单货币基差和跨货币基差的处理方式和金融危机之前一样

由此可见,“单曲线”指的就是折现曲线和基准指标曲线是相同条线;而“多曲线”指的就是折现曲线和基准指标曲线是不同曲线。而从这个两个曲线环境中,生成一系列曲线的过程叫做拔靴 (Bootstrapping)。具体过程就是

  1. 选取若干个市场流动性最强的产品,比如短期是存款,中期是利率期货,长期是利率掉期。
  2. 按照到期日长短排序,从短到长一个个推出市场产品对应的零息债价格。

文字读起来非常枯燥难懂,核心思想就是有三种构建曲线框架,由易到难:

  1. 单曲线环境 (忽略基差)
  2. 单曲线环境 (考虑基差)
  3. 多曲线环境 (考虑基差)

1. 单曲线环境 (忽略基差)

该曲线构建框架最简单,只需两个步骤就可以生成所有曲线:

  1. 根据每个货币利率市场产品构建出该货币的折现曲线 (指标曲线)
  2. 根据美元和非美元的掉期点 (swap point) 构建出在外汇产品中非美元的折现曲线

利率市场曲线

根据流动性来选取用来构建曲线的市场产品,它们覆盖窗口一般来说有:

  • 存款:从今天到 1 年
  • 远期利率合约:1 月到 2 年
  • 利率期货:3 月到 2 年
  • 利率掉期:2 年到 60 年

这些覆盖窗口会重叠:

  • 如果完全重叠用流动性来筛选市场产品,比如在1年到2年之间利率期货比远期利率合约流行性要高,那么会优选利率期货
  • 如果部分重叠即可用一种插值的方式将其连起,这也是一种拔靴过程

在单曲线而忽略基差时:

  • 折现曲线就是指标曲线
  • 没有 3M, 6M, 12M 指标曲线之分,一条指标曲线可以计算所有期限的远期利率

外汇市场曲线

在外汇市场,通常都是美元做基准

  • 美元端的现金流用美元利率市场拔靴出来的曲线来折现
  • 非美元端的现金流用利率平价公式推出的曲线来折现

利率平价公式如下:

需要强调的是,外汇远期在 1 年之外的流动性不好,因此在外汇产品估值时要慎用 1 年之外的非美元的曲线来折现现金流。

2. 单曲线环境 (考虑基差)

该曲线构建框架复杂一些,需要三个步骤生成所有曲线:

  1. 根据每个货币利率市场产品构建出该货币的折现曲线 (基准曲线)
  2. 根据每个货币利率基差市场产品构建出该货币的指标曲线
  3. 根据 a) 美元和非美元的掉期点和 b) 跨货币基差市场产品构建出在外汇产品中非美元的折现曲线

由于上图比较复杂,我们将其分解成利率市场外汇市场两个部分来分析。

利率市场曲线

当利率基差不能被忽略时,不同期限的远期利率不能用同一条指标曲线来计算。比如 1M 和 3M 的远期利率是由 1M 指标曲线和 3M 指标曲线得出来的。首先明晰两个概念:

  • 基准曲线:每个货币的利率掉期的浮动端 (floating leg) 都对应一个特定期限的Libor, 比如 USD 是Libor 3M, EUR 是 Euribor 6M, JPY 是 Libor 6M。它们是各货币对应的最活跃浮动利率,因此叫做基准利率,而对应的曲线叫做基准曲线。
  • 指标曲线:对应着基准曲线,还有一些非基准曲线,称为指标曲线,比如 USD 的 Libor 1M, Libor 6M, Libor 12M, EUR 的 Euribor 3M, Euribor 12M, JPY 的 Libor 1M, Libor 3M,它们的流动性和基准利率比相对差一些。

而利率利差指的是基准利率 (USD Libor 3M) 和非基准利率 (USD Libor 6M) 之间的差价,原来几乎可以忽略不计,因此可以用一条曲线来计算这两个远期利率,而现在需要用

  • USD Libor 3M 基准曲线
  • USD Libor 3M6M 的基差

构建 USD Libor 6M 的曲线。

外汇市场曲线

在没有跨货币基差时,外汇产品折现曲线完全是由掉期点和利率平价公式推出来的,但是掉期点只在 1 年之内流动性强,这就造成 1 年之外的曲线都不可用。而跨货币基差掉期就是来构建 1 年之外的曲线的。

市场跨货币基差掉期都是一端是 USD Libor 3M,另一端是 CUR Libor 3M (其中 CUR 代表非美元)。有一点复杂的是,并不是所有的 Libor 3M 都是基准曲线,比如 EUR Euribor 6M 和 JPY Libor 6M。那么在构建首先外汇产品折现曲线前,首先需要该货币的利率基差掉期来构建对应的指标曲线,比如 EUR Euribor 3M 和 JPY Libor 3M。

生成的外汇产品折现曲线 (1年之外) 和由利率平价生成的 (1年之内) 合并,命名为 CUR Implied 曲线,比如

  • EUR Implied
  • JPY Implied
  • HKD Implied
  • AUD Implied

3. 多曲线环境 (考虑基差)

该曲线构建框架是 2007 年金融危机后的标准,需要四个步骤生成所有曲线:

  1. 根据每个货币隔夜利率市场产品构建出该货币的折现曲线
  2. 根据每个货币利率市场产品构建出该货币的折现曲线 (基准曲线)
  3. 根据每个货币利率基差市场产品构建出该货币的指标曲线
  4. 根据 a) 美元和非美元的掉期点和 b) 跨货币基差市场产品构建出在外汇产品中非美元的折现曲线

此框架看似很复杂,和前一个框架真正的核心变化就是将折现曲线和基准曲线区分开,因此构建过程多出用隔夜 (overnight, ON) 利率市场产品构建折现曲线这一步,后面的步骤和前一个框架一样。

总结

在“曲线构建”模块中,拔靴函数 B 将市场数据 Θmkt(t) 转换成各种货币曲线各种期限的折现因子:

B(Θmkt(t)) = PCUR,Y(0,t)

其中

CUR = 货币标签 USD, EUR, JPY, GBP 等

Y = 曲线类型 ON, 1M, 3M, 6M, 12M 等

目前曲线构建的大框架已经讲得很清楚,之后我会事无巨细写两贴关于曲线构建细节的技术性文章,包括《单曲线构建》和《多曲线构建》。

4

模型校正 - 校正函数

Calibration is an inverse procedure in which we now the answer and want to find the problem. -- Paul Wilmott

在折现曲线生成完之后,就可以用各种模型来对产品进行估值了。模型都是带有参数的,这些参数值可不是主观定下来的,而是通过校正出来的。

模型校正是选择模型中的参数使得市场流动性强的交易价格 (市场价格) 和模型输出 (模型价格) 完全匹配或尽可能接近。校正函数 (Calibration) 可以看成是一个可以根据市场交易价反推出模型参数的函数。

假设市场 m 个行权价格 K 和 n 个到期日 T 对应的欧式期权 V (总共 m·n 个),定义模型参数集为 Θmdl(t) ,根据不同情况,模型校正可转换成以下最优化问题

每种目标函数都有自己的长短处,比如用:

  • 绝对价格 – 目标函数简单在最优化时高效,但是对于深价内 (deep in-the-money, ITM) 期权和深价外 (deep out-of-the-money, OTM) 期权,它们绝对价格数值规模可能相差很远,比如 10 美元和 0.1 美元。即使深价外期权模型和市场价格差的很远也不过 0.1 美元左右,因此整个优化过程重心都放在拟合深价内期权 (因为它们数值较大)。
  • 相对价格 – 目标函数简单在最优化时高效,而且对于深价内或深价外期权都写成一个回报率的形式,数值规模一致。
  • 绝对波动率 – 波动率数值规模一致,但是在解模型波动率时涉及到一个反解 Black-Scholes 的动作,而且此动作发生在最优化过程中,会降低整个优化效率。
  • 带权重 – 用户可能觉得某列期权 (比如价中, ATM) 比较重要而想把它们校正准,因此赋予较大的权重值。

下图展示股权类 (SABR)、商品类 (Schwartz)、利率类 (Hull-White) 和外汇率 (Heston) 的模型校正实例。

总结

在“模型校正”模块中,校正函数 C 将

  • 市场数据 Θmkt(t)
  • 额外参数 Θprm(t)
  • 曲线 PCUR,Y(0,t)

转换成模型参数 Θmdl(t)。

C(Θmkt(t), Θprm(t), PCUR,Y(0,t)) = Θmdl(t)

关于模型校正详情,请参阅我写过的《模型校正》一贴。

5

产品估值 - 估值函数

The goal of quantitative pricing is to compute the expectation according to different methodologies, each of which gives rise to a different specialization of quantitative financial pricing. -- Domingo A. Tavella

所有金融产品估值问题都是一个计算其未来支付函数期望的问题。该期望是“在一个合适的等价物资产 N 生成出来的概率测度”下的期望,运用到一连串“状态价格 - 无风险套利 - 等价物 - 测度转换”推导出估值公式,如下图所示:

金融产品估值的目标就是计算这个期望,主流方法有三:

  • 解析和数值积分法 (closed-form, numerical integration)
  • 偏微分方程有限差分法 (PDE finite difference)
  • 蒙特卡洛模拟法 (Monte Carlo simulation)

有人会分类成五种,额外还有树方法 (tree) 和傅里叶方法 (Fourier),我不包括它们的原因如下:

  • 树 (三叉树) 就是有限差分的显式格式 (fully explicit scheme) 的一个特例,而且由于一些稳定性原因,能用“有限差分”永远不要用“树”。
  • 傅里叶方法实际是利用转换和逆转换来推导出公式,最终可能一个数值积分形式,因此属于第一种方法的子集。

假设原生资产价格的随机微分方程 (SDE) 为

和衍生品在到期日 T 时候的支付函数 V(T)。

解析和数值积分

该方法是效率最高效的,但该方法对数学推导和技巧的要求也是最高的。如果欧式期权在某个复杂模型有解析解或数值积分解,那么会大大提高模型校正的效率,因此我们会不遗余力的推导出解析解或数值积分解。

在 Black-Scholes 模型下,资产价格服从对数正态分布,欧式期权都有解析解;在 Heston 模型下,用傅里叶转换可推出欧式期权最终成一个数值积分形式 (下图红色圆圈)。

推导解析解或数值积分解通常需要以下方法或技巧 (都不是很容易):

  • 伊藤公式 (Itô's Formula)
  • 吉尔萨诺夫定理 (Girsanov’s Theorem)
  • 矩匹配 (moment matching)
  • 漂移项插值 (drift interpolation)
  • 参数平均 (parameter averaging)

但是解析或数值积分并不是万金油

  • 比如计算百慕大 (Bermudan) 期权或者亚式一篮子 (Asian Basket) 期权就不够用了,这个时候偏微分方程有限差分蒙特卡洛模拟就是必须的。
  • 比如推导窗口式障碍 (Window Barrier) 和触碰 (Touch) 期权的解析解时,就需要相当大的功夫,这个时候用偏微分方程有限差分蒙特卡洛模拟就友好多了。

小结,解析或数值积分法

  • 好处是快、高效、便于校正
  • 坏处是推导门槛高、不适用复杂产品

偏微分方程有限差分

费曼卡兹定理 (Feynman-Kac Theorem) 是随机微分方程和偏微分方程的纽带。不像解析解那样对原生资产价格分布情况做文章,有限差分直接将微分方程离散成差分方程来解。

下图总结了有限差分里的五大核心步骤:

  1. 确定方程解域 (solution domain)
  2. 建立网格 (grid construction)
  3. 终值和边界条件 (terminal and boundary condition)
  4. 离散空间和时间变量 (spatial and time discretization)
  5. 有限差分格式 (finite difference scheme)

偏微分方程有限差分适用范围很广。对于同一模型,它的偏微分方程的形式是一样的,对于不同产品,只需要改变终止和边界条件。举例:

  • 在解析解法下,欧式期权和障碍期权的解法难度是不能比的
  • 在有限差分法下,欧式期权和障碍期权的解法难度是一样的

小结,偏微分方程有限差分

  • 好处是比较快、对不同产品的方法通用
  • 坏处是不适用非马可尔夫过程、高度路径相关支付函数,和高维度问题

蒙特卡洛模拟

回顾金融产品估值公式

根据大数定理 (Law of Large Number),如果 Y1, Y2,…, Yn 是一系列独立同分布 (i.i.d) 随机变量,那么它们的样本均值 (sample mean) 极限为总体均值 (population mean) 或真实均值。

上述结果是蒙特卡洛的发展根基。说白了蒙特卡洛方法就是一种计算期望的方式,就两步:

  1. 在测度 N 下从V(T)/N(T) 分布中独立生成 n 个样本:V1/N1,…, Vn/Nn
  2. 求 n 个样本的平均值

这样 V(0) 的估计量 (estimator) 可以由样本均值来表示:

上式是否收敛呢?中心极限定理 (Central Limit Theorem) 告诉你是的。定理如下:

在蒙特卡洛用在金融应用时,通常选取很大的 n,因此上面正态分布的结论成立 (当 n 小于 100 时为了精确只能用学生分布)。给定置信水平 (confidence level) 1-α,那么总体均值有 1-α 的可能性落进下面区间 (置信区间)

其中 zα/2 是一个标准正态分布的百分数。

把总体均值类比于期权真实值,把样本均值类比蒙卡模拟值,这样我们改写上面的上式,则期权真实值有 (1-α) 的可能性落进下面区间

上式显示着一个好消息和坏消息:

  • 好消息是随着 n 增大,样本标准差越小,蒙卡模拟值越接近真实值
  • 坏消息是随着 n 增大,这种减小样本误差方式的效果越来越差 (n 的平方根)

假设我们算出一个期权价值的置信区间是

(1.2381, 1.2857)

我们只弄对了小数点后第一位,显然结果不够精确,如果要弄对小数点后第二位,这个置信区间要缩短 10 倍,那么我们需要 100n 个样本;如果要弄对小数点后第三位,这个置信区间要缩短 100 倍,那么我们需要 10000n 个样本。这种暴力法 (brute-force) 虽然最终能够算的足够精确,但是花费了太多算力和资源。两种方法可以改进:

  1. 用更好的采样来缩减方差 (variance reduction)
  2. 用低差异序列 (low-discrepancy sequence, LCG)

缩减方差

为了提高蒙卡精度,目标就是减小样本标准差

由上式可知,该目标可以有 a) 增大样本数和 b) 直接减小方差。方法 a 因为太暴力已被弃用,而缩减方差就就是方法 b。它的核心里面是“保持估计量的均值不变,减小其方差”,给定一组 i.i.d 样本 Y = {Y1, Y2,…, Yn},我们希望采样一组新的样本 Ynew ={Y1new, Y2new,…, Ynnew},使得:

最通用的方差缩减有以下五种,一些采用基本常识 (common sense),一些采用专业技巧 (technical trick):

  1. 对偶变量 (Antithetic Variates)
  2. 控制变量 (Control Variates)
  3. 条件抽样 (Conditioning Sampling)
  4. 分层抽样 (Stratified Sampling)
  5. 重要抽样 (Imporance Sampling)

越简单的方法只需要常识,比如对偶变量,但是效果不佳。越复杂的方法越需要专业知识,比如重要性抽样,但是也越有效。由于内容太多,本帖不细细展开,用一张图来总结这五种方差缩减方法。

低差异序列

高效的生成在高维空间分布均匀的随机数是在计算机程序中非常常见的组成部分。对于一切需要采样的算法来说,分布均匀的随机数就意味着更加优秀的样本分布,从而提高蒙特卡洛积分收敛的效率。

首先明晰均匀分布里的“均匀”指的是什么。一个直观的理解可以看下面的图片,左边为伪随机数 (pesudo-random number) 的二维点集,右边则是由低差异序列 (LCG) 的二维点集。很明显右图的点对整个空间的覆盖更加完整。

直觉来看,分布越均匀的点集,任意区域内的点集数量占点总数量的比例也会越接近于这个区域的体积 (discrepancy 越小)。

常见的低差异序列 (LCG) 有 Halton 序列和 Sobol 序列,它们的生成机制有些复杂,需要用到进制数和 radical inversion。好在很多软件都有直接生成的函数,我觉得这部分会用比彻底搞懂 LCG 如何生成的实用的多。

小结,蒙特卡洛模拟法

  • 好处是适用于任何产品,暴力法实施简单
  • 坏处是效率不高、达到一定精度 (尤其是敏感度计算) 需要很强的技巧

总结

总结,在“产品估值”模块中,估值函数 M 将

  • 模型参数 Θmdl(t)
  • 数值参数 Θnum(t)

转换成产品价值 V(t)。

M(Θmdl(t),Θnum(t)) = V(t)

之后我会先介绍各种资产类的《定价模型高度概览》,然后对估值方法专门写三贴《解析法和数值积分法》,《偏微分方程有限差分法》和《蒙特卡洛模拟法》。

6

风险计量 - 扰动函数

It is always preferable to be roughly hedged against a board set of eventualities than exactly hedged against a narrow parameter. -- Marty O'Connell

当计算出金融产品的价值 V 后,交易员或者风险经理想知道的是

  • V 在市场环境变动一点时的变换大小 (敏感度)
  • V 在一年 99% 可能的最大损失 (风险价值)

这些市场上风险因子的变动都由扰动函数 (Perturbation) 来实现。

敏感度

敏感度 (sensitivity) 通常用的是一种重估法 (bump and revalue),核心思想就是

  1. Bump 步骤:对 V 的第 k 个风险因子 Θk 加上扰动 Δ
  2. Revalue 步骤:重估 V 的值
  3. 用重估值和原值做差分

公式如下:

只要能计算 V,直接用上面差分公式计算敏感度不能更简单了。表面看是这样的,但是在实际问题中,假如

  1. 用蒙特卡洛计算一个亚式期权现值 V 本身就是有误差,那么计算它的敏感度误差会更大,有些时候甚至需要很多条路径才能收敛
  2. 用蒙特卡洛计算一个数字期权现值 V,它的支付函数本身就不连续,那么计算它的敏感度困难更大
  3. 一个 10 年的百慕大期权的敏感度可能有 40 多个,每次用 bump and revalue 的方法需要运行其定价模型至少 40 次,太过耗时

解决上面三个问题的方法为:

  1. 路径导数 (pathwise derivative) 方法
  2. 似然比率 (likelihood ratio) 方法
  3. 自动微分 (algorithmic differentiation) 方法

由于这些方法专业性较强,我会在以后的帖子全方位诠释。关于这三种方法的一些剧透:

  1. 路径导数:把导数的期望转成期望的导数
  2. 似然比率:对概率函数求微分
  3. 自动微分:用计算图一次性地获得所有参数的敏感度

风险价值

风险价值 (value-at-risk, VaR) 是资产组合在持有期间内在给定的置信区间内由于市场价格变动所导致的最大预期损失的数值。

比如一个交易组合的 1-day (持有期), 99% (置信区间) 的 VaR 是 1 亿 CNY,它意思是在下一天该组合的损失有 99% 的概率不会超过 VaR 值,也就是 1 亿 CNY。

VaR 的计算方法通常有三种

  1. 历史模拟法
  2. 参数法
  3. 蒙卡模拟法

上图解释了用历史模拟法计算 VaR 的重要步骤:

1. 识别组合里面的头寸

比如USDJPY即期,EUR利率掉期,大豆期权等等

2. 识别风险因子

比如 USDJPY 即期,EUR 折现曲线,大豆波动率平面等,对应上图的 {RF1, RF2, …, RFn}

3. 收集风险因子的历史数据

根据历史窗口 1 年 (250工作日) 和 10 天持有期,因此需要 260 (250 10) 天的历史数据,以第 i 个因子则对应上图的 {RFi1, RFi2, …, RFi260}

4. 计算风险因子的扰动

根据风险因子类别计算 10 天的变动

绝对变动 (利率因子) = RFij 1 - RFij

相对变动 (波动率因子) = RFij 1 / RFij

最终得到 n 个因子的 250 组变动,以第 i 个因子则对应上图的 {Δi1, Δi2, …, Δi250}

5. 构建历史情景

将第 m 组变动施加在今天的风险因子,模拟出第 m 组市场情景 (遵循假设“如果第 m 组市场变动发生了,今天的市场情景会是怎样”),对应上图的 {S1m, S2m,…, Snm}

6.计算组合现值和损益

在每组市场情景下对组合里的头寸估值,对应上图的 {PV1, PV2, …, PV250},减去原始 PV 得到损益,对应上图 {P&L1, P&L2, …, P&L250}

7. 计算风险价值

将 250 个损益按升序排列,找索引为 250·(1-99%) = 2.5 的值,也就是索引为 2 和 3 的均值,即为 VaR

总结

在“风险计量”模块中,扰动函数 L 将

  • 产品价值 V(t)
  • 市场数据 Θmkt(t)
  • 数值参数 Θnum(t)

转换成风险指标。

P(V(t), Θmkt(t), Θnum(t)) = {∂V/∂Θ, P&L, VaR}

之后我会专门写两贴《敏感度计算》和《风险价值计算》。

7

总结

牢记这张图!牢记这张图!牢记这张图!

回顾一下拔靴(B),校正 (C),估值(M)和扰动 (L) 函数的输入和输出

B(Θmkt(t)) = PCUR,Y(0,t)

C(Θmkt(t), Θprm(t), PCUR,Y(0,t)) = Θmdl(t)

M(Θmdl(t), Θnum(t)) = V(t)

L(V(t), Θmkt(t), Θnum(t)) = {∂V/∂Θ, P&L, VaR}

0 人点赞