QuantLib学习笔记——一个简单的价值估算案例

news2024/11/15 16:47:08

⭐️ 前言

QuantLib很强大,它实现了很多金融工具及其价值估算方法,从最简单的折现模型,到利用BSM模型对期权进行定价,覆盖面相当齐全。本文以一个简单的净现值估算案例,开启笔者金融工具估值的旅程。
在这里插入图片描述
开上豪车,出发!!!

⭐️ 一些概念

这里介绍一些金融投资上的概念,以便我们顺利进行接下来的实验。

名称解释
Portfolio投资组合,其中包含多个相同或不同的金融工具,例如可以包含一个期权和一个现金存款,也可以包含一个固定利率现金流和一个浮动利率现金流
Leg投资组合中的每一种金融工具,例如上面的期权,或者现金存款,或者现金流
Cashflow现金流,即一次现金的流入流出,主要属性包括日期及现金金额
Coupon票息,即债券持有人每次获得的利息,他也是一种现金流

他们的关系如下图

在这里插入图片描述

⭐️ 实验债券

债券的概念,这里就不细说了,点进来的小伙伴们应该都很熟悉了,我们讨论这样一种附息债券,债券持有人会在债券到期前,每隔一段时间获得一次票息,债券到期时,会获得最后一次利息和票面金额,具体来说,票面金额为100元,每次票息为5元,每隔一年支付一次票息,有效期4年。

⭐️ NPV

NPV,就是净现值,它是将未来的现金流按折现率或利率折合成现在的值,然后将折合后的所有现值相加得到的。本文也会给出折现率和NPV的关系。
在这里插入图片描述

本文的实验就是计算上面描述的债券的NPV。

⭐️ 观察者模式

观察者模式是程序设计当中常用的设计模式,当被观察者发生改变时,会将这种改变通知所有观察者,观察者们会根据具体的情况执行相应的操作。
在这里插入图片描述

在QuantLib中,Quote可以将数值包装成被观察者,其他对象例如Term Structures可以注册为该Quote的观察者,当Quote包装的对象改变时,Term Structures会得到通知,重新进行一些计算任务。

⭐️ 代码

import QuantLib as ql
import matplotlib.pyplot as plt


if __name__ == "__main__":
    # 参考日期
    ref_date = ql.Date(1,11,2023)
    # 利率Quote
    rate = ql.SimpleQuote(0.01)
    rate_handle=ql.QuoteHandle(rate)
    # 平直的利率曲线
    curve = ql.FlatForward(ref_date, rate_handle, ql.Actual365Fixed(), ql.Compounded)
    # 利率结构
    yts = ql.YieldTermStructureHandle(curve)    
    # 构造现金流及leg
    cf1 = ql.SimpleCashFlow(5, ref_date + 365)
    cf2 = ql.SimpleCashFlow(5, ref_date + 365*2)
    cf3 = ql.SimpleCashFlow(5, ref_date + 365*3)
    cf4 = ql.SimpleCashFlow(105, ref_date + 365*4)
    leg = ql.Leg([cf1, cf2, cf3, cf4])
    # 面值
    f = 100
    # 票息
    a = 5
    # 绘图坐标值
    x_ = []
    y_ = []
    # 构建绘图数据
    for i in range(5):
        # 修改利率的值
        rate.setValue(rate.value() + 0.01 * i)
        # 利率
        r = round(rate.value(), 2)
        # leg净现值
        npv = ql.CashFlows.npv(leg, yts, True, ref_date)
        
        print("***************************************")
        print(f'利率水平:{r}')
        
        pv=a/(1+rate.value()) + a/(1+rate.value())**2 + a/(1+rate.value())**3 + (a+f)/(1+rate.value())**4
        print(f'直接用折现公式计算的债券价格为:{pv}')
        
        print(f'Quantlib计算的债券价格为:{pv}')
        # 绘图坐标值
        x_.append(r)
        y_.append(npv) 
        
    plt.plot(x_, y_)
    plt.show()

输出结果如下

