二叉树法的基本思路

二叉树法为欧式期权定价

  n步二叉树每一列有n+1个结点,假设每个结点坐标为(i,j),比如3步二叉树中,最后一列(第4列)最上面的结点坐标为(3,3),最下面的结点坐标为(0,3),开始坐标为(0,0)。以欧式看涨期权为例,python代码如下:

import numpy as np
def tree_europ(S,X,r,sigma,t,steps):u=np.exp(sigma*np.sqrt(t/steps));d=1/u#注意时间间隔为△t=t/stepsP=(np.exp(r*t/steps)-d)/(u-d)prices=np.zeros(steps+1)#生成最后一列的股票价格空数组c_values=np.zeros(steps+1)#生成最后一列的期权价值空数组prices[0]=S*d**steps#最后一行最后一列的股票价格c_values[0]=np.maximum(prices[0]-X,0)#最后一行最后一列的期权价值for i in range(1,steps+1):prices[i]=prices[i-1]*(u**2)#计算最后一列的股票价格c_values[i]=np.maximum(prices[i]-X,0)#计算最后一列的期权价值for j in range(steps,0,-1):#逐个节点往前计算for i in range(0,j):c_values[i]=(P*c_values[i+1]+(1-P)*c_values[i])/np.exp(r*t/steps)return c_values[0]

  有一欧式看涨期权标的资产价格为100元,K=100,年波动率为0.25,无风险利率为2.5%,权利期间为1年,利用二叉树求此期权的价格:

tree_europ(100,100,0.025,0.25,1,100)
Out[3]: 11.083521101164578

  注意有一个很难发现的点,np.max()里面必须是array才有效,否则会得出np.max(-1,0) = -1的结果(实际上这里的第二个参数0表示axis),也就是说max()函数适用范围更广。当然用np.maximum()也行。

二叉树法为美式期权定价

  美式期权定价存在提前行权问题,在上述代码的基础上加入这一条件即可。因为这是比较方便且为数不多的求美式期权价格方法之一,下面给出美式看涨和看跌期权的二叉树求法:

def tree_americacall(S,X,r,sigma,t,steps):u=np.exp(sigma*np.sqrt(t/steps));d=1/uP=(np.exp(r*t/steps)-d)/(u-d)prices=np.zeros(steps+1)c_values=np.zeros(steps+1)prices[0]=S*d**stepsc_values[0]=np.maximum(prices[0]-X,0)for i in range(1,steps+1):prices[i]=prices[i-1]*(u**2)c_values[i]=np.maximum(prices[i]-X,0)for j in range(steps,0,-1):for i in range(0,j):prices[i]=prices[i+1]*d#或者prices[i]=prices[i]*uc_values[i]=np.maximum((P*c_values[i+1]+(1-P)*c_values[i])/np.exp(r*t/steps),prices[i]-X)#检查是否提前行权return c_values[0]def tree_americaput(S,X,r,sigma,t,steps):u=np.exp(sigma*np.sqrt(t/steps));d=1/uP=(np.exp(r*t/steps)-d)/(u-d)prices=np.zeros(steps+1)c_values=np.zeros(steps+1)prices[0]=S*d**stepsc_values[0]=np.maximum(X-prices[0],0)for i in range(1,steps+1):prices[i]=prices[i-1]*(u**2)c_values[i]=np.maximum(X-prices[i],0)for j in range(steps,0,-1):for i in range(0,j):prices[i]=prices[i+1]*dc_values[i]=np.maximum((P*c_values[i+1]+(1-P)*c_values[i])/np.exp(r*t/steps),X-prices[i])#检查是否提前行权return c_values[0]

  有一美式期权标的资产价格为100元,K=100,年波动率为0.25,无风险利率为10%,权利期间为1年,利用二叉树求看涨期权和看跌期权的价格:

tree_americacall(100,100,0.1,0.25,1,100)
Out[8]: 14.950509715369122
tree_americaput(100,100,0.1,0.25,1,100)
Out[9]: 6.546911861041632

二叉树法为支付连续红利率的美式期权定价

  假设红利率为q,只需将P的计算公式中的er△t改为e(r-q)△t,其他代码不变。在上例的基础上,该美式期权每年支付8%的连续红利率,计算该美式看涨期权的价格:

def tree_americacall_Div(S,X,r,q,sigma,t,steps):u=np.exp(sigma*np.sqrt(t/steps));d=1/uP=(np.exp((r-q)*t/steps)-d)/(u-d)prices=np.zeros(steps+1)c_values=np.zeros(steps+1)prices[0]=S*d**stepsc_values[0]=np.maximum(prices[0]-X,0)for i in range(1,steps+1):prices[i]=prices[i-1]*(u**2)c_values[i]=np.maximum(prices[i]-X,0)for j in range(steps,0,-1):for i in range(0,j):prices[i]=prices[i+1]*dc_values[i]=np.maximum((P*c_values[i+1]+(1-P)*c_values[i])/np.exp(r*t/steps),prices[i]-X)return c_values[0]
tree_americacall_Div(100,100,0.1,0.08,0.25,1,100)
Out[10]: 10.0782277099019

  同理,对于本国汇率为Rf、外国汇率为rf的外汇期权,那么P=(e(Rf-rf)t-d)/(u-d);对于期货期权,P=(1-d)/(u-d)。

