债券专题二:可转债估值-二叉树模型
1. 模型背景
由于可转债自身的属性较多,因此对其定价的难度也会加大,在诸多影响因素中,未来的股价占比最高。由于股价的不可预测性,导致了可转债的定价在实际交易中作用非常有限。随着可转债发行数量和规模的增大,越来越多的机构参与到其中,这也使得越来越多的人开始研究可转债定价,可转债的投机属性降低。随着量化投资的火爆,越来越多的可转债影响因素被标准化,推动了可转债模型定价的迭代的发展。基于市场扩容和技术进步,可转债定价有效性在逐渐加大。目前常见的可转债估值模型有3种:BS模型,二叉树模型,蒙特卡罗模型。本文主要分享二叉树模型的估值逻辑,并复现其代码。
2. 模型公式


3. 模型代码
import numpy as npclass Convertible_Bond(object):def __init__(self, T, vol, market, st, rate, r, coupon, r_, dt, up, down, lp):self.T = T # 期限self.vol = vol # 波动率self.market = market # 面值self.st = st # 股票价格self.rate = rate # 转换比率self.r = r # 无风险利率self.coupon = coupon # 票息self.r_ = r_ # 信用利差self.dt = dt # 赎回间隔self.up = up # 上涨空间self.down = down # 下跌空间self.lp = lp # 赎回价格# 计算风险中性概率def risk_p(self):a = np.e ** (self.r * self.dt)return (a - self.down) / (self.up - self.down)# 计算到期价值def expire_value(self, expire_price):# expire_price:到期股票价格# 计算到期转换价值change_value = expire_price * self.rate + self.market * self.coupon# 计算含票息的价值coupon_value = self.market * (1 + self.coupon)V = max(change_value, coupon_value)return V# 计算每一个节点的连续价值def continuous_value(self, expire_up, expire_down):# expire_down:下一节点下跌对应的可转债到期价值# expire_up:下一节点上涨对应的可转债到期价值b = np.e ** (-(self.r + self.r_) * self.dt)risk_p = self.risk_p()coupon_v = self.market * self.couponH = b * (risk_p * expire_up + (1 - risk_p) * expire_down) + coupon_vreturn H# 计算当前的节点价值def really_value(self, expire_price, H):# 计算提前兑付值,假设在赎回时获得票息收入C = self.market * self.couponK = self.market + CV = max(self.rate * expire_price + C, min(H, K))return V
4. 模型实例
某可赎回可转债要素如下:(为简化起见,模型暂不考虑部分可转债的特性,使用两步长的最基础的可转债作为案例。)
| 可赎回-可转债要素 | |||
| 期限 | 2年 | 波动率 | 20% |
| 面值 | 100 | 股票价格 | 100 |
| 转换比例 | 0.8 | 利率 | 3% |
| 票息率 | 3% | 信用利差 | 1% |
| 赎回条款 | 只在第一年 | 上涨比例 | 1.2214 |
| 赎回价格 | 100 | 下跌比例 | 0.8187 |
首先,对函数进行传参,同时计算s1到s5的值:
if __name__ == '__main__':T, vol, market, st, rate, r = 2, 0.2, 100, 100, 0.8, 0.03coupon, r_, dt, up, down, lp = 0.03, 0.01, 1, 1.2214, 0.8187, 100model = Convertible_Bond( T, vol, market, st, rate,r, coupon, r_, dt, up, down, lp)# 分别计算股票s1,到s5的值s1 = round(st*up,2)s2 = round(st*down,2)s3 = round(s1*up,2)s4 = round(s1*down,2)s5 = round(s2*down,2)
计算得到的结果为:

然后,根据 s3,s4,s5的值可以计算出对应节点债券的到期价值:

接下来,根据b3到b5的到期价值,计算b1,b2节点上的连续价值H1,H2:
随后,考虑可赎回性,根据s1,s2和H1,H2,计算b1,b2节点上的 节点价值1,V2:

紧接着,使用V1和V2的 值计算当前节点的连续价值H,根据H和s1计算当前节点可赎回债券的估值V:

本章节的完整代码为:
if __name__ == '__main__':T, vol, market, st, rate, r = 2, 0.2, 100, 100, 0.8, 0.03coupon, r_, dt, up, down, lp = 0.03, 0.01, 1, 1.2214, 0.8187, 100model = Convertible_Bond(T, vol, market, st, rate,r, coupon, r_, dt, up, down, lp)# 分别计算股票s1,到s5的值s1 = round(st * up, 2)s2 = round(st * down, 2)s3 = round(s1 * up, 2)s4 = round(s1 * down, 2)s5 = round(s2 * down, 2)# 计算债券b3,b4,b5的值b3 = round(model.expire_value(s3), 2)b4 = round(model.expire_value(s4), 2)b5 = round(model.expire_value(s5), 2)# 计算H1和H2的值H1 = round(model.continuous_value(b3, b4), 2)H2 = round(model.continuous_value(b4, b5), 2)# 计算b1,b2节点上的节点价值V1 = model.really_value(s1, H1)V2 = model.really_value(s2, H2)# 计算当前节点的连续价值HH = round(model.continuous_value(V1, V2), 2)# 计算当前节点可转债的估值V = model.really_value(st, H)
本期分享结束,有何问题欢迎随时交流。
相关文章:
债券专题二:可转债估值-二叉树模型
1. 模型背景 由于可转债自身的属性较多,因此对其定价的难度也会加大,在诸多影响因素中,未来的股价占比最高。由于股价的不可预测性,导致了可转债的定价在实际交易中作用非常有限。随着可转债发行数量和规模的增大,越…...
【闲谈】开源软件的崛起与影响
随着信息技术的快速发展,开源软件已经成为软件开发的趋势,并产生了深远的影响。开源软件的低成本、可协作性和透明度等特点,使得越来越多的企业和个人选择使用开源软件,促进了软件行业的繁荣。然而,在使用开源软件的过…...
【教程】Linux使用aria2c多线程满速下载
转载请注明出处:小锋学长生活大爆炸[xfxuezhang.cn] 安装aria2c: sudo apt-get install aria2多线程下载: aria2c -x 16 -s 16 <url> 比如: aria2c -x 16 -s 16 http://images.cocodataset.org/zips/test2017.zip...
【漏洞复现】蓝网科技临床浏览系统信息泄露漏洞
Nx01 产品简介 蓝网科技临床浏览系统是一个专门用于医疗行业的软件系统,主要用于医生、护士和其他医疗专业人员在临床工作中进行信息浏览、查询和管理。 Nx02 漏洞描述 蓝网科技临床浏览系统存在信息泄露漏洞,攻击者可以利用该漏洞获取敏感信息。 Nx03…...
JSON转换List<Map<String, Object>>、Map<String, Object>
废话就不说了 早上10点研究到现在 获取redis的JSON字符串 String getPalletListNew redisService.getRedis(“getPalletListNew”, abroad “” goodsLevel “” startPort “” destinationPort “” maxTon “” minTon); 转换Map<String,Object> public …...
单主模式和多主模式切换
1 组复制模式切换注意点 组复制有两种运行模式,一种是单主模式,一种是多主模式。这个模式是在整个组中设置的,由 group_replication_single_primary_mode 这个系统变量指定,而且在所有成员上必须保持一致。ON 表示单主模式&#…...
petalinux2018.3安装步骤
1、虚拟机安装ubuntu-16.04.7-desktop-amd64.iso (注意:安装ubuntu-18.04.6-desktop-amd64.iso和ubuntu-16.04.6-desktop-i386.iso会报以下错误) environment: line 314: ((: 10 #15~1 > 10 #3: syntax error in expression (error toke…...
ubuntu22.04下使用conda安装pytorch(cpu及gpu版本)
本文介绍了conda下安装cpu、gpu版本的pytorch;并介绍了如何设置镜像源 ubuntu环境安装pytorch的CPU版本与GPU版本 系统:ubuntu22.04 显卡:RTX 3050 依赖工具:miniconda 确认环境 lsb_release -a No LSB modules are available.…...
突破编程_C++_高级教程(模板编程的基础知识)
1 模板编程的基本概念 C 的模板编程是一种编程技术,它允许程序员编写处理不同类型数据的通用代码。通过使用模板,可以创建与特定数据类型无关的函数或类,这些函数或类在编译时可以根据需要生成特定数据类型的版本。这增加了代码的复用性、灵…...
胆小勿入!AI创作恐怖电影宣传片《生化危机:重生》
胆小勿入!AI创作恐怖电影宣传片《生化危机:重生》 "The city is falling, and the dead walk among us." "In the shadow of the apocalypse, the fight for survival begins." "The streets are silent, but the nightmare …...
HTTP 超文本传送协议
1 超文本传送协议 HTTP HTTP 是面向事务的 (transaction-oriented) 应用层协议。 使用 TCP 连接进行可靠的传送。 定义了浏览器与万维网服务器通信的格式和规则。 是万维网上能够可靠地交换文件(包括文本、声音、图像等各种多媒体文件)的重要基础。 H…...
MySQL导入/导出数据
MySQL导入/导出数据 文章目录 MySQL导入/导出数据一、MySQL 导入数据1、mysql 命令导入2、source 命令导入3、使用 LOAD DATA 导入数据4、使用 mysqlimport 导入数据4.1、mysqlimport的常用选项介绍 二、MySQL 导出数据1、使用 SELECT ... INTO OUTFILE 语句导出数据2、mysqldu…...
Matplotlib初探:认识数据可视化与Matplotlib
Matplotlib初探:认识数据可视化与Matplotlib Fig.1 利用Matplotlib进行数据可视化( 可视化代码见文末) 🌵文章目录🌵 🌳引言🌳🌳一、数据可视化简介🌳🌳二、Matplotlib库简介&#x…...
LeetCode 0987.二叉树的垂序遍历:遍历时存节点信息,遍历完自定义排序
【LetMeFly】987.二叉树的垂序遍历:遍历时存节点信息,遍历完自定义排序 力扣题目链接:https://leetcode.cn/problems/vertical-order-traversal-of-a-binary-tree/ 给你二叉树的根结点 root ,请你设计算法计算二叉树的 垂序遍历…...
TCP 和 UDP的区别
文章目录 概述区别UDPTCPTCP与UDP的选择UDP和TCP编程区别 概述 TCP(Transmission Control Protocol,传输控制协议)和 UDP(User Datagram Protocol,用户数据报协议)是互联网中两种最常用的传输层协议 总的来…...
Python 将一维数组或矩阵变为三维
Python 将一维数组或矩阵变为三维 正文 正文 话不多说直接上代码: import numpy as npsampling_points 10001arr np.linspace(0, 2, sampling_points) arr_3D arr.reshape(1, 1, -1) print(arr_3D) """ result: [[[0.0000e00 2.0000e-04 4.0000…...
Python如何实现定时发送qq消息
因为生活中老是忘记各种事情,刚好又在学python,便突发奇想通过python实现提醒任务的功能(尽管TIM有定时功能),也可定时给好友、群、讨论组发送qq消息。其工作流程是:访问数据库提取最近计划——>根据数据…...
支付方式接入:支付宝、微信支付、微软支付
支付方式接入:支付宝、微信支付、微软支付 1、微信支付-接入指引 2、支付宝-接入指引 3、微软支付-接入指引 3.1、使用visual studio打包应用(发布到微软市场):Package a desktop app from source code using Visual Studio -…...
C++中的互斥量
互斥量是一个类,互斥量的使用必须引入头文件#include <mutex>。互斥量就如同一把锁,在同一时间,多个线程都可以调用lock成员函数尝试给这把锁头加锁,但是只有一个线程可以成功给这把锁加锁,其他没有加锁成功的线…...
盲盒小程序开发
现如今,盲盒已经成为了市场上不可忽视的新型消费模式,并且也逐渐遍布在全球各地中。盲盒的种类商品也逐渐丰富完善,不在局限于性价比高的盲盒玩具、手办等,也发展到了美妆、电子、食品等行业,具有较大的实用性和收藏价…...
Cursor实现用excel数据填充word模版的方法
cursor主页:https://www.cursor.com/ 任务目标:把excel格式的数据里的单元格,按照某一个固定模版填充到word中 文章目录 注意事项逐步生成程序1. 确定格式2. 调试程序 注意事项 直接给一个excel文件和最终呈现的word文件的示例,…...
相机Camera日志实例分析之二:相机Camx【专业模式开启直方图拍照】单帧流程日志详解
【关注我,后续持续新增专题博文,谢谢!!!】 上一篇我们讲了: 这一篇我们开始讲: 目录 一、场景操作步骤 二、日志基础关键字分级如下 三、场景日志如下: 一、场景操作步骤 操作步…...
Auto-Coder使用GPT-4o完成:在用TabPFN这个模型构建一个预测未来3天涨跌的分类任务
通过akshare库,获取股票数据,并生成TabPFN这个模型 可以识别、处理的格式,写一个完整的预处理示例,并构建一个预测未来 3 天股价涨跌的分类任务 用TabPFN这个模型构建一个预测未来 3 天股价涨跌的分类任务,进行预测并输…...
视频字幕质量评估的大规模细粒度基准
大家读完觉得有帮助记得关注和点赞!!! 摘要 视频字幕在文本到视频生成任务中起着至关重要的作用,因为它们的质量直接影响所生成视频的语义连贯性和视觉保真度。尽管大型视觉-语言模型(VLMs)在字幕生成方面…...
均衡后的SNRSINR
本文主要摘自参考文献中的前两篇,相关文献中经常会出现MIMO检测后的SINR不过一直没有找到相关数学推到过程,其中文献[1]中给出了相关原理在此仅做记录。 1. 系统模型 复信道模型 n t n_t nt 根发送天线, n r n_r nr 根接收天线的 MIMO 系…...
让回归模型不再被异常值“带跑偏“,MSE和Cauchy损失函数在噪声数据环境下的实战对比
在机器学习的回归分析中,损失函数的选择对模型性能具有决定性影响。均方误差(MSE)作为经典的损失函数,在处理干净数据时表现优异,但在面对包含异常值的噪声数据时,其对大误差的二次惩罚机制往往导致模型参数…...
JVM虚拟机:内存结构、垃圾回收、性能优化
1、JVM虚拟机的简介 Java 虚拟机(Java Virtual Machine 简称:JVM)是运行所有 Java 程序的抽象计算机,是 Java 语言的运行环境,实现了 Java 程序的跨平台特性。JVM 屏蔽了与具体操作系统平台相关的信息,使得 Java 程序只需生成在 JVM 上运行的目标代码(字节码),就可以…...
IP如何挑?2025年海外专线IP如何购买?
你花了时间和预算买了IP,结果IP质量不佳,项目效率低下不说,还可能带来莫名的网络问题,是不是太闹心了?尤其是在面对海外专线IP时,到底怎么才能买到适合自己的呢?所以,挑IP绝对是个技…...
Go语言多线程问题
打印零与奇偶数(leetcode 1116) 方法1:使用互斥锁和条件变量 package mainimport ("fmt""sync" )type ZeroEvenOdd struct {n intzeroMutex sync.MutexevenMutex sync.MutexoddMutex sync.Mutexcurrent int…...
32单片机——基本定时器
STM32F103有众多的定时器,其中包括2个基本定时器(TIM6和TIM7)、4个通用定时器(TIM2~TIM5)、2个高级控制定时器(TIM1和TIM8),这些定时器彼此完全独立,不共享任何资源 1、定…...
