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

⭐️ 引言

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

⭐️ 一些金融概念

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)

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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

前端进阶Html+css10----定位的参照对象(高频面试题)

1.relative的参照对象 1)元素按照标准流进行排布; 2)定位参照对象是元素自己原来的位置,可以通过left、right、top、bottom来进行位置调整; 2.absolute(子绝父相) 1)元素脱离标准流…

2023国赛数学建模思路 - 案例:退火算法

文章目录 1 退火算法原理1.1 物理背景1.2 背后的数学模型 2 退火算法实现2.1 算法流程2.2算法实现 建模资料 ## 0 赛题思路 (赛题出来以后第一时间在CSDN分享) https://blog.csdn.net/dc_sinor?typeblog 1 退火算法原理 1.1 物理背景 在热力学上&a…

阿里云容器镜像服务ACR(Alibaba Cloud Container Registry)推送镜像全过程及总结

前提:安装配置好docker,可参考我这篇 基于CentOS7安装配置docker与docker-compose。 一、设置访问凭证 1.1 容器镜像服务ACR 登录进入阿里云首页,点击 产品-容器-容器镜像服务ACR 点击管理控制台 1.2 进入控制台-点击实例列表 个人容器…

亚信科技AntDB数据库通过GB 18030-2022最高实现级别认证,荣膺首批通过该认证的产品之列

近日,亚信科技AntDB数据库通过GB 18030-2022《信息技术 中文编码字符集》最高实现级别(级别3)检测认证,成为首批通过该认证的数据库产品之一。 图1:AntDB通过GB 18030-2022最高实现级别认证 GB 18030《信息技术 中文编…

python中的matplotlib画散点图(数据分析与可视化)

python中的matplotlib画散点图(数据分析与可视化) import numpy as np import pandas as pd import matplotlib.pyplot as pltpd.set_option("max_columns",None) plt.rcParams[font.sans-serif][SimHei] plt.rcParams[axes.unicode_minus]Fa…

JVM——JVM 垃圾回收

文章目录 写在前面本节常见面试题本文导火索 1 揭开 JVM 内存分配与回收的神秘面纱1.1 对象优先在 eden 区分配1.2 大对象直接进入老年代1.3 长期存活的对象将进入老年代1.4 动态对象年龄判定1.5 主要进行 gc 的区域 2 对象已经死亡?2.1 引用计数法2.2 可达性分析算…

QT中资源文件resourcefile的使用,使用API完成页面布局

QT中资源文件resourcefile的使用 之前添加图标的方法使用资源文件的方法创建资源文件资源文件添加前缀资源文件添加资源使用资源文件中的资源 使用API完成布局使用QHBoxLayout完成水平布局使用QVBoxLayout完成垂直布局使用QGridLayout完成网格布局 在Qt中引入资源文件好处在于他…

日志搞不定?手把手教你如何使用Log4j2

系列文章目录 从零开始,手把手教你搭建Spring Boot后台工程并说明 Spring框架与SpringBoot的关联与区别 SpringBean生成流程详解 —— 由浅入深(附超精细流程图) Spring监听器用法与原理详解 Spring事务畅谈 —— 由浅入深彻底弄懂 Transactional注解 面试热点详解…

AS中回退git历史版本并删除历史提交记录

当您想把某个版本后的代码删除,回滚到指定的版本。可以使用一下的方法。 一、打开AS中git历史提交窗口 二、选择需要回滚的版本选项,右键弹出菜单。选择Reset Current Branch to Here... 三、选择 Hard 选项 soft:将合并的更改应用到当前分支…

Linux:编写编译脚本Makefile文件

一、生成可执行文件 1、一个源文件编译 本例子主要区别.c及.cpp文件及编译该文件时使用的编译链。 1).c文件 // testadd.c #include <stdio.h> int main() {int a 1;int b 2;int sum a b;printf("sum %d\n", sum);return 0; }// Makefie GXX g CC gcc…

计算机竞赛 基于YOLO实现的口罩佩戴检测 - python opemcv 深度学习

