QuantLib学习笔记——利用quantlib绘制零息利率(zero rate)期限结构曲线

news2024/9/25 19:23:58

⭐️ 引言

利率,这个看似简单的概念,在金融领域有很多内涵。以这个词为基础,扩展出类似零息利率(即期利率)、远期利率等概念。本文就零息利率展开讨论,并绘制零息利率期限结构曲线。
在这里插入图片描述

⭐️ 一些金融概念

1.零息利率

即期利率(spot rate)又称为零息利率(zero rate),指的是一笔在中间无任何利息支付,到期后才偿付本金与利息的投资利率,比如我们常见的定期存款。

2.零息债券

零息债券也叫折价债券,它以折扣价发行,整个债券期内发行人不支付债息,到期时以面值向持有人兑付的债券。而它的收益率可以理解为该债券的零息利率。

我们了解了上述概念,对比于更一般的情况,比如附息债券(在债券持有期会有利息发生,即持有人会定期获得票息),利用分解的思想,附息债券可以理解为由多个零息债券构成,每个零息债券的到期收入就是附息债券的每次发生的票息,最后一个零息债券的到期收入就是附息债券的本金和票息。
可见,零息利率有多么重要啊!!

3.利率期限结构

利率期限结构(Term Structure of Interest Rates) 是指在某一时点上,不同期限利率或基金的收益率(Yield)与到期期限(Maturity)之间的关系。利率的期限结构反映了不同期限的资金供求关系,揭示了市场利率的总体水平和变化方向,为投资者从事债券投资和政府有关部门加强债券管理提供可参考的依据。

利率期限结构曲线可以分为3种:正曲线、逆曲线和平曲线。正曲线的特点是短期利率小于长期利率,意味着市场对未来的预期很乐观,投资者预期未来利率将会很高;逆曲线的特点是短期利率大于长期利率,意味着市场现在有诸多风险,投资者会选择短期利率高的投资途径;平曲线的特点是短期利率等于长期利率,说明市场投资者没有过分预期,处于稳定的状态。

⭐️ quantlib 一些基础

好了,了解了一些金融知识,我们来看看本文代码使用的工具吧!
quantlib是一个免费、开源的量化金融计算软件库,它基于金融概念抽象出了一些数据结构并基于这些数据结构,提供了金融相关的各种计算,这里对本文要用到的组件进行简要说明。

1.Calendar

ql.Calendar类提供了一个接口,用于确定一个日期是给定交易所或给定国家的工作日还是假日,以及用于递增/递减给定工作日数的日期。
它支持很多国家的日历,本文采用的是美国的日历。

2.DayCounter

“计日惯例”对金融产品的估值至关重要,它会计算天数,本文使用的规则是Thirty360,即每月30天,一年360天。

3.零息利率期限结构

该类用于实例化一个零息利率期限结构

ql.ZeroCurve(dates, yields, dayCounter, cal, i, comp, freq)

参数说明如下

参数说明
Dates零息利率的到期日列表
yields零息利率列表
dayCounter计日器
cal日历
i线性插值方法,这里线性很重要,不是非线性的哦!
comp是单利还是复利计息
freq计息频率

⭐️ 代码

本文利用线性和非线性插值方法生成利率期限结构曲线并将其绘制出来:

import numpy as np
import QuantLib as ql
import matplotlib
import matplotlib.pyplot as plt


