(三十九)期权定价的二叉树法
二叉树法的基本思路
二叉树法为欧式期权定价
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)。
(三十九)期权定价的二叉树法相关推荐
- C语言笔记 第三十九课 程序中的三国天下
第三十九课 程序中的三国天下 程序中的栈 栈是现代计算机程序里最为重要的概念之一 栈在程序中用于维护函数调用上下文 函数中的参数和局部变量存储在栈上 栈是一种行为,一种先进后出的行为 栈保存了一个函数 ...
- 【正点原子STM32连载】第三十九章 DS18B20数字温度传感器实验 摘自【正点原子】MiniPro STM32H750 开发指南_V1.1
1)实验平台:正点原子MiniPro H750开发板 2)平台购买地址:https://detail.tmall.com/item.htm?id=677017430560 3)全套实验源码+手册+视频 ...
- 【Visual C++】游戏开发笔记三十九 浅墨DirectX教程之七 他山之石:几种几何体的快捷绘制法
本篇文章里,我们对Direct3D之中几种几何体的简洁绘制方法进行了详细的剖析,最后依旧是提供文章配套的详细注释的demo源代码的欣赏,并在文章末尾提供了源代码下载.(这标题有些歧义的,这个几种是修饰 ...
- NeHe OpenGL第三十九课:物理模拟
NeHe OpenGL第三十九课:物理模拟 物理模拟简介: 还记得高中的物理吧,直线运动,自由落体运动,弹簧.在这一课里,我们将创造这一切. 物理模拟介绍 如果你很熟悉物理规律,并且想实现它,这篇 ...
- Python编程基础:第三十九节 面向对象编程Object Oriented Programming
第三十九节 面向对象编程Object Oriented Programming 前言 实践 前言 到目前为止我们都是函数式编程,也即将每一个功能块写为一个函数.其实还有一种更常用的编程方式被称为面向对 ...
- javaweb学习总结(三十九)——数据库连接池
javaweb学习总结(三十九)--数据库连接池 一.应用程序直接获取数据库连接的缺点 用户每次请求都需要向数据库获得链接,而数据库创建连接通常需要消耗相对较大的资源,创建时间也较长.假设网站一天10 ...
- 三十九、Java集合中的HashSet和TreeSet
@Author:Runsen @Date:2020/6/6 作者介绍:Runsen目前大三下学期,专业化学工程与工艺,大学沉迷日语,Python, Java和一系列数据分析软件.导致翘课严重,专业排名 ...
- WPF,Silverlight与XAML读书笔记第三十九 - 可视化效果之3D图形
原文:WPF,Silverlight与XAML读书笔记第三十九 - 可视化效果之3D图形 说明:本系列基本上是<WPF揭秘>的读书笔记.在结构安排与文章内容上参照<WPF揭秘> ...
- 【零基础学Java】—List集合(三十九)
[零基础学Java]-List集合(三十九) java.util.list接口 extends Collection接口 list接口的特点: 1.有序的集合,存储元素和取出元素的顺序是一致的(存储1 ...
- JavaScript学习(三十九)—对象中内容的操作
JavaScript学习(三十九)-对象中内容的操作 一.对象中内容的操作:增.删.改.查 (一).增:给对象添加属性或者方法 1)方式1:对象名称.属性名=属性值: 2)方式2:对象名称['属性名' ...
最新文章
- 强哥原创管理方法论之“粉丝经济管理学”
- LeetCode 31 Next Permutation(下一个全排列)
- python子进程 内存,python中的子进程内存使用情况
- python列透视_python – 在pandas数据帧中透视列和列值
- apollo分布式配置中心原理
- 机器学习数据挖掘笔记_15(关于凸优化的一些简单概念)
- java将xml中的标签名称转为小写_深入学习Java Web(七): JSTL标签库
- 【WebRTC---进阶篇】(三)各流媒体服务器的比较
- 探Button控件的Click事件发生始末
- ADO RecondsetPtr 以及如何实现对表的增加删除数据
- 云图说|DAS表结构对比与同步,实现您多个数据库管理心愿
- HBase架构设计及原理分析
- 图论画图工具 Graph Editor
- [AE] ArcGIS Engine处理Landsat8数据
- 第三次科技革命与计算机网络,第三次科技革命
- SIF协议(一线通)
- 切割视频——将视频截取python实现
- 研究生实证论文数据经验分享
- Error: recoverUnfinalizedSegments failed for required journal
- Mac新手必备小技巧:一起进阶MAC大神