***************************************
利率水平:0.02
直接用折现公式计算的债券价格为:111.42318609602287
Quantlib计算的债券价格为:111.42318609602287
***************************************
利率水平:0.03
直接用折现公式计算的债券价格为:107.43419680562073
Quantlib计算的债券价格为:107.43419680562073
***************************************
利率水平:0.04
直接用折现公式计算的债券价格为:103.62989522425684
Quantlib计算的债券价格为:103.62989522425684
***************************************
利率水平:0.05
直接用折现公式计算的债券价格为:99.99999999999999
Quantlib计算的债券价格为:99.99999999999999
***************************************
利率水平:0.06
直接用折现公式计算的债券价格为:96.53489438730033
Quantlib计算的债券价格为:96.53489438730033

绘图结果如下
在这里插入图片描述
可见,折现率或利率越大,npv则越小。

笔者水平有限,若有不对的地方欢迎评论指正!

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

〔003〕虚幻 UE5 基础教程和蓝图入门

✨ 目录 🎈 新建项目🎈 快捷操作🎈 镜头移动速度🎈 新建蓝图关卡🎈 打印字符串🎈 蓝图的快捷键🎈 场景中放置物体🎈 通过蓝图改变物体位置🎈 展现物体运动轨迹&#x1f3…

泛微移动管理平台E-mobile lang2sql接口任意文件上传漏洞

一、漏洞描述 泛微e-mobile,由高端OA泛微专业研发,是业内领先的移动OA系统,提供移动审批,移动考勤,移动报表,企业微信等丰富办公应用,支持多种平台运行,灵活易用安全性高。 e-mobile可满足企业日常管理中的绝大部分管理需求, 诸如市场销售、项目、采购、研发、客服…

了解高防服务器的工作原理

在当今互联网时代,网络安全问题日益突出,各种网络攻击层出不穷。为了保护企业的网络安全,高防服务器应运而生。那么,你是否了解高防服务器的工作原理呢?下面就让我们一起来探索一下。 高防服务器是一种能够有效抵御各种网络攻击的…

“小众”与“竞争”:打造爆款新能源车型的两大方法

引言:在动荡的新能源汽车市场中,品牌如何从众多竞争者中脱颖而出,捕捉消费者的心呢?是否是从广袤的"主流"市场着手,还是从具有潜力的”小众"市场切入?或者,是否需要重新定义与既定的竞争者进行正面对抗的方式? 在新能源汽车翻涌的市场潮流中&…

利用浩客无代码开发API集成客服系统,提升用户服务质量

【浩客简介】 浩客,是由十年 SaaS 表单产品「金数据」团队打造的新产品。它主要面向数字化系统的用户评价、反馈、调研、通知工具,特定时机、精准触达,帮助产品经理、用研、UX、运营,聆听用户心声,增强用户触达&#…

【软件设计师 - 一周通关】1.考试介绍

目录 一、简介 考试项目 1、证书作用 (1)以考代评中高级职称 (2)一线城市人才引进落户 (3)就业优势 (4)个税抵扣 (5)技能补贴 2、含金量 3、报名时…

网络原理---拿捏传输层:TCP/UDP协议

文章目录 UDP协议源端口、目的端口UDP长度校验和 TCP协议源端口、目的端口4位首部长度、选项保留位:6位6个特殊标志位32位序号、32位确认序号:在确认应答机制中使用16位窗口大小:在流量控制机制中使用16位校验和 TCP协议 VS UDP协议 在本篇中…

C语言实现利用条件运算符的嵌套来完成此题:学习成绩>=90分的同学用A表示,60-89分之间的用B表示,60分以下的用C表示

完整代码&#xff1a; /*利用条件运算符的嵌套来完成此题&#xff1a;学习成绩>90分的同学用A表示&#xff0c;60-89分之间 的用B表示&#xff0c;60分以下的用C表示*/ #include<stdio.h>int main(){int score;char grade;printf("请输入你的成绩&#xff1a;&q…

【无标题】360压缩软件怎么用?超级好用!

360压缩是一款功能强大的解压缩软件&#xff0c;如何用它压缩文件呢&#xff1f;下面给出了详细的操作步骤。 一、360压缩详细步骤 1、下载软件后&#xff0c;在电脑上右击需要压缩的文件&#xff0c;在弹出的菜单中点击【添加到压缩文件】选项。 2、在360压缩窗口中按需设置相…

