二叉树期权定价python代码_欧式和美式期权的二叉树和Greek(1)——PYTHON
欧式和美式期权(Option)是最基础的衍生证卷。如何定价是初学金融工程者的必备知识。二叉树的又是最简单但是容易理解的工具。在网上有期权计算器可以很容易得到。但是练习自己编写还是有收益的。
欧式期权的无套利定价code非常简单:首先定义组合数,然后计算在不同节点的收益和概率,最后相加。
def nCr(n,r):
f =
math.factorial
return f(n)
/ (f(r) * f(n-r))
class Option(object):
def
__init__(self,s0,sigma,r,t,n,k,type=''):
self.s0=s0
self.sigma=sigma
self.r=r
self.t=t
self.n=n
self.k=k
self.type=type
def
Eu_price(self):
time=float(self.t)/self.n
u=math.exp(self.sigma*time**0.5)
d=math.exp(-self.sigma*time**0.5)
p=(math.exp(self.r*time)-d)/(u-d)
payment=0
for i in range(self.n+1):
if self.type=='Call':
pay=max(((self.s0*u**(self.n-2*i))-self.k),0)
elif self.type=='Put':
pay=max(self.k-((self.s0*u**(self.n-2*i))),0)
ppay=pay*nCr(self.n,i)*((1-p)**i)*(p**(self.n-i))
payment+=ppay
payment=payment/math.exp(self.r*self.t)
return payment
#××××××××××××××××××××××××××××××××××××××××××××××#
newoption = Option(100.0,0.2,0.05,1.0,100,100.0,type='Put')
print newoption.Eu_price()
#××××××××××××××××××××××××××××××××××××××××××××××#
美式期权作为可以提前practice的期权,就复杂的多。
可以先定义一个List,然后向前递归,取节点价值(practice)和发展价值的较大值。起点的价值就是定价。
import math
class Option(object):
def
__init__(self,s0,sigma,r,t,n,k,type=''):
self.s0=s0
self.sigma=sigma
self.r=r
self.t=t
self.n=n
self.k=k
self.type=type
def
Am_price(self):
time=float(self.t)/self.n
u=math.exp(self.sigma*time**0.5)
d=math.exp(-self.sigma*time**0.5)
p=(math.exp(self.r*time)-d)/(u-d)
pay=[]
for i in range(self.n+1):
if self.type=='Call':
pay.append(max(((self.s0*u**(self.n-2*i))-self.k),0))
elif self.type=='Put':
pay.append(max((self.k-(self.s0*u**(self.n-2*i))),0))
for j in range(self.n-1,-1,-1):
ppay=[]
qpay=[]
for m in range(j+1):
if self.type=='Call':
qpay.append((max(((self.s0*u**(j-2*m))-self.k),0)))
elif self.type=='Put':
qpay.append((max((self.k-(self.s0*u**(j-2*m))),0)))
ppay.append((pay[m]*p+pay[m+1]*(1-p))*math.exp(-self.r*time))
pay[m]=max(qpay[m],ppay[m])
return pay[0]
#在定价的基础上,Greek就很容易得到了,只需要取一个极小的变化值,然后得到微分即可。
def delta(self):
ds=0.1
new=Option(self.s0,self.sigma,self.r,self.t,self.n,self.k,self.type)
new1=Option(self.s0+ds,self.sigma,self.r,self.t,self.n,self.k,self.type)
return (new1.Am_price()-new.Am_price())/ds
def
gamma(self):
ds=0.1
new=Option(self.s0,self.sigma,self.r,self.t,self.n,self.k,self.type)
new1=Option(self.s0+ds,self.sigma,self.r,self.t,self.n,self.k,self.type)
return (new1.delta()-new.delta())/ds
def
vega(self):
dsigma=0.0001
new=Option(self.s0,self.sigma,self.r,self.t,self.n,self.k,self.type)
new1=Option(self.s0,self.sigma+dsigma,self.r,self.t,self.n,self.k,self.type)
return (new1.Am_price()-new.Am_price())/dsigma/100
def
theta(self):
dt=0.0001
new=Option(self.s0,self.sigma,self.r,self.t,self.n,self.k,self.type)
new1=Option(self.s0,self.sigma,self.r,self.t+dt,self.n,self.k,self.type)
return -(new1.Am_price()-new.Am_price())/dt
def
rho(self):
dr=0.0001
new=Option(self.s0,self.sigma,self.r,self.t,self.n,self.k,self.type)
new1=Option(self.s0,self.sigma,self.r+dr,self.t,self.n,self.k,self.type)
return (new1.Am_price()-new.Am_price())/dr/100
def
lamda(self):
new=Option(self.s0,self.sigma,self.r,self.t,self.n,self.k,selfi.type)
return new.delta()*self.s0/new.Am_price()
#以上是几个例子,还可有很容易编写其他的code。在此基础上,Delta 对冲的计算也很容易。
#As a beginner of financial engineering and computer science ,It
is a good practice to write simple programs.
二叉树期权定价python代码_欧式和美式期权的二叉树和Greek(1)——PYTHON相关推荐
- 初学者怎样看懂python代码_新手入门必看,最常用的Python代码片段
对于编程开发人员来讲,Python语法一开始可能看起来很奇怪.如果我们看到Python使用其他编程语言(例如Java)完成常见的工作,那会不会很意思?我们常见的代码片段称为"代码惯用法&qu ...
- 互信息python代码_转:标准化互信息NMI计算步骤及其Python实现
标准化互信息NMI计算步骤 Python 实现 代码: ''' 利用Python实现NMI计算''' import math import numpy as np from sklearn impor ...
- 情人节python代码_情人节 ,能否表白成功就看这段Python代码了
点击上方Python知识圈,选择设为星标 回复1024获取Python资料 作者:@明哥公众号:Python编程时光 阅读文本大概需要 6 分钟 2020年,这个看起来如此浪漫的年份,你还是一个人吗? ...
- 中文分词算法python代码_中文分词算法之最大正向匹配算法(Python版)
最大匹配算法是自然语言处理中的中文匹配算法中最基础的算法,分为正向和逆向,原理都是一样的. 正向最大匹配算法,故名思意,从左向右扫描寻找词的最大匹配. 首先我们可以规定一个词的最大长度,每次扫描的时候 ...
- 正向最大匹配算法 python代码_中文分词算法之最大正向匹配算法(Python版)
最大匹配算法是自然语言处理中的中文匹配算法中最基础的算法,分为正向和逆向,原理都是一样的. 正向最大匹配算法,故名思意,从左向右扫描寻找词的最大匹配. 首先我们可以规定一个词的最大长度,每次扫描的时候 ...
- 刷脸签到python代码_背景提升|“刷脸”时代,如何运用Python实现人脸识别?
打开手机,不用输入任何密码,通过"刷脸"就可以轻松打开界面; 走进一家餐厅,即便没有手机和钱包,点餐后就能通过"刷脸"完成支付; 去银行取款,不带银行卡.身份证 ...
- 刷脸签到python代码_背景提升 | “刷脸”时代,如何运用Python实现人脸识别?
打开手机,不用输入任何密码,通过"刷脸"就可以轻松打开界面; 走进一家餐厅,即便没有手机和钱包,点餐后就能通过"刷脸"完成支付; 去银行取款,不带银行卡.身份证 ...
- pycharm怎么编写python代码_如何设置PyCharm中的Python代码模版(推荐)
在MacOs运行的PyCharm中,执行python文件,如果不指定python文件字符编码会报错: SyntaxError: Non-ASCII character '\xe6' in file / ...
- excel python插件_再见 VBA!神器工具统一 Excel 和 Python
大家好,我是东哥. 经常给大家推荐好用的数据分析工具,也收到了铁子们的各种好评.这次也不例外,我要再推荐一个,而且是个爆款神器. Excel和Jupyter Notebok都是我每天必用的工具,而且两 ...
最新文章
- iOS 不同机型屏幕适配
- silverlight学习布局之:布局stackpanel
- java反射机制的调用
- 【计算机网络】网络安全 : 防火墙 ( 简介 | 防火墙功能 | 防火墙分类 | 分组过滤路由器 | 应用网关 )
- 深入理解Java虚拟机——程序编译与代码优化 (转)
- IO:Reactor和Proactor的区别
- mfc对话框在不同计算机上显示不全
- SpringBoot 中 4 大核心组件,你了解多少?
- linux native分区,怎么将硬盘格式分区为Linux Native格式的
- MinGW 使用 msvcr90.dll
- Ranger知识地图
- Java程序员都要懂得知识点:反射
- SpringCloud工作笔记075---SpotBugs介绍--优化java代码的质量
- 节点name在graph中无法展示_基于珠三角与粤东西北的日前节点电价差异分
- 炉石怎么看服务器是否维护,炉石传说服务器维护故障补偿方案详细内容
- STM32 串口通讯及实现
- 100个特别的遥感应用和用途
- 电脑间串口连接传输文件
- USB三模(EDGE、DC-HSPA+和LTE)数据棒
- 移动应用实战(移动OA)之五_会议室管理之二
热门文章
- 编译安装-httpd-2.2.15.tar.gz
- 联想终成全球PC第一
- 批量创建用户邮箱并修改别名
- 夜深,你的手机为谁而开
- mysql如何安装 centos7_如何解决centos7上mysql安装及问题
- 微信红包发放接口服务器签名失败,微信现金红包接口开发注意的事项
- NASM汇编语言与计算机系统04-实模式-屏幕显示不定长度的字符串(cmp/je)
- Redis-数据结构06-快速链表(quicklist)
- 元胞机模拟量子计算机,我国量子计算和量子模拟研究取得新突破
- 合并两个有序数组python_合并两个有序数组.py