债券专题二:可转债估值-二叉树模型
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成员函数尝试给这把锁头加锁,但是只有一个线程可以成功给这把锁加锁,其他没有加锁成功的线…...
盲盒小程序开发
现如今,盲盒已经成为了市场上不可忽视的新型消费模式,并且也逐渐遍布在全球各地中。盲盒的种类商品也逐渐丰富完善,不在局限于性价比高的盲盒玩具、手办等,也发展到了美妆、电子、食品等行业,具有较大的实用性和收藏价…...
DeepSeek 赋能智慧能源:微电网优化调度的智能革新路径
目录 一、智慧能源微电网优化调度概述1.1 智慧能源微电网概念1.2 优化调度的重要性1.3 目前面临的挑战 二、DeepSeek 技术探秘2.1 DeepSeek 技术原理2.2 DeepSeek 独特优势2.3 DeepSeek 在 AI 领域地位 三、DeepSeek 在微电网优化调度中的应用剖析3.1 数据处理与分析3.2 预测与…...
FFmpeg 低延迟同屏方案
引言 在实时互动需求激增的当下,无论是在线教育中的师生同屏演示、远程办公的屏幕共享协作,还是游戏直播的画面实时传输,低延迟同屏已成为保障用户体验的核心指标。FFmpeg 作为一款功能强大的多媒体框架,凭借其灵活的编解码、数据…...
深入浅出:JavaScript 中的 `window.crypto.getRandomValues()` 方法
深入浅出:JavaScript 中的 window.crypto.getRandomValues() 方法 在现代 Web 开发中,随机数的生成看似简单,却隐藏着许多玄机。无论是生成密码、加密密钥,还是创建安全令牌,随机数的质量直接关系到系统的安全性。Jav…...
大数据零基础学习day1之环境准备和大数据初步理解
学习大数据会使用到多台Linux服务器。 一、环境准备 1、VMware 基于VMware构建Linux虚拟机 是大数据从业者或者IT从业者的必备技能之一也是成本低廉的方案 所以VMware虚拟机方案是必须要学习的。 (1)设置网关 打开VMware虚拟机,点击编辑…...
前端导出带有合并单元格的列表
// 导出async function exportExcel(fileName "共识调整.xlsx") {// 所有数据const exportData await getAllMainData();// 表头内容let fitstTitleList [];const secondTitleList [];allColumns.value.forEach(column > {if (!column.children) {fitstTitleL…...
HTML前端开发:JavaScript 常用事件详解
作为前端开发的核心,JavaScript 事件是用户与网页交互的基础。以下是常见事件的详细说明和用法示例: 1. onclick - 点击事件 当元素被单击时触发(左键点击) button.onclick function() {alert("按钮被点击了!&…...
Unit 1 深度强化学习简介
Deep RL Course ——Unit 1 Introduction 从理论和实践层面深入学习深度强化学习。学会使用知名的深度强化学习库,例如 Stable Baselines3、RL Baselines3 Zoo、Sample Factory 和 CleanRL。在独特的环境中训练智能体,比如 SnowballFight、Huggy the Do…...
安宝特方案丨船舶智造的“AR+AI+作业标准化管理解决方案”(装配)
船舶制造装配管理现状:装配工作依赖人工经验,装配工人凭借长期实践积累的操作技巧完成零部件组装。企业通常制定了装配作业指导书,但在实际执行中,工人对指导书的理解和遵循程度参差不齐。 船舶装配过程中的挑战与需求 挑战 (1…...
【Go语言基础【12】】指针:声明、取地址、解引用
文章目录 零、概述:指针 vs. 引用(类比其他语言)一、指针基础概念二、指针声明与初始化三、指针操作符1. &:取地址(拿到内存地址)2. *:解引用(拿到值) 四、空指针&am…...
动态 Web 开发技术入门篇
一、HTTP 协议核心 1.1 HTTP 基础 协议全称 :HyperText Transfer Protocol(超文本传输协议) 默认端口 :HTTP 使用 80 端口,HTTPS 使用 443 端口。 请求方法 : GET :用于获取资源,…...
