求助,如何用R语言实现期权定价二叉树模型

Python0113

求助,如何用R语言实现期权定价二叉树模型,第1张

二项期权定价模型假设股价波动只有向上和向下两个方向,且假设在整个考察期内,股价每次向上(或向下)波动的概率和幅度不变。模型将考察的存续期分为若干阶段,根据股价的历史波动率模拟出正股在整个存续期内所有可能的发展路径

什么是R语言?应该如何开始学习/使用R语言呢?

学习R有几个月了,总算是摸着了一点门道。

写一些自己的心得和经验,方便自己进一步鼓捣R。如果有人看到我写的东西而得到了帮助,那就更好了。

什么是R?R的优点何在?

R是一个数据分析软件。简单点说,R可以看做MATLAB的“替代品”,而且具有免费开源的优势。R可以像MATLAB一样解决有关数值计算的问题,而且具有强大的数据处理,绘图功能。

R拥有大量的统计分析工具包,我的感觉是——只有我们没听说过的工具,绝对没有R没有的工具包。配合着各种各样的工具包,你可以毁灭任何关于数据和统计的问题。因为数据包的数量庞大,所以查找自己需要的数据包,可能很烦恼。

如果有以下技能,学R会很方便:

1.已经了解些高级程序语言(非常重要)

2.英语不坏

3.概率统计理论基础

4.看数据不头疼

5.看cmd or terminal 也不头疼

你需要一本适合你的R语言教材

我开始学习R的时候,找到了这个帖子

非常强大的关于R语言教材综述。我非常感谢原帖作者。你可以参考这个帖子选一本适合你的教材。

我这里在说一下我主要使用的几本教材的心得:

1. 统计建模与R软件(薛毅著):非常优秀的R语言入门教材,涵盖了所有R的基础应用&方法,示例代码也很优秀。作为一本中文的程序语言教材,绝对是最优秀的之一。但是要看懂这本书,还是需要“已经了解些高级程序语言”。PS:我亲爱的吉林大学图书馆,有两本该教材流通,我常年霸占一本。

2. R in Nutshell:从讲解内容上看,与上一本差别不大,在R语言的应用上都是比较初级的入门,但是有些R软件&语言上的特性,写得比薛毅老师的教材深刻。这本书最大的优点就是工具书,方便开始入门时候,对有些“模棱两可”的东西的查询。PS:我将这本书打印了出来,简单的从头到尾翻过,最大的用途就是像一本字典一样查询。

3. ggplot2 Elegant Graphics for Data:这是一本介绍如何使用ggplot2包,进行绘图的书。ggplot2包,非常强大的绘图工具,几乎可以操作任何图中的元素,而且是提供添加图层的方式让我们可以一步步的作图。提到ggplot2包,应该提到一个词——“潜力无穷”,每一个介绍

ggplot2的人,都会用这个形容词。这本书最大的作用也是当做一本绘图相关的工具书,书中讲解详细,细致,每个小参数的变动都会配图帮你理解。PS:这本书我也打印出来了,非常适合查询。

几个可以逐步提高R能力的网站

1.R-bloggers: 这里有关于R和数据的一切讨论,前沿的问题,基础的问题,应有尽有。可以说这些家伙们让R变得越来越强大。我RSS了这个网站,每天都看一下有什么我感兴趣的方法和话题,慢慢的积累一些知识,是一个很有意思的过程。

2.统计之都: 这是一个有大量R使用者交流的论坛,你可以上去提问题,总有好心人来帮助你的。

3.R客: 是关于R的一个博客,更新不快,偏重国内R的一些发展。

R的使用环境

如果你看见terminal or cmd就打怵的话,一定要使用Rstudio。Rstudio的优点是,集成了Rconsole、脚本编辑器、可视化的数据查询、历史命令、帮助查询等,还有的完美的脚本和console的互动。毕竟是可视化的界面,有许多按钮可以用。R 的脚本编辑器很蛋疼,就比记事本多了个颜色高亮吧,不适合编写脚本,但适合调试脚本。

最后,说一下,刚开始学习R或者其他什么语言,都有一个通病,就是一些小细节的不知道,或者是记得不清楚,往往一个蛋疼的bug就可以耗掉大量的时间,这是一个让人想砸电脑的过程。我往后,会在博客里记录一些让我蛋很疼的小细节。本文分为6个部分,分别介绍初级入门,高级入门,绘图与可视化,计量经济学,时间序列分析,金融等。

1.初级入门

《An Introduction to R》,这是官方的入门小册子。其有中文版,由丁国徽翻译,译名为《R导论》。《R4Beginners》,这本小册子有中文版应该叫《R入门》。除此之外,还可以去读刘思喆的《153分钟学会R》。这本书收集了R初学者提问频率最高的153个问题。为什么叫153分钟呢?因为最初作者写了153个问题,阅读一个问题花费1分钟时间,全局下来也就是153分钟了。有了这些基础之后,要去读一些经典书籍比较全面的入门书籍,比如《统计建模与R软件》,国外还有《R Cookbook》和《R in action》,本人没有看过,因此不便评论。

最后推荐,《R in a Nutshell》。对,“果壳里面的R”!当然,是开玩笑的,in a Nutshell是俚语,意思大致是“简单的说”。目前,我们正在翻译这本书的中文版,大概明年三月份交稿!这本书很不错,大家可以从现在开始期待,并广而告知一下!

2.高级入门

读了上述书籍之后,你就可以去高级入门阶段了。这时候要读的书有两本很经典的。《Statistics with R》和《The R book》。之所以说这两本书高级,是因为这两本书已经不再限于R基础了,而是结合了数据分析的各种常见方法来写就的,比较系统的介绍了R在线性回归、方差分析、多元统计、R绘图、时间序列分析、数据挖掘等各方面的内容,看完之后你会发现,哇,原来R能做的事情这么多,而且做起来是那么简洁。读到这里已经差不多了,剩下的估计就是你要专门攻读的某个方面内容了。下面大致说一说。