if __name__ == "__main__": 
    # 日历
    cal = ql.UnitedStates(0)
    # 天数计数器
    day_cnt = ql.Thirty365()
    # 已知即期日期
    spot_dates = [ql.Date(15,1,2020), ql.Date(15,7,2020), ql.Date(15,1,2021), ql.Date(15,7,2021), ql.Date(15,1,2022)]
    # 已知即期利率
    spot_rates = [0.1, 0.2, 0.3, 0.25, 0.19]
    # 利率结构曲线(采用不同插值方法)
    z_curve = ql.ZeroCurve(spot_dates, spot_rates, day_cnt, cal)
    llz_curve = ql.LogLinearZeroCurve(spot_dates, spot_rates, day_cnt, cal)
    cz_curve = ql.CubicZeroCurve(spot_dates, spot_rates, day_cnt, cal)
    ncz_curve = ql.NaturalCubicZeroCurve(spot_dates, spot_rates, day_cnt, cal)
    lcz_curve = ql.LogCubicZeroCurve(spot_dates, spot_rates, day_cnt, cal)
    mcz_curve = ql.MonotonicCubicZeroCurve(spot_dates, spot_rates, day_cnt, cal)
    # 采用的插值方法和对应的利率结构曲线
    curve_list = dict({"ZeroCurve":z_curve, "LogLinearZeroCurve":llz_curve, "CubicZeroCurve":cz_curve, 
                       "NaturalCubicZeroCurve":ncz_curve, "LogCubicZeroCurve":lcz_curve, "MonotonicCubicZeroCurve":mcz_curve, })
    # 绘图准备
    matplotlib.rcParams['font.sans-serif'] = ['SimHei']
    matplotlib.rcParams['axes.unicode_minus'] = False
    fig = plt.figure(figsize=(9, 7), facecolor='w')
    fig.suptitle('利用不同插值方法生成即期利率结构曲线', fontsize=15)    
    # 遍历所有插值类型
    for i in range(len(list(curve_list.keys()))):
        # 插值类型
        curve_type = list(curve_list.keys())[i]
        print(curve_type)
        # YieldTermStructureHandle
        handle = ql.YieldTermStructureHandle(curve_list[curve_type])
        # 生成多个时间点,以年为单位
        times = np.linspace(0, handle.maxTime(), 100)
        # 计算时间对应的利率
        rate_list = [handle.zeroRate(t, ql.Continuous).rate() for t in times]
        # 绘制子图
        ax = fig.add_subplot(2, 3, i+1)
        ax.set_xlabel("years")
        ax.set_ylabel("rate")
        ax.plot(times, rate_list)
        ax.grid(visible=True, ls=":", color="#808080")
        ax.set_title(r'%s' % curve_type, fontsize=12)
    plt.tight_layout()
    plt.subplots_adjust(top=0.9)
    plt.show()
    # plt.savefig('zerorate.png', dpi=800)

绘图结果如下
在这里插入图片描述
笔者水平有限,若有不对的地方欢迎评论指正!

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

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

相关文章

TCP拥塞控制详解 | 6. 主动队列管理

网络传输问题本质上是对网络资源的共享和复用问题,因此拥塞控制是网络工程领域的核心问题之一,并且随着互联网和数据中心流量的爆炸式增长,相关算法和机制出现了很多创新,本系列是免费电子书《TCP Congestion Control: A Systems …

中小企业进销存软件哪个好?4款进销存商品管理软件推荐-亿发

在现代商业运营中,有效的开单记账系统是中小商户增强管理水平、优化业务流程的重要利器。市面上涌现出众多开单记账软件,如亿发软件、秦丝、智慧记、管家婆等,每款软件都有各自的优势和特点。本文帮助您了解每款软件的特点,为您的…

周期性函数算出其周期(python)

在日常生活中,总是会遇见一些周期性的函数,我们可以人眼看出他们是有一定规律的,但是我们不能准确地发现它们的周期是多少。 创建一根周期性曲线 import numpy as np import matplotlib.pyplot as plt# 定义周期性函数 def periodic_functi…

行业追踪,2023-08-21

自动复盘 2023-08-21 凡所有相,皆是虚妄。若见诸相非相,即见如来。 k 线图是最好的老师,每天持续发布板块的rps排名,追踪板块,板块来开仓,板块去清仓,丢弃自以为是的想法,板块去留让…

教师爱用查分利器

易查分是一款非常实用的教学工具,给老师们提供了便捷的学生成绩管理和学生信息管理功能。通过易查分,老师们可以轻松地发布学生成绩,录入成绩,并对学生信息进行有效管理,从而进行提高班级管理效率。 易查分能够方便地发…

通过 git上传到 gitee 仓库

介绍 Git是目前世界上最先进的分布式版本控制系统,有这么几个特点: 分布式 :是用来保存工程源代码历史状态的命令行工具。保存点 :保存点可以追溯源码中的文件,并能得到某个时间点上的整个工程项目额状态;…

在google play store 里安装expo go

参考链接: https://chat.xutongbao.top/

智慧医院IT运维方案,全局网络态势感知

