微信号:QuantJiang

介绍:量化交易,衍生品分析,风险管理,金融编程的学习实践随笔.

期权定价的常用数值方法

2016-08-07 07:24 Jiang

这是一个老题目了,希望在这里对所有的数值方法进行一个梳理。按照我个人的分类,期权定价的数值方法分为五个大类:解析解方法,树方法,偏微分方程数值解方法,蒙特卡洛方法,傅立叶变换方法。

1)解析解方法:

一个期权定价问题,其实就是根据已知的随机微分方程(SDE)模型,然后来求解关于这个随机过程函数表达式的过程。这也是为什么随机微积分和Ito lemma会是金融工程的核心知识之一,因为Ito直接告诉了我们一个随机过程的函数所满足的新SDE:

然后,如果我们可以求出这个SDE的解析解,那么一个欧式无路径依赖期权的价格就是它在终值时刻折现的期望值。这就是一种期权定价的解析解方法,当然你也可以利用PDE来求解,由于Feynman Kac定理的存在,PDE和条件期望的答案会是一致的。

而这类方法的优点是显而易见的,一旦解析解存在,那么期权的价格公式计算速度就会非常之快,不论做拟合还是优化都会有效率上质的提升,而这类方法的缺点也很明显,那就是,对于大部分模型和大部分奇异期权,解析解未必存在。

2)树方法

之所以叫树方法而不叫二叉树,是因为我们也将讨论三叉树模型,但其实本质思想是一模一样的。

如果告知你了一个标的资产的波动率,那么你可以通过下述式子构造一个N段的二叉树的上下波动:

然后利用逆推,来得到初始时刻的期权价格。

那么三叉树呢?首先要明白一个道理,除了满足了下列条件的三叉树模型(u是上叉,d是下叉,l是中叉)


其余的三叉树都是incomplete market。在其余的树模型下,我们只能做到super-replicate,而不能完成perfect hedge。而这独有的一种三叉树模型,也成为了最常用的树模型之一。或许有人好奇为什么有二叉树了,还有人使用更麻烦的三叉树。这是因为三叉树的收敛速度要高于二叉树。


那么树模型的优缺点又是什么呢?树模型有一个任何连续时间模型都无法取代的优点,那就是每一个定价,在树模型里,不论美式、欧式、路径依赖、奇异,通过Backward Induction Principle得到价格,永远都是伴随着显式对冲策略的。而在连续时间模型里,想获得连续时间对冲策略的这类问题,是一个倒向随机微分方程(BSDE)问题,有很多时候并不是那么好解决的,尤其是当期权有奇异或美式属性的时候。

另一方面,树模型缺点也显而易见,高维度问题树模型是不能解决的,所以对于多个标的资产的问题,尤其是具有相关系数的资产,我们只能诉之于他法。而从速度上来讲,树模型的收敛速度是要低于PDE方法的。

3)PDE方法

很多对于quantitative finance陌生的人也会听说过Black Scholes PDE。而实际上,不同的随机模型,都会对应不同的PDE。BS PDE只不过是单资产符合几何布朗运动随机模型的PDE表达罢了。因为对于期权,我们往往知晓它最终到期日的payoff,所以我们用payoff函数来作为这个PDE的终值条件。

如果PDE存在解析解,最优办法自然也是求解析解。然而,如果解析解不存在,我们就必须诉诸数值方法。最常用的数值解方法就是有限差分,也就是将所有变量构造一个网格,然后利用网格上的差分方法来估计偏导数,进而将PDE问题转化为代数问题。而对于期权定价的PDE,我们会根据期权的性质,获得这个PDE终值条件和边值条件。然而,有时候根据不同的模型,我们可能得到的并不是一个简单的PDE,而可能是PIDE(partial integral differential equation),也就是在PDE中多了积分项,这时候,我们需要同时再借助数值积分来完成数值计算。

PDE的数值问题自然还有很多的选择,有限元、谱方法都在列。但期权定价PDE本身并不像很多物理PDE有很大的非线性程度,边界也并没有那么奇怪,所以基本上有限差分是可以解决绝大部分问题的。

有限差分法分三种:显式差分,隐式差分,交错差分。我们不深入研究算法,但几个点就是:稳定性上,显式差分是条件稳定的,另外两种都是无条件稳定;计算复杂度上,显示最简单,隐式次之,交错最繁琐;精确性上,显式、隐式是同阶的,交错差分的特殊情形,显式和隐式各占一半时,也就是Crank-Nicolson差分,精度会在时间上也上升一阶。

另外,在期权定价中PDE有两大类,正向和倒向。传统的BS PDE就是倒向的一个典型例子,它的终值条件就是期权的payoff function。而一个倒向PDE所对应的正向PDE,它不再是期权价格满足的PDE,而是这个标的的“价格密度”所满足的PDE。这个“价格密度”被称为State price,或者Arrow Debreu price,抑或是Green function。而这个在我之前的一篇文章有介绍过,知乎链接是:https://zhuanlan.zhihu.com/p/21378441?refer=quantjiang