3.绘图与可视化

亚里斯多德说,“较其他感觉而言,人类更喜欢观看”。因此,绘图和可视化得到很多人的关注和重视。那么,如何学习R画图和数据可视化呢?再简单些,如何画直方图?如何往直方图上添加密度曲线呢?我想读完下面这几本书你就大致会明白了。

首先,画图入门可以读《R Graphics》,个人认为这本是比较经典的,全面介绍了R中绘图系统。该书对应的有一个网站,google之就可以了。更深入的可以读《Lattice:Multivariate Data Visualization with R》。上面这些都是比较普通的。当然,有比较文艺和优雅的——ggplot2系统,看《ggplot2:Elegant Graphics for Data Analysis》。还有数据挖掘方面的书:《Data Mining with Rattle and R》,主要是用Rattle软件,个人比较喜欢Rattle!当然,Rattle不是最好的,Rweka也很棒!再有就是交互图形的书了,著名的交互系统是ggobi,这个我已经喜欢两年多了,关于ggobi的书有《Interactive and Dynamic Graphics for Data Analysis With R and GGobi》,不过,也只是适宜入门,更多更全面的还是去ggobi的主页吧,上面有各种资料以及包的更新信息!

特别推荐一下,中文版绘图书籍有《现代统计图形》。

4.计量经济学

关于计量经济学,首先推荐一本很薄的小册子:《Econometrics In R》,做入门用。然后,是《Applied Econometrics with R》,该书对应的R包是AER,可以安装之后配合使用,效果甚佳。计量经济学中很大一部分是关于时间序列分析的,这一块内容在下面的地方说。

5.时间序列分析

时间序列书籍的书籍分两类,一种是比较普适的书籍,典型的代表是:《Time Series Analysis and Its Applications :with R examples》。该书介绍了各种时间序列分析的经典方法及实现各种经典方法的R代码,该书有中文版。如果不想买的话,建议去作者主页直接下载,英文版其实读起来很简单。时间序列分析中有一大块儿是关于金融时间序列分析的。这方面比较流行的书有两本《Analysis of financial time series》,这本书的最初是用的S-plus代码,不过新版已经以R代码为主了。这本书适合有时间序列分析基础和金融基础的人来看,因为书中关于时间序列分析的理论以及各种金融知识讲解的不是特别清楚,将极值理论计算VaR的部分就比较难看懂。另外一个比较有意思的是Rmetrics推出的《TimeSeriesFAQ》,这本书是金融时间序列入门的东西,讲的很基础,但是很难懂。对应的中文版有《金融时间序列分析常见问题集》,当然,目前还没有发出来。经济领域的时间序列有一种特殊的情况叫协整,很多人很关注这方面的理论,关心这个的可以看《Analysis of Integrated and Cointegrated Time Series with R》。最后,比较高级的一本书是关于小波分析的,看《Wavelet Methods in Statistics with R》。附加一点,关于时间序列聚类的书籍目前比较少见,是一个处女地,有志之士可以开垦之!

6.金融

金融的领域很广泛,如果是大金融的话,保险也要被纳入此间。用R做金融更多地需要掌握的是金融知识,只会数据分析技术意义寥寥。我觉得这些书对于懂金融、不同数据分析技术的人比较有用,只懂数据分析技术而不动金融知识的人看起来肯定如雾里看花,甚至有人会觉得金融分析比较低级。这方面比较经典的书籍有:《Advanced Topics in Analysis of Economic and Financial Data Using R》以及《Modelling Financial Time Series With S-plus》。金融产品定价之类的常常要用到随机微分方程,有一本叫《Simulation Inference Stochastic Differential Equations:with R examples》的书是关于这方面的内容的,有实例,内容还算详实!此外,是风险度量与管理类。比较经典的有《Simulation Techniques in Financial Risk Management》、《Modern Actuarial Risk Theory Using R》和《Quantitative Risk Management:Concepts, Techniques and Tools》。投资组合分析类和期权定价类可以分别看《Portfolio Optimization with R》和《Option Pricing and Estimation of Financial Models with R》。

7.数据挖掘

这方面的书不多,只有《Data Mining with R:learing with case studies》。不过,R中数据挖掘方面的包已经足够多了,参考包中的帮助文档就足够了。

这是一个老题目了,在知乎里也有一些类似的问题,但总感觉所有回答都有所欠缺,所以希望在这里对所有的数值方法进行一个梳理。按照我个人的分类,期权定价的数值方法分为五个大类:解析解方法,树方法,偏微分方程数值解方法,蒙特卡洛方法,傅立叶变换方法。

1)解析解方法:

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

\rm{d}f(t, X_{t})=\frac{\partial f}{\partial t}\rm{d}t + \frac{\partial f}{\partial X_t}\rm{d}X_t + \frac{1}{2}\frac{\partial^2 f}{\partial X_t^2}\rm{d}[X, X]_t

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

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

2)树方法

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

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

u = \rm{e}^{\sigma\sqrt{T/N}}, d = \rm{e}^{-\sigma\sqrt{T/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。而这个在我之前的一篇文章有介绍过

Arrow Debreu price与快速拟合

而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方法更加快速,因为数值积分的速度要比微分方程数值解的速度要快。然而,这类方法的缺陷也是显而易见的,路径依赖性和维度问题,以及我们必须要有显式表达的特征函数。

总结:

在这里,我们只讲一些面上的东西。具体深入的东西,我会在公众号:衍生财经上详谈。