python QTreeWidgetItem下面有几个子tree_【用Python金融建模】从二叉树谈起:衍生品Option期权定价模型的构建...

本文主要是介绍python QTreeWidgetItem下面有几个子tree_【用Python金融建模】从二叉树谈起:衍生品Option期权定价模型的构建...,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

4ae6548bdc57140af1622ad92df99c6f.png

内容首发

乐学偶得(http://lexueoude.com) 公众号: 乐学Fintech

用代码理解分析解决金融问题

在金融里面很多地方都出现过一个理念就是“货币的时间价值”,例如我们之前聊过的利用Python对项目进行估值判断 就是利用这一重要的思想:我们做出的决定,都是把未来的一系列现金流的【流入】和【流出】进行折现,通过我们理性人在做决定的时候,是选择对我们有利的事情——也就是折现到现在NPV为正的项目去做。

那么这个世界如果真的这么简单就好了,我们只需要把未来的现金流折现到现在,然后就可以愉快的进行判断了。

可是问题来了:未来并不确定。

而且万事万物都是相互联系的,也就是说A可能导致B,B导致C,这样蝴蝶效应传递下去,一个很小的偏差或者错误的估计会导致巨大的差错。

二叉树是我们对未来进行预判的一种思考方式,也是金融里面常用的模型,二叉树的思想如下:

1.事情的发展分成一个阶段一个阶段

2.每一个阶段只有两个结果:变好和变坏

如果这是一个项目,我们可以把项目通过二叉树进行估计,最好的情况,好成什么样,最差的情况,差成什么样,一目了然:

3f7f92c0eb209137e0084ed1ed20b50e.png
项目估值

还有一个非常重要的运用就是在拟合或者模拟未来股价的趋势上,股价本质上就是一系列的时间序列,所以说与项目的估值也是一类东西:随着时间的变化,价格随之改变

08587debf51d32e5a3732c87aca85da5.png
股价预测

我们下面就来介绍这样一个思考问题的方法与原理,并且通过Python进行建模计算:

二叉树的思想就是把未来时间轴分为一期一期,在每一期内,只有价格只有两种变化方向,向上,或者向下。我们从一期二叉树开始思考:

5cb9b60dc77693b2010ecbc6045a1310.png
一期二叉树

假设初始价格为S0,在第一期的时间内,有P的概率价格会上升,成为S0*u 的价格,因为在这段时间内只有两种可能,所以剩下

的1-P的概率价格会下跌,成为S0*d的价格。

u与d分别为up factor(上涨因子)与down factor(下跌因子),(我明白,涉及到公式经常会加什么什么因子,导致这个名字很山寨,但是因为多期二叉树中会用到,两个因子造成的影响也可能不一样,所以我们暂且尽量用一般公式与常见叫法去表示)

另外,我们为了多期二叉树能够重合,也就是上涨下跌与下跌上涨的结果一样,我们将u与d两个因子设立一个约束条件u*d=1

这样,我们从一期推广到多期,就可以得到如下流程图:

157ab06bd918cff30d219318d5694e9d.png
多期二叉树

也就是说,我们只要能知道p(上涨概率)与u(上涨因子),就能求出1-p(下跌概率),与d(因为约束关系),这样整个未来的价格的路径就能够知道了。

好了,这样我们就知道最简单的标的资产,通过二叉树的方法进行预测未来变动,是什么样的路径了。

我们接下来再把问题弄复杂一点,假设我们研究的不是简单的标的资产,比如说并不是一个单一的项目(可以看做一系列的未来现金流)或者是一个简单的股票,而是衍生品,也就是说定价是衍生在原标的资产上的产品,那我们如何进行定价呢?

这就涉及到了二叉树运用非常多的一个方面——衍生品定价。

我们接下来还是以例子,只不过我们研究的不仅仅是标的资产(比如说股票stock),而是衍生在标的资产上的金融产品(比如说期权option),我们该如何定价呢?

157ab06bd918cff30d219318d5694e9d.png
标的资产二叉树

4721d7744d1d1e6855e254c3706ba3a4.png
标的资产上衍生的call option

对于Call Option(看涨期权),其实价格非常好计算,X为执行价格,就是max(X-S0u^1,0)或者是max(X-S0d^1,0),也就是说要么为执行价格与股价的差价,要么为0.

这样,我们在0时刻的期权价格也非常好计算了,

期权价格= [ p ×上涨时期权价格 + (1−p) ×下跌时期权价格] × 折现因子

当然折现因子在这里可以用连续复利也可以用离散复利的方法折现,比较推荐连续复利,因为更加准确。

a1c14a78706e65df4ddf2866a964cfa0.png
利用连续复利的方法进行折现

那么我们到这里已经完全具备了建模的理论基础了,我们接下来用Python建立二叉树模型进行定价计算,这样不仅能巩固我们的概念,也能锻炼我们的建模能力:

我们首先可以先调整numpy的显示,因为如果期数较多的情况下jupyter notebook中会截断大量数据,我们想让数据全部显示出来:

import 

然后我们只需要numpy帮我们储存一下数据并且计算即可,当然也可以用pandas,但是因为数据结构并不复杂,有点大材小用,我们用array就能搞定了。

import numpy as np

我们现在可以自定义一个函数,把可以在市场上观测到的信息作为参数:

def binomial_tree_call_option_pricing_model(N,T,S0,sigma,r,K,show_array=False):dt=T/Nu=np.exp(sigma*np.sqrt(dt))d=1/up=(np.exp(r*dt)-d)/(u-d)

其中N为期数,T为总时间,S0为初始价格,sigma为波动率,r为无风险利率,K为执行价格,show_array为一个开关,我们可以用show_array 来控制,是否显示array。

dt为将总时间通过除以期数切分为每一个小段,每一个小段为一期二叉树。

u为上涨多少,这个是根据上述讲到的公式来确定的,同样,为了二叉树能重合,d=1/u,通过约束关系也能表示出来。

p为上涨概率,同样根据上述讲到的公式来确定的

9291d1fdfbfc6075c819fb9dfaf608c4.png
上述讲到的公式

接着我们需要创建一个容器去储存我们的数据,我可以用numpy的zero生成全部是zero的矩阵用作存放数据的容器:

37533c1e446ed8349c5f352375e7235a.png

但是因为这个容器是需要随着数据的多少而随之变化,也就是不能是固定的大小,于是我们可以通过变量进行解决:

price_tree=np.zeros([N+1,N+1])

然后我们就可以将这个容器里面的数据填满了,我们首先填入的是价格,也就是比如标的资产是股票的话,股票在未来T时间段里的每一个dt期间变动的可能价格,我们全部放入:

    for i in range(N+1):for j in range(i+1):price_tree[j,i]=S0*(d**j)*(u**(i-j))

这里有一个nested for loop的技巧,我们在很多list of lists, array等里面都会用到。另外,价格上升也下降我们通过N+1和i+1确定range,i和j的约束关系控制上涨个下跌的次数

接着我们依葫芦画瓢的方法先建立起option价格的tree:

我们首先计算每一个期权价格:

    option_tree=np.zeros([N+1,N+1])option_tree[:,N]=np.maximum(np.zeros(N+1),price_tree[:,N]-K)

然后我们把期权价格通过反向进行折现,求出t=0时刻的价格:

  for i in np.arange(N-1,-1,-1):for j in np.arange(0,i+1):option_tree[j,i]=np.exp(-r*dt)*(p*option_tree[j,i+1]+(1-p)*option_tree[j+1,i+1])

然后我们就可以直接返回array的值就可以了,因为我们在参数中直接将show_array设置成了False,所以是默认不显示出整个树状结构的:

    if show_array:return [option_tree[0,0],np.round(price_tree),np.round(option_tree)]else:return option_tree[0,0]

这样我们能直接返回这个期权定价的初始价值,如果我们将show_array调成True,则执行第一段,将整个树状结构也就是每一个标的资产价值显示出,当然,我们为了美观,将array中的结果进行了round,没有保留小数。

decde7585274794e5058d0f67d68d504.png

当然,我们还没有讨论一个问题,就是上涨概率和下跌概率与风险中性定价原则,我们在接下来为大家介绍......未完待续......

以上为《Python零基础入门编程的新世界》部分内容笔记。用Python做爬虫,数据分析,全栈建设,Fintech金融量化,机器学习,办公自动化,树莓派,美好生活DIY,......2000+连载,不仅有编程,还有更多原理讲解。

零基础Python入门编程全栈量化AI - 网易云课堂​study.163.com

另外,也欢迎关注一个非常干的干货公众号: 乐学Fintech 用代码理解分析解决金融问题

ffd953fd7d7348106cdccb128b7d04e5.png

这篇关于python QTreeWidgetItem下面有几个子tree_【用Python金融建模】从二叉树谈起:衍生品Option期权定价模型的构建...的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/382831

相关文章

大模型研发全揭秘:客服工单数据标注的完整攻略

在人工智能(AI)领域,数据标注是模型训练过程中至关重要的一步。无论你是新手还是有经验的从业者,掌握数据标注的技术细节和常见问题的解决方案都能为你的AI项目增添不少价值。在电信运营商的客服系统中,工单数据是客户问题和解决方案的重要记录。通过对这些工单数据进行有效标注,不仅能够帮助提升客服自动化系统的智能化水平,还能优化客户服务流程,提高客户满意度。本文将详细介绍如何在电信运营商客服工单的背景下进行

python: 多模块(.py)中全局变量的导入

文章目录 global关键字可变类型和不可变类型数据的内存地址单模块(单个py文件)的全局变量示例总结 多模块(多个py文件)的全局变量from x import x导入全局变量示例 import x导入全局变量示例 总结 global关键字 global 的作用范围是模块(.py)级别: 当你在一个模块(文件)中使用 global 声明变量时,这个变量只在该模块的全局命名空

每天认识几个maven依赖(ActiveMQ+activemq-jaxb+activesoap+activespace+adarwin)

八、ActiveMQ 1、是什么? ActiveMQ 是一个开源的消息中间件(Message Broker),由 Apache 软件基金会开发和维护。它实现了 Java 消息服务(Java Message Service, JMS)规范,并支持多种消息传递协议,包括 AMQP、MQTT 和 OpenWire 等。 2、有什么用? 可靠性:ActiveMQ 提供了消息持久性和事务支持,确保消

Andrej Karpathy最新采访:认知核心模型10亿参数就够了,AI会打破教育不公的僵局

夕小瑶科技说 原创  作者 | 海野 AI圈子的红人,AI大神Andrej Karpathy,曾是OpenAI联合创始人之一,特斯拉AI总监。上一次的动态是官宣创办一家名为 Eureka Labs 的人工智能+教育公司 ,宣布将长期致力于AI原生教育。 近日,Andrej Karpathy接受了No Priors(投资博客)的采访,与硅谷知名投资人 Sara Guo 和 Elad G

嵌入式QT开发:构建高效智能的嵌入式系统

摘要: 本文深入探讨了嵌入式 QT 相关的各个方面。从 QT 框架的基础架构和核心概念出发,详细阐述了其在嵌入式环境中的优势与特点。文中分析了嵌入式 QT 的开发环境搭建过程,包括交叉编译工具链的配置等关键步骤。进一步探讨了嵌入式 QT 的界面设计与开发,涵盖了从基本控件的使用到复杂界面布局的构建。同时也深入研究了信号与槽机制在嵌入式系统中的应用,以及嵌入式 QT 与硬件设备的交互,包括输入输出设

【Python编程】Linux创建虚拟环境并配置与notebook相连接

1.创建 使用 venv 创建虚拟环境。例如,在当前目录下创建一个名为 myenv 的虚拟环境: python3 -m venv myenv 2.激活 激活虚拟环境使其成为当前终端会话的活动环境。运行: source myenv/bin/activate 3.与notebook连接 在虚拟环境中,使用 pip 安装 Jupyter 和 ipykernel: pip instal

Retrieval-based-Voice-Conversion-WebUI模型构建指南

一、模型介绍 Retrieval-based-Voice-Conversion-WebUI(简称 RVC)模型是一个基于 VITS(Variational Inference with adversarial learning for end-to-end Text-to-Speech)的简单易用的语音转换框架。 具有以下特点 简单易用:RVC 模型通过简单易用的网页界面,使得用户无需深入了

【机器学习】高斯过程的基本概念和应用领域以及在python中的实例

引言 高斯过程(Gaussian Process,简称GP)是一种概率模型,用于描述一组随机变量的联合概率分布,其中任何一个有限维度的子集都具有高斯分布 文章目录 引言一、高斯过程1.1 基本定义1.1.1 随机过程1.1.2 高斯分布 1.2 高斯过程的特性1.2.1 联合高斯性1.2.2 均值函数1.2.3 协方差函数(或核函数) 1.3 核函数1.4 高斯过程回归(Gauss

uva 10061 How many zero's and how many digits ?(不同进制阶乘末尾几个0)+poj 1401

题意是求在base进制下的 n!的结果有几位数,末尾有几个0。 想起刚开始的时候做的一道10进制下的n阶乘末尾有几个零,以及之前有做过的一道n阶乘的位数。 当时都是在10进制下的。 10进制下的做法是: 1. n阶位数:直接 lg(n!)就是得数的位数。 2. n阶末尾0的个数:由于2 * 5 将会在得数中以0的形式存在,所以计算2或者计算5,由于因子中出现5必然出现2,所以直接一

透彻!驯服大型语言模型(LLMs)的五种方法,及具体方法选择思路

引言 随着时间的发展,大型语言模型不再停留在演示阶段而是逐步面向生产系统的应用,随着人们期望的不断增加,目标也发生了巨大的变化。在短短的几个月的时间里,人们对大模型的认识已经从对其zero-shot能力感到惊讶,转变为考虑改进模型质量、提高模型可用性。 「大语言模型(LLMs)其实就是利用高容量的模型架构(例如Transformer)对海量的、多种多样的数据分布进行建模得到,它包含了大量的先验