金融工程核心内容可由下图高度概括: 整个流程图分为 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 曲线环境的发展经历了两个阶段: 单曲线环境 (2007 年之前) 多曲线环境 (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. 单曲线环境 (忽略基差) 该曲线构建框架最简单,只需两个步骤就可以生成所有曲线: 根据每个货币利率市场产品构建出该货币的折现曲线 (指标曲线) 根据美元和非美元的掉期点 (swap point) 构建出在外汇产品中非美元的折现曲线 利率市场曲线 根据流动性来选取用来构建曲线的市场产品,它们覆盖窗口一般来说有: 存款:从今天到 1 年 远期利率合约:1 月到 2 年 利率期货:3 月到 2 年 利率掉期:2 年到 60 年 这些覆盖窗口会重叠: 如果完全重叠用流动性来筛选市场产品,比如在1年到2年之间利率期货比远期利率合约流行性要高,那么会优选利率期货 如果部分重叠即可用一种插值的方式将其连起,这也是一种拔靴过程 在单曲线而忽略基差时: 折现曲线就是指标曲线 没有 3M, 6M, 12M 指标曲线之分,一条指标曲线可以计算所有期限的远期利率 外汇市场曲线 在外汇市场,通常都是美元做基准 美元端的现金流用美元利率市场拔靴出来的曲线来折现 非美元端的现金流用利率平价公式推出的曲线来折现 利率平价公式如下: 需要强调的是,外汇远期在 1 年之外的流动性不好,因此在外汇产品估值时要慎用 1 年之外的非美元的曲线来折现现金流。 2. 单曲线环境 (考虑基差) 该曲线构建框架复杂一些,需要三个步骤生成所有曲线: 根据每个货币利率市场产品构建出该货币的折现曲线 (基准曲线) 根据每个货币利率基差市场产品构建出该货币的指标曲线 根据 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 年金融危机后的标准,需要四个步骤生成所有曲线: 根据每个货币隔夜利率市场产品构建出该货币的折现曲线 根据每个货币利率市场产品构建出该货币的折现曲线 (基准曲线) 根据每个货币利率基差市场产品构建出该货币的指标曲线 根据 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) 的模型校正实例。 总结 |