建立企业知识库,构建智慧团队

企业知识库的建立对于企业来说非常重要。它可以提高知识的共享和传递&#xff0c;使得员工之间更容易分享和获取信息。通过知识库&#xff0c;员工可以快速找到所需的知识资源&#xff0c;从而增强培训和学习效果。此外&#xff0c;企业知识库还能提升工作效率和团队协作能力。…

实验室通风系统工程-全钢通风柜-实验室废气处理

通风设备&#xff1a; 实验室常用的通风设备主要有&#xff1a;通风柜、原子吸收罩、万向排气罩、桌面式通风罩等。通风柜是安全处理有害、有毒气体或蒸汽的通风设备&#xff0c;作用是用来捕捉、密封和转移污染物以及有害气体&#xff0c;防止其逃逸到实验室内&#xff0c;这…

制药企业如何进行计算机化系统验证(CSV)

在制药行业&#xff0c;计算机化系统验证&#xff08;CSV&#xff09;是确保生产、质量管理和合规要求得到满足的重要步骤。CSV验证确保计算机化系统的可靠性、一致性和合规性&#xff0c;以保护产品质量和患者安全。本文将深入探讨计算机化系统验证的定义、制药企业进行CSV的原…

读完大呼过瘾的计算机书籍

目录 一导论 二《算法导论》 三《深入理解计算机系统》 四《代码大全》 五《设计模式&#xff1a;可复用面向对象软件的基础》 六《人月神话》 七总结 一导论 作为一个计算机专业的爱好者&#xff0c;我发现计算机科学和技术领域充满了无穷无尽的可能性。在探索这个世界…

超详细!DALL · E 文生图模型实践指南

最近需要用到 DALLE的推断功能&#xff0c;在现有开源代码基础上发现还有几个问题需要注意&#xff0c;谨以此篇博客记录之。 我用的源码主要是 https://github.com/borisdayma/dalle-mini 仓库中的Inference pipeline.ipynb 文件。 运行环境&#xff1a;Ubuntu服务器 ⚠️注意…

elementui-plus el-tree组件数据不显示问题解决

当前情况: 显示: 注意看右侧的树是没有文字的,数据已经渲染,个数是对的,但就是没有文字, 解决: 对比以后发现是template中的#default{data}没有写大括号导致的 所以写上大括号后: 正常显示

卷积神经网络中 6 种经典卷积操作

深度学习的模型大致可以分为两类&#xff0c;一类是卷积神经网络&#xff0c;另外一类循环神经网络&#xff0c;在计算机视觉领域应用最多的就是卷积神经网络&#xff08;CNN&#xff09;。CNN在图像分类、对象检测、语义分割等经典的视觉任务中表现出色&#xff0c;因此也早就…

【React-Native开发3D应用】React Native加载GLB格式3D模型并打包至Android手机端

【React-Native开发3D应用】React Native加载GLB格式3D模型并打包至Android手机端 【加载3D模型】**React Native上如何加载glb格式的模型**第零步&#xff0c;选择相关模型第一步&#xff0c;导入相关模型加载库第二步&#xff0c;自定义GLB模型加载钩子第三步&#xff0c;借助…

浅析淘宝为什么会严查套红包行为,如何从技术层面实现红包检测规避

最近不少做淘系电商的商家&#xff0c;遇到了一个普遍的问题就是&#xff1a;订单存在买手套红包导致被平台稽查的情况。这种情况&#xff0c;东哥了解到不是发生在某一两个商家身上&#xff0c;而是一个普遍现象。 下面东哥从为什么会稽查套红包的行为、稽查后会有什么后果、如…

学习使用JS实现Echarts的图表保存为图片功能:saveAsImage和getDataURL

学习使用JS实现Echarts的图表保存为图片功能 接口getDataURL实现思路 需求分析 实际项目开发过程中经常会有图表展示功能&#xff0c;同时为了满足用户需要&#xff0c;会附带着图表导出功能&#xff0c;主要形式就是保存为图片。在Echarts中本身就提供这种配置项&#xff0c;…