随着医疗卫生体制改革不断深化,卫生行业信息化应用不断普及,大数据、AI、医疗物联网等技术的应用,快速推动“智慧医院”建设。以HIS(医院信息系统)、EMRS(电子病历系统)、PACS(影像归…

Linux学习 3

date 显示当前时间 date -s 字符串时间 ,设置系统时间 cal 显示当前日历,默认显示当前月 cal 2023 展示全年日历 find指令,从执行目录向下递归遍历各个子目录 find 搜索范围 选项 find /root -name hello.txt find /root -user goc fi…

Qt6之带三角形的提示框——仿ToDesk(3)

声明:本文仅用于用qt学习todesk界面设计; 如下左图有一排扩展功能的菜单,鼠标滑块会显示带三角形的提示框,本文将用qt实现如右图: 1、布局按钮 直接拖拽出QPushButton,7个,分别设置默认样式和…

从零开始,IntelliJ IDEA快速创建 SpringBoot 项目

准备 Java JDK8 下载 https://www.oracle.com/java/technologies/javase/javase-jdk8-downloads.html 开发工具 IntelliJ IDEA 下载 https://www.jetbrains.com/idea/ 接口调试工具 Postman 下载 https://www.postman.com/downloads/ 创建项目 用IDEA创建SpringBoot项目 打…

OLED透明屏案例:揭示技术创新的无限可能性

OLED透明屏作为一项创新性技术,在各个领域展现出了令人惊叹的应用潜力。 那么,尼伽便通过介绍一些具体的OLED透明屏案例,探索其在智能家居、汽车行业、商业展示、航空航天、教育与培训以及医疗健康等领域的成功应用。 这些案例将展示OLED透明…

JAMstack架构:快速构建安全、高性能的现代应用

随着Web应用的快速发展,开发者们在寻找更加高效、安全和可维护的应用架构。JAMstack架构应运而生,它通过将前端、后端和部署过程分离,提供了一种现代化的方式来构建Web应用。在本文中,我们将深入探讨JAMstack架构的特点、优势以及…

人事变动?前沃尔沃汽车大中华区总裁钦培吉将加盟吉利

根据消息,吉利控股集团高级副总裁杨学良在今天上午通过微博宣布,前沃尔沃汽车大中华区总裁钦培吉将加盟吉利。钦培吉将担任吉利汽车集团销售公司副总经理,并负责集团渠道发展委员会的主任一职,向吉利汽车集团的高级副总裁林杰报告…

什么是链表,前端如何理解链表

一、什么是链表 多个元素存储的列表链表中的元素在内存中不是顺序存储的,而是通过“next”指针联系在一起的。 JS中的原型链 原理就是 链表结构 链表结构 {key: "A",next: {key: "B",next: {key: "C",next: null}} } //原型链 //对…

“智荟·数字未来 2023-得帆数字化高管峰会”成功举办

规模空前,业内最大规模AIGC低代码数字化高管峰会 近日,根据IDC最新数据报告,得帆获得2022年独立低代码厂商市场份额第一,这是客户对得帆最大的认可,也是得帆优秀产品的体现,除了市场份额第一之外&#xff…

React通过docx-preview预览Word文档

前言 在基于React的Web应用中,我们经常遇到需要预览和展示Word文档的需求。而docx-preview是一个优秀的React组件库,可以帮助我们实现在Web页面上预览Word文档的功能。本文将介绍如何使用docx-preview组件来实现Word文档的预览,并提供一个案例…

Project ‘app‘ not found in root project ‘xxx‘

使用rn进行下载依赖时报了这个错误: 在android下的settings.gradle下查看是否有这段话:

CentOS 8.5修改安装包镜像源

1 备份原配置 cd /etc/yum.repos.d mkdir backup mv *.repo backup/2 下载镜像源 2.1 使用wget下载 wget http://mirrors.aliyun.com/repo/Centos-8.repo2.2 使用curl下载 我是安装的最小版本的系统,默认只有curl curl使用方法:https://www.ruanyife…

高效多用的群集-Haproxy搭建Web集群

Haproxy搭建 Web 群集 一、Haproxy前言 HAProxy是一个使用c语言编写的自由及开放源代码软件,其提供高可用性、负载均衡,以及基于TcP和HrrP的应用程序代理。HAProxy特别适用于那些负载特大的web站点,这些站点通常又需要会话保持或七层处理。…