# CRR二项式期权定价模型
# 模型假设一个离散时间和离散状态空间上的BSM经济体
# CRR模型对标准的欧式期权没有什么优势,但是对于标准欧式期权以外的其他期权,CRR模型的优势就很明显
# CRR模型可以处理提前行权的期权,即百慕大期权或者美式期权
# CRR模型/看涨期权
# Cox-Ross-Rubinstein Binomial Model
# European Option Valuation#
import math
import numpy as np
import matplotlib as mpl
import matplotlib.pyplot as plt
mpl.rcParams['font.family'] = 'serif'
import sys
sys.path.append('C:/Users/gws/Documents/PYTHON_DAIMA/python36/05_com')
from BSM_option_valuation import BSM_call_value#
# Model Parameters
#
S0 = 100.0  # index level
K = 100.0  # option strike
T = 1.0  # maturity date
r = 0.05  # risk-less short rate
sigma = 0.2  # volatility# Valuation Function
def CRR_option_value(S0, K, T, r, sigma, otype, M=4):''' Cox-Ross-Rubinstein European option valuation.Parameters==========S0 : floatstock/index level at time 0K : floatstrike priceT : floatdate of maturityr : floatconstant, risk-less short ratesigma : floatvolatilityotype : stringeither 'call' or 'put'M : intnumber of time intervals'''# Time Parametersdt = T / M  # length of time intervaldf = math.exp(-r * dt)  # discount per interval# Binomial Parametersu = math.exp(sigma * math.sqrt(dt))  # up movementd = 1 / u  # down movementq = (math.exp(r * dt) - d) / (u - d)  # martingale branch probability# Array Initialization for Index Levelsmu = np.arange(M + 1)mu = np.resize(mu, (M + 1, M + 1))md = np.transpose(mu)mu = u ** (mu - md)md = d ** mdS = S0 * mu * md# Inner Valuesif otype == 'call':V = np.maximum(S - K, 0)  # inner values for European call optionelse:V = np.maximum(K - S, 0)  # inner values for European put optionz = 0for t in range(M - 1, -1, -1):  # backwards iterationV[0:M - z, t] = (q * V[0:M - z, t + 1] +(1 - q) * V[1:M - z + 1, t + 1]) * dfz += 1return V[0, 0]def plot_convergence(mmin, mmax, step_size):''' Plots the CRR option values for increasing number of timeintervals M against the Black-Scholes-Merton benchmark value.'''BSM_benchmark = BSM_call_value(S0, K, 0, T, r, sigma)m = range(mmin, mmax, step_size)CRR_values = [CRR_option_value(S0, K, T, r, sigma, 'call', M) for M in m]plt.figure(figsize=(9, 5))plt.plot(m, CRR_values, label='CRR values')plt.axhline(BSM_benchmark, color='r', ls='dashed', lw=1.5,label='BSM benchmark')plt.xlabel('# of binomial steps $M$')plt.ylabel('European call option value')plt.legend(loc=4)plt.xlim(0, mmax)
BSM_benchmark = BSM_call_value(S0, K, 0, T, r, sigma)
BSM_benchmark
%time CRR_option_value(S0, K, T, r, sigma, 'call', M=2000)

结果为:

Wall time: 671 ms
10.449583775457942
%%time
plot_convergence(10, 1011, 20) #CRR模型的欧式看涨期权每增加20个时间步数的价值变化

%%time
plot_convergence(10, 1011, 25)#CRR模型的欧式看涨期权每增加25个时间步数的价值变化