文章目录 0 前言1 课题介绍2 算法原理2.1 算法简介2.2 网络架构 3 关键代码4 数据集4.1 安装4.2 打开4.3 选择yolo标注格式4.4 打标签4.5 保存 5 训练6 实现效果6.1 pyqt实现简单GUI6.3 视频识别效果6.4 摄像头实时识别 7 最后 0 前言 &#x1f525; 优质竞赛项目系列&#xf…

13.4 目标检测锚框标注 非极大值抑制

锚框的形状计算公式 假设原图的高为H,宽为W 锚框形状详细公式推导 以每个像素为中心生成不同形状的锚框 # s是缩放比&#xff0c;ratio是宽高比 def multibox_prior(data, sizes, ratios):"""生成以每个像素为中心具有不同形状的锚框"""in_he…

windows安装新openssl后依然显示旧版本

1、Windows环境下升级openssl后&#xff0c;通过指令openssl version -a查看版本号&#xff1a; 这个版本号是以前的老版本&#xff0c;不知道在哪里 2、网上找了老半天也没找到答案&#xff0c;最后通过指令 where openssl 才找到原来的openssl在哪里&#xff0c;把老的卸载掉…

ASEMI快恢复二极管APT80DQ20BG封装尺寸

编辑-Z APT80DQ20BG参数描述&#xff1a; 型号&#xff1a;APT80DQ20BG 最大峰值反向电压(VRRM)&#xff1a;200V 最大直流阻断电压VR(DC)&#xff1a;200V 平均整流正向电流(IF)&#xff1a;80A 非重复峰值浪涌电流(IFSM)&#xff1a;600A 工作接点温度和储存温度(TJ, …

使用VisualStudio制作上位机(二)

文章目录 使用VisualStudio制作上位机(二)第三部分:GUI内部函数设计使用VisualStudio制作上位机(二) Author:YAL 第三部分:GUI内部函数设计 事件添加 给窗体或窗体按钮相关的操作添加事件有两种方式,事件的名字直白的表面了这是什么事件。 直接双击界面,自动生成窗…

SocketTools.NET 11.0.2148.1554 Crack

添加新功能以简化使用 URL 建立 TCP 连接的过程。 2023 年 8 月 23 日 - 12:35新版本 特征 添加了“HttpGetTextEx”函数&#xff0c;该函数在返回字符串缓冲区中的文本内容时提供附加选项。添加了对“FileTransfer”.NET 类和 ActiveX 控件中的“GetText”和“PutText”方法的…

python模拟登入某平台+破解验证码

概述 python模拟登录平台&#xff0c;遇见验证码识别&#xff01;用最简单的方法seleniumda破解验证码&#xff0c;来自动登录平台 详细 python用seleniumxpath模拟登录破解验证码 先随便找个小说平台用户登陆 - 书海小说网用户登陆 - 书海小说网用户登陆 - 书海小说网 准…

2023年8月22日OpenAI推出了革命性更新:ChatGPT-3.5 Turbo微调和API更新,为您的业务量身打造AI模型

&#x1f337;&#x1f341; 博主猫头虎 带您 Go to New World.✨&#x1f341; &#x1f984; 博客首页——猫头虎的博客&#x1f390; &#x1f433;《面试题大全专栏》 文章图文并茂&#x1f995;生动形象&#x1f996;简单易学&#xff01;欢迎大家来踩踩~&#x1f33a; &a…

【Spring Boot】详解条件注解以及条件拓展注解@Conditional与@ConditionalOnXxx

Spring Conditional Spring 4.0提供的注解。作用是给需要装载的Bean增加一个条件判断。只有满足条件才会装在到IoC容器中。而这个条件可以由自己去完成的&#xff0c;可以通过重写Condition接口重写matches()方法去实现自定义的逻辑。所以说这个注解增加了对Bean装载的灵活性。…

【肌电图信号分析】通道肌电图并查找收缩周期的数量、振幅、最大值和持续时间(Matlab代码实现)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…