期权二叉树估值与图计算

传统期权二叉树的算法都是基于数组的,对于没有编程基础的人来说非常不直观。二叉树是一种特殊的图,可以用python networkx这个图算法库实现,这个库不仅包含常用的图算法,还包含简单的绘图功能,非常适合研究分析使用。

def binarytree_europtionfull(S,K,r,q,sigma,t,steps,op_type):u=np.exp(sigma*np.sqrt(t/steps))d=1/uP=(np.exp((r-q)*t/steps)-d)/(u-d)#二叉完全树    G=nx.full_rary_tree(2,2**(steps+1)-1)G.nodes[0]['price']=S#正推过程for (parent,children) in nx.bfs_successors(G,0):#print(parent,children)G.nodes[children[0]]['price']=G.nodes[parent]['price']*d;G.nodes[children[1]]['price']=G.nodes[parent]['price']*u;#对最后一天到期日计算所有情况下的payofffor i in nx.descendants_at_distance(G,0,steps):G.nodes[i]['opt_val']=np.maximum(G.nodes[i]['price']-K,0)#倒推过程for (parent,children) in reversed(list(nx.bfs_successors(G,0))):G.nodes[parent]['opt_val']=((1-P)*G.nodes[children[0]]['opt_val']+(P)*G.nodes[children[1]]['opt_val'])*np.exp(-r*t/steps)    #print(node)dat=G.nodes.data()#生成图形显示,可注释掉。pos = graphviz_layout(G, prog="dot")nx.draw(G, pos, labels={k:"price: %.2f\n opt_val:%.2f"%(v['price'],v['opt_val']) for (k,v) in dat},with_labels=True)plt.show()return G.nodes[0]['opt_val']

直接用二叉树空间复杂度为2^{n},呈指数增长。我们注意到,对于中间的节点,其实有一些是相等的,因为对于一支标的价格,S*u*d=S*d*u,所以我们可以将这些节点合并,这就是网格模式。

def binarytree_europtionLattice(S,K,r,q,sigma,t,steps,op_type):u=np.exp(sigma*np.sqrt(t/steps))d=1/uP=(np.exp((r-q)*t/steps)-d)/(u-d)G = nx.Graph()G.add_node(0)G.nodes[0]['price']=Scnt=0for i in range(steps):for j in range(i+1):#print(j,i,cnt,cnt+i+1,cnt+i+2)G.add_edge(cnt,cnt+i+1)G.add_edge(cnt,cnt+i+2)cnt+=1#正推过程for (parent,children) in nx.bfs_successors(G,0):if len(children)==2:G.nodes[children[0]]['price']=G.nodes[parent]['price']*d;G.nodes[children[-1]]['price']=G.nodes[parent]['price']*u;#对最后一天到期日计算所有情况下的payoff,for i in nx.descendants_at_distance(G,0,steps):G.nodes[i]['opt_val']=np.maximum(G.nodes[i]['price']-K,0)#倒推过程for (parent,children) in reversed(list(nx.bfs_successors(G,0))):G.nodes[parent]['opt_val']=((1-P)*G.nodes[children[-1]-1]['opt_val']+(P)*G.nodes[children[-1]]['opt_val'])*np.exp(-r*t/steps)    #生成图形显示,可注释掉。pos = graphviz_layout(G, prog="dot")nx.draw(G, pos, labels={k:"price: %.2f\n opt_val:%.2f"%(v['price'],v['opt_val']) for (k,v) in dat},with_labels=True)plt.show()return G.nodes[0]['opt_val']

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/311020.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【ARMv8M Cortex-M33 系列 2.1 -- Cortex-M33 使用 .hex /.srec 文件介绍】

请阅读【嵌入式开发学习必备专栏 之Cortex-M33 专栏】 文章目录 HEX 文件介绍英特尔十六进制文件格式记录类型hex 示例Cortex-M 系列hex 文件的使用 hex 文件和srec 文件生成Motorola S-Record (srec) 格式 HEX 文件介绍 .hex 文件通常用于微控制器编程,包括 ARM C…

TypeError: control character ‘delimiter‘ cannot be a newline (`\r` or `\n`)

