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

2023-11-07 20:36

本文主要是介绍QuantLib学习笔记——一个简单的价值估算案例,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

⭐️ 前言

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 pltif __name__ == "__main__":# 参考日期ref_date = ql.Date(1,11,2023)# 利率Quoterate = ql.SimpleQuote(0.01)rate_handle=ql.QuoteHandle(rate)# 平直的利率曲线curve = ql.FlatForward(ref_date, rate_handle, ql.Actual365Fixed(), ql.Compounded)# 利率结构yts = ql.YieldTermStructureHandle(curve)    # 构造现金流及legcf1 = 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())**4print(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则越小。

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

这篇关于QuantLib学习笔记——一个简单的价值估算案例的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



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

相关文章

PostgreSQL的扩展dict_int应用案例解析

《PostgreSQL的扩展dict_int应用案例解析》dict_int扩展为PostgreSQL提供了专业的整数文本处理能力,特别适合需要精确处理数字内容的搜索场景,本文给大家介绍PostgreS... 目录PostgreSQL的扩展dict_int一、扩展概述二、核心功能三、安装与启用四、字典配置方法

Python中re模块结合正则表达式的实际应用案例

《Python中re模块结合正则表达式的实际应用案例》Python中的re模块是用于处理正则表达式的强大工具,正则表达式是一种用来匹配字符串的模式,它可以在文本中搜索和匹配特定的字符串模式,这篇文章主... 目录前言re模块常用函数一、查看文本中是否包含 A 或 B 字符串二、替换多个关键词为统一格式三、提

Python get()函数用法案例详解

《Pythonget()函数用法案例详解》在Python中,get()是字典(dict)类型的内置方法,用于安全地获取字典中指定键对应的值,它的核心作用是避免因访问不存在的键而引发KeyError错... 目录简介基本语法一、用法二、案例:安全访问未知键三、案例:配置参数默认值简介python是一种高级编

MySQL中的索引结构和分类实战案例详解

《MySQL中的索引结构和分类实战案例详解》本文详解MySQL索引结构与分类,涵盖B树、B+树、哈希及全文索引,分析其原理与优劣势,并结合实战案例探讨创建、管理及优化技巧,助力提升查询性能,感兴趣的朋... 目录一、索引概述1.1 索引的定义与作用1.2 索引的基本原理二、索引结构详解2.1 B树索引2.2

从入门到精通MySQL 数据库索引(实战案例)

《从入门到精通MySQL数据库索引(实战案例)》索引是数据库的目录,提升查询速度,主要类型包括BTree、Hash、全文、空间索引,需根据场景选择,建议用于高频查询、关联字段、排序等,避免重复率高或... 目录一、索引是什么?能干嘛?核心作用:二、索引的 4 种主要类型(附通俗例子)1. BTree 索引(

HTML中meta标签的常见使用案例(示例详解)

《HTML中meta标签的常见使用案例(示例详解)》HTMLmeta标签用于提供文档元数据,涵盖字符编码、SEO优化、社交媒体集成、移动设备适配、浏览器控制及安全隐私设置,优化页面显示与搜索引擎索引... 目录html中meta标签的常见使用案例一、基础功能二、搜索引擎优化(seo)三、社交媒体集成四、移动

六个案例搞懂mysql间隙锁

《六个案例搞懂mysql间隙锁》MySQL中的间隙是指索引中两个索引键之间的空间,间隙锁用于防止范围查询期间的幻读,本文主要介绍了六个案例搞懂mysql间隙锁,具有一定的参考价值,感兴趣的可以了解一下... 目录概念解释间隙锁详解间隙锁触发条件间隙锁加锁规则案例演示案例一:唯一索引等值锁定存在的数据案例二:

基于Python实现一个简单的题库与在线考试系统

《基于Python实现一个简单的题库与在线考试系统》在当今信息化教育时代,在线学习与考试系统已成为教育技术领域的重要组成部分,本文就来介绍一下如何使用Python和PyQt5框架开发一个名为白泽题库系... 目录概述功能特点界面展示系统架构设计类结构图Excel题库填写格式模板题库题目填写格式表核心数据结构

Go学习记录之runtime包深入解析

《Go学习记录之runtime包深入解析》Go语言runtime包管理运行时环境,涵盖goroutine调度、内存分配、垃圾回收、类型信息等核心功能,:本文主要介绍Go学习记录之runtime包的... 目录前言:一、runtime包内容学习1、作用:① Goroutine和并发控制:② 垃圾回收:③ 栈和

Android学习总结之Java和kotlin区别超详细分析

《Android学习总结之Java和kotlin区别超详细分析》Java和Kotlin都是用于Android开发的编程语言,它们各自具有独特的特点和优势,:本文主要介绍Android学习总结之Ja... 目录一、空安全机制真题 1:Kotlin 如何解决 Java 的 NullPointerExceptio