而PDE方法的缺点主要有两点:路径依赖问题,高维度问题。很多路径依赖问题的PDE形式是很麻烦,甚至无法表达的,比如亚氏期权,比如回望期权。而对于高维度问题,如果PDE的数值方法会从平面网格上升到空间网格,在复杂度上不但繁琐,而且在边值条件上更难以控制。而PDE的优点则是速度快,而且根据差分的数值方法,在计算Greeks的时候不需要加以再次的bumping计算。举个例子,如果不降维,一个具有两个assets的期权的有限差分就是这样的一个立方网格:


4)蒙特卡洛方法

蒙特卡洛方法是目前应用范围最广泛的方法了。因为不存在提前行权属性的期权价格其实就是一个期望,所以我们就可以通过模拟很多的路径,来用平均数估计真实期望。而美式或百慕大这种具有提前行权属性的期权,它的期权价格其实是一个随机优化问题。这类问题我们可以采用regression-based Monte Carlo,也就是最小二乘蒙特卡洛,利用regression来估计conditional NPV,然后再用蒙特卡洛求解当前价值。

所以说,蒙特卡洛方法是最为general的方法了。然而,蒙特卡洛的缺点也是显而易见:因为要模拟上百万条路径,而且对于奇异期权还要做路径上的计算,美式更要做回归,蒙特卡洛方法成为了计算时间长的代名词。但幸运的是,我们有三种提速的方法:1,利用方差缩减,在保证方差恒定的基础上,可以减少模拟路径;2,利用Multi-level 蒙特卡洛,减少complexity;3,利用GPU或超级计算机,进行并行计算。

对于普通蒙特卡洛方法,上述三种方法都是可行的,而且GPU的提速是非常显著的。对于方差缩减,得强调一点的就是,一般而言,最简单的方式是对偶变量,其次是控制变量,然后是利用条件期望,最难的是importance sampling,而在效果和适用范围上,它们的排序往往是刚好相反的。比如美式期权的最小二乘蒙特卡洛,方差缩减的最有效手法就是important sampling,其他方法的效果很小。

这里另外再着重强调一下最小二乘蒙特卡洛。最小二乘蒙特卡洛的流程大致如下:首先,正向模拟标的路径;其次,倒向在每个时间节点,对所有路径值进行回归,估算条件期望,直到初始时间点;最后,求平均。所以值得注意的一点就是,在这里,如果单纯使用GPU cluster进行提速,效果并不是很理想,因为路径模拟并不是最消耗时间的步骤,对所有路径回归才是。虽然如此,但其实还是可以用GPU cluster来对回归精度加以提升,比如可以将路径进行归类,然后将global regressor转换成多个local regressor。

总的来说,蒙特卡洛方法是期权定价中适用范围最广的数值方法,但也是最慢的方法。然而,我们可以利用方差缩减、复杂度缩减,以及GPU计算来优化我们的蒙特卡洛算法,达到提速与增加精确性的目的。

5)傅立叶方法

傅立叶方法也被称为特征函数法,利用的就是对于很多的模型,它们的特征函数往往是显式表达的,比如靠具有independent increment的infinitely divisible process来决定的模型,因为在这样的情况下,我们有Levy-Khintchine representation,很多拟合性质很好的过程,比如Variance Gamma,Normal Inverse Gaussian都属于这一类。而特征函数实际上可以看作是一个随机变量的傅立叶变换,这也就是这个名字的由来。

如果我们有显式表达的特征函数,我们可以通过傅立叶逆变换来得到原随机变量的密度,进而达到求解期权价格的目的。一般来讲,这样的方法要比PDE方法更加快速,因为数值积分的速度要比微分方程数值解的速度要快。然而,这类方法的缺陷也是显而易见的,路径依赖性和维度问题,以及我们必须要有显式表达的特征函数。

总结:

在这里,我们只讲一些面上的东西。具体深入的东西,我会陆陆续续以专题为单位地在这里更新。最近实在是忙得焦头烂额,下周有一个deadline,还有一个presentation,忙完之后会稍微地轻松一周,然后又要开始忙碌了。还是谢谢关注我专栏和微信公众号的朋友们!



 
Jiang的金融窝 更多文章 场外交易的中央清算机构:对手信用风险的可能出路 求敏感度(Greeks或Sensitivities)的常用算法 三天搞定Python基础功,Day 3统计入门篇
猜您喜欢 ThoughtWorks设计总监吴琳叶:低资源背景下设计挑战【峰会演讲实录】 Redis内部数据结构详解(4)——ziplist C++11新特性 Part1 这些APP在APPSTORE要卖几千块....... JSR166,JSR166x,JSR166y,JSR166e与JDK5,6,7,8并发包的关系