欧式和美式期权(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相关推荐

  1. 初学者怎样看懂python代码_新手入门必看,最常用的Python代码片段

    对于编程开发人员来讲,Python语法一开始可能看起来很奇怪.如果我们看到Python使用其他编程语言(例如Java)完成常见的工作,那会不会很意思?我们常见的代码片段称为"代码惯用法&qu ...

  2. 互信息python代码_转:标准化互信息NMI计算步骤及其Python实现

    标准化互信息NMI计算步骤 Python 实现 代码: ''' 利用Python实现NMI计算''' import math import numpy as np from sklearn impor ...

  3. 情人节python代码_情人节 ,能否表白成功就看这段Python代码了

    点击上方Python知识圈,选择设为星标 回复1024获取Python资料 作者:@明哥公众号:Python编程时光 阅读文本大概需要 6 分钟 2020年,这个看起来如此浪漫的年份,你还是一个人吗? ...

  4. 中文分词算法python代码_中文分词算法之最大正向匹配算法(Python版)

    最大匹配算法是自然语言处理中的中文匹配算法中最基础的算法,分为正向和逆向,原理都是一样的. 正向最大匹配算法,故名思意,从左向右扫描寻找词的最大匹配. 首先我们可以规定一个词的最大长度,每次扫描的时候 ...

  5. 正向最大匹配算法 python代码_中文分词算法之最大正向匹配算法(Python版)

    最大匹配算法是自然语言处理中的中文匹配算法中最基础的算法,分为正向和逆向,原理都是一样的. 正向最大匹配算法,故名思意,从左向右扫描寻找词的最大匹配. 首先我们可以规定一个词的最大长度,每次扫描的时候 ...

  6. 刷脸签到python代码_背景提升|“刷脸”时代,如何运用Python实现人脸识别?

    打开手机,不用输入任何密码,通过"刷脸"就可以轻松打开界面; 走进一家餐厅,即便没有手机和钱包,点餐后就能通过"刷脸"完成支付; 去银行取款,不带银行卡.身份证 ...

  7. 刷脸签到python代码_背景提升 | “刷脸”时代,如何运用Python实现人脸识别?

    打开手机,不用输入任何密码,通过"刷脸"就可以轻松打开界面; 走进一家餐厅,即便没有手机和钱包,点餐后就能通过"刷脸"完成支付; 去银行取款,不带银行卡.身份证 ...

  8. pycharm怎么编写python代码_如何设置PyCharm中的Python代码模版(推荐)

    在MacOs运行的PyCharm中,执行python文件,如果不指定python文件字符编码会报错: SyntaxError: Non-ASCII character '\xe6' in file / ...

  9. excel python插件_再见 VBA!神器工具统一 Excel 和 Python

    大家好,我是东哥. 经常给大家推荐好用的数据分析工具,也收到了铁子们的各种好评.这次也不例外,我要再推荐一个,而且是个爆款神器. Excel和Jupyter Notebok都是我每天必用的工具,而且两 ...

最新文章

  1. iOS 不同机型屏幕适配
  2. silverlight学习布局之:布局stackpanel
  3. java反射机制的调用
  4. 【计算机网络】网络安全 : 防火墙 ( 简介 | 防火墙功能 | 防火墙分类 | 分组过滤路由器 | 应用网关 )
  5. 深入理解Java虚拟机——程序编译与代码优化 (转)
  6. IO:Reactor和Proactor的区别
  7. mfc对话框在不同计算机上显示不全
  8. SpringBoot 中 4 大核心组件,你了解多少?
  9. linux native分区,怎么将硬盘格式分区为Linux Native格式的
  10. MinGW 使用 msvcr90.dll
  11. Ranger知识地图
  12. Java程序员都要懂得知识点:反射
  13. SpringCloud工作笔记075---SpotBugs介绍--优化java代码的质量
  14. 节点name在graph中无法展示_基于珠三角与粤东西北的日前节点电价差异分
  15. 炉石怎么看服务器是否维护,炉石传说服务器维护故障补偿方案详细内容
  16. STM32 串口通讯及实现
  17. 100个特别的遥感应用和用途
  18. 电脑间串口连接传输文件
  19. USB三模(EDGE、DC-HSPA+和LTE)数据棒
  20. 移动应用实战(移动OA)之五_会议室管理之二

热门文章

  1. 编译安装-httpd-2.2.15.tar.gz
  2. 联想终成全球PC第一
  3. 批量创建用户邮箱并修改别名
  4. 夜深,你的手机为谁而开
  5. mysql如何安装 centos7_如何解决centos7上mysql安装及问题
  6. 微信红包发放接口服务器签名失败,微信现金红包接口开发注意的事项
  7. NASM汇编语言与计算机系统04-实模式-屏幕显示不定长度的字符串(cmp/je)
  8. Redis-数据结构06-快速链表(quicklist)
  9. 元胞机模拟量子计算机,我国量子计算和量子模拟研究取得新突破
  10. 合并两个有序数组python_合并两个有序数组.py