报错 找到错误代码 这个错误是因为在使用 numpy.loadtxt() 函数时尝试将换行符(\n)作为分隔符(delimiter)。然而,换行符是用于标识文本文件中每一行的结束,而不是用于分隔数据字段。 解决 如果你的数据文…

c++ OpenCV4图像处理与视频分析实战教程 -> 自建代码库

OpenCV4图像处理与视频分析实战教程,系列视频自建代码库。C版本。 视频可B站搜索。 简介: 网上流传的“OpenCV4图像处理与视频分析实战”课程附带资料需要解压密码,无法使用,且原视频购买很贵(51CTO售价119&#xff0…

在Mac上恢复SD卡数据的 6 个有效应用程序

慌!SD卡里的照片和视频不小心删了,Mac设备上还恢复不了数据! 遇到这种情况,你需要的是一款可靠的Mac适用的SD卡恢复软件。我们为你准备了一份最佳的SD卡恢复软件列表,并且还有详细的评论。另外,我们还会给…

用通俗易懂的方式讲解大模型:LangChain Agent 原理解析

LangChain 是一个基于 LLM(大型语言模型)的编程框架,旨在帮助开发人员使用 LLM 构建端到端的应用程序。它提供了一套工具、组件和接口,可以简化创建由 LLM 和聊天模型提供支持的应用程序的过程。 LangChain 由几大组件构成&#…

k8s搭建(五、k8s可视化管理工具Dashboard配置)

天行健,君子以自强不息;地势坤,君子以厚德载物。 每个人都有惰性,但不断学习是好好生活的根本,共勉! 文章均为学习整理笔记,分享记录为主,如有错误请指正,共同学习进步。…

【基础】【Python网络爬虫】【8.Selenium入门】selenium配置、环境安装、浏览器驱动下载(附大量案例代码)(建议收藏)

Python网络爬虫基础 Selenium 入门1. 动态网页&静态网页动态网页JavaScriptJQueryAjaxHTML 动态网页处理方法 2. Selenium 工作原理3. Selenium 配置环境安装浏览器驱动下载配置浏览器驱动 selenium 快速上手 4. Driver对象的常用方法及属性5. 元素提取6. 元素对象的方法及…

【基础】【Python网络爬虫】【5.数据解析】bs4、Xpath、Parsel模块、正则表达式(附大量案例代码)(建议收藏)

Python网络爬虫基础 数据解析1. 为何数据解析2. 常见的数据类型结构化数据半结构化数据非结构化数据 3. 爬虫项目实现步骤 数据解析模块1. Bs4环境安装bs4解析流程案例 - bs4碧血剑文本爬取 2. Xpath环境安装xpath解析的编码流程xpath表达式如何理解?案例 - 简历模板…

《深入理解C++11:C++11新特性解析与应用》笔记六

第六章 提高性能及操作硬件的能力 6.1 常量表达式 6.1.1 运行时常量性与编译时常量性 大多数情况下,const描述的是运行时常量性,也即是运行时数据的不可更改性。但有时候我们需要的却是编译时的常量性,这是const关键字无法保证的。例如&am…

SparkStreaming与Kafka整合

1.3 SparkStreaming与Kafka整合 1.3.1 整合简述 kafka是做消息的缓存,数据和业务隔离操作的消息队列,而sparkstreaming是一款准实时流式计算框架,所以二者的整合,是大势所趋。 ​ 二者的整合,有主要的两大版本。 kaf…

Java流程控制语句(if语句,switch语句,for循环,while循环,do...while循环,三种循环的区别)

文章目录 第一章 流程控制语句1.1 流程控制语句分类1.2 顺序结构 第二章 判断语句:if语句2.1 if语句格式1练习1:老丈人选女婿练习2:考试奖励第一种格式的细节: 2.2 if语句格式2练习1:吃饭练习2:影院选座 2.…

MATLAB中./和/,.*和*,.^和^的区别

MATLAB中./和/,.*和*,.^ 和^ 的区别 MATLAB中./和/,.*和*,.^ 和^ 的区别./ 和 / 的区别.//实验实验结果 .* 和 * 的区别.**实验实验结果 .^ 和^ 的区别.^n^n实验运行结果 MATLAB中./和/,.和,.^ 和^ 的区别 …