二叉树期CRR权定价模型-python相关推荐

  1. 第十四届蓝桥杯第二期模拟赛 【python】

    第十四届蓝桥杯第二期模拟赛 [python] 文章目录 第十四届蓝桥杯第二期模拟赛 [python] ✨最小的2022 (python二进制) ❓️问题描述 答案提交

  2. wpl计算方法_C++二叉树计算带权路径长度(WPL)的算法

    题目 :二叉树的带权路径长度是二叉树中所有叶子结点的带权路径长度之和.给定二叉链表的存储的结点结构为 left | weight| right 存储的是叶子结点的非负权值.设计算法求二叉树的带权路径长 ...

  3. 二叉树的带权路径长度WPL算法实现

    文章目录 题目描述 算法思想 实现代码 题目描述  二叉树的带权路径长度WPL是二叉树中所有叶结点的带权路径长度之和.给定一棵二叉树,采用二叉链表存储,叶子结点的weight域为该结点的权值.请设计一 ...

  4. java二叉树求权值_二叉树中的权值是什么?

    展开全部 二叉树中的权值就是对叶子结点赋予的一个有意义的数量值. 一棵深度为k,且有2^k-1个节点的二叉树,32313133353236313431303231363533e58685e5aeb93 ...

  5. C++二叉树计算带权路径长度(WPL)的算法

    二叉树计算带权路径长度(WPL)的算法 更多内容请访问点击我的主页 题目 : 二叉树的带权路径长度是二叉树中所有叶子结点的带权路径长度之和.给定二叉链表的存储的结点结构为 left weight ri ...

  6. 美式期权定价python_【定价】二叉树(CRR)欧式/美式期权定价的原理及Python实现...

    二叉树一种常用的期权定价方法,相比BSM模型,这个方法适用范围更广,可以为美式期权等一些其他品种定价.该方法是保持波动率不变的条件下,将价格路径做简化,根据简化的路径做分析和计算. 本文首先介绍使用二 ...

  7. python期权定价代码_【定价】二叉树(CRR)欧式/美式期权定价的原理及Python实现...

    二叉树一种常用的期权定价方法,相比BSM模型,这个方法适用范围更广,可以为美式期权等一些其他品种定价.该方法是保持波动率不变的条件下,将价格路径做简化,根据简化的路径做分析和计算. 本文首先介绍使用二 ...

  8. python二叉树遍历算法_分享python实现的二叉树定义与遍历

    这篇文章主要介绍了python实现的二叉树定义与遍历算法,结合具体实例形式分析了基于Python定义的二叉树及其常用遍历操作实现技巧,需要的朋友可以参考下 本文实例讲述了python实现的二叉树定义与 ...

  9. 二叉树的一些leetcode题目+python(c++)

    二叉树考点主要有: 1.三种遍历方式,以及构造二叉树等: 2.求深度,最长直径,最长路径,公共祖先等等; 3.合并二叉树,翻转二叉树,判断平衡性,对称性等; 4.从前序与中序构造二叉树,中序与后序构造 ...

  10. 熵权法 —— python

    目录 一.熵权法介绍 二.熵权法赋权步骤 1.指标正向化 mapminmax介绍 2.数据标准化 3.计算信息熵 4.计算权重以及得分 四.实例分析 1.导入相关库 2.读取数据 2.指标正向化 2. ...

最新文章

  1. docker 基本操作Ⅲ
  2. LeetCode刷题-3
  3. SAP QM 检验批录入了结果以后不能再Reset检验计划了?
  4. NetTiers学习笔记05---使用自定义存储过程
  5. Java处理正则验证手机号-详解
  6. 欢迎您参加_ADT技术培训营
  7. SSL 1760——商店选址问题(最短路)
  8. java ee cdi_Java EE CDI Producer方法教程
  9. 周记随笔-php5.6与apache2.4的windows32安装
  10. com 名字对象(3)使用IMoniker
  11. Java讲课笔记22:Set接口及其实现类
  12. 6.边缘检测:梯度——梯度计算中滤波器的线性特性的利用_6
  13. 时间序列趋势判断(二)——Cox-Staut趋势检验
  14. Linux 命令(88)—— more 命令
  15. Matlab Tricks(十五) —— 圆的正确画法
  16. Django视图系统
  17. dbForge Studio for SQL Server入门教程:如何创建和编辑查询
  18. 你真的会用Context么?
  19. Web安全渗透测试基本流程
  20. c语言从入门到精通的几个阶段

热门文章

  1. 整数进制转换技巧以及相关算法题讲解(简洁易懂)
  2. excelJs 单元格背景颜色填充
  3. Android文件系统编译出错记录
  4. 《Qt 实战一二三》
  5. 控制面板中没有reltek高清晰音频管理器 插入耳机后仍然外放(已解决)
  6. 如何实现Android端的录屏采集
  7. 3dmax渲染很慢/很卡?
  8. 使用Retrofit和Rxjava实现外卖型二级列表购物车及进入地图显示位置信息
  9. C/C++编辑器Source Insight技巧收集
  10. 物联网时代,面临的几种安全威胁