(三十九)期权定价的二叉树法相关推荐

  1. C语言笔记 第三十九课 程序中的三国天下

    第三十九课 程序中的三国天下 程序中的栈 栈是现代计算机程序里最为重要的概念之一 栈在程序中用于维护函数调用上下文 函数中的参数和局部变量存储在栈上 栈是一种行为,一种先进后出的行为 栈保存了一个函数 ...

  2. 【正点原子STM32连载】第三十九章 DS18B20数字温度传感器实验 摘自【正点原子】MiniPro STM32H750 开发指南_V1.1

    1)实验平台:正点原子MiniPro H750开发板 2)平台购买地址:https://detail.tmall.com/item.htm?id=677017430560 3)全套实验源码+手册+视频 ...

  3. 【Visual C++】游戏开发笔记三十九 浅墨DirectX教程之七 他山之石:几种几何体的快捷绘制法

    本篇文章里,我们对Direct3D之中几种几何体的简洁绘制方法进行了详细的剖析,最后依旧是提供文章配套的详细注释的demo源代码的欣赏,并在文章末尾提供了源代码下载.(这标题有些歧义的,这个几种是修饰 ...

  4. NeHe OpenGL第三十九课:物理模拟

    NeHe OpenGL第三十九课:物理模拟 物理模拟简介: 还记得高中的物理吧,直线运动,自由落体运动,弹簧.在这一课里,我们将创造这一切.   物理模拟介绍 如果你很熟悉物理规律,并且想实现它,这篇 ...

  5. Python编程基础:第三十九节 面向对象编程Object Oriented Programming

    第三十九节 面向对象编程Object Oriented Programming 前言 实践 前言 到目前为止我们都是函数式编程,也即将每一个功能块写为一个函数.其实还有一种更常用的编程方式被称为面向对 ...

  6. javaweb学习总结(三十九)——数据库连接池

    javaweb学习总结(三十九)--数据库连接池 一.应用程序直接获取数据库连接的缺点 用户每次请求都需要向数据库获得链接,而数据库创建连接通常需要消耗相对较大的资源,创建时间也较长.假设网站一天10 ...

  7. 三十九、Java集合中的HashSet和TreeSet

    @Author:Runsen @Date:2020/6/6 作者介绍:Runsen目前大三下学期,专业化学工程与工艺,大学沉迷日语,Python, Java和一系列数据分析软件.导致翘课严重,专业排名 ...

  8. WPF,Silverlight与XAML读书笔记第三十九 - 可视化效果之3D图形

    原文:WPF,Silverlight与XAML读书笔记第三十九 - 可视化效果之3D图形 说明:本系列基本上是<WPF揭秘>的读书笔记.在结构安排与文章内容上参照<WPF揭秘> ...

  9. 【零基础学Java】—List集合(三十九)

    [零基础学Java]-List集合(三十九) java.util.list接口 extends Collection接口 list接口的特点: 1.有序的集合,存储元素和取出元素的顺序是一致的(存储1 ...

  10. JavaScript学习(三十九)—对象中内容的操作

    JavaScript学习(三十九)-对象中内容的操作 一.对象中内容的操作:增.删.改.查 (一).增:给对象添加属性或者方法 1)方式1:对象名称.属性名=属性值: 2)方式2:对象名称['属性名' ...

最新文章

  1. 强哥原创管理方法论之“粉丝经济管理学”
  2. LeetCode 31 Next Permutation(下一个全排列)
  3. python子进程 内存,python中的子进程内存使用情况
  4. python列透视_python – 在pandas数据帧中透视列和列值
  5. apollo分布式配置中心原理
  6. 机器学习数据挖掘笔记_15(关于凸优化的一些简单概念)
  7. java将xml中的标签名称转为小写_深入学习Java Web(七): JSTL标签库
  8. 【WebRTC---进阶篇】(三)各流媒体服务器的比较
  9. 探Button控件的Click事件发生始末
  10. ADO RecondsetPtr 以及如何实现对表的增加删除数据
  11. 云图说|DAS表结构对比与同步,实现您多个数据库管理心愿
  12. HBase架构设计及原理分析
  13. 图论画图工具 Graph Editor
  14. [AE] ArcGIS Engine处理Landsat8数据
  15. 第三次科技革命与计算机网络,第三次科技革命
  16. SIF协议(一线通)
  17. 切割视频——将视频截取python实现
  18. 研究生实证论文数据经验分享
  19. Error: recoverUnfinalizedSegments failed for required journal
  20. Mac新手必备小技巧:一起进阶MAC大神

热门文章

  1. matplotlib绘制四个子图
  2. 美图类App原型制作分享-Meitu
  3. 愚人节整人软件测试自学,愚人节被玩坏的五大整人APP 帮你问鼎愚人节最佳损友...
  4. AdBlock插件,在谷歌浏览器中屏蔽百度热搜或其他广告
  5. 大家我是来自广东工业大学的吴文钧
  6. 医学图像处理相关代码分享
  7. [Delphi]Delphi中的ODBC和ADO
  8. 大数据时代的地理信息系统发展
  9. 向浏览器后台传入Jason数据却出现错误的解决办法
  10. dhu 数据科学与技术 第2次作业