QuantLib 金融计算——收益率曲线之构建曲线(1)
目录
- QuantLib 金融计算——收益率曲线之构建曲线(1)
YieldTermStructure
DiscountCurve
DiscountCurve
对象的构造
ZeroCurve
ZeroCurve
对象的构造
如果未做特别说明,文中的程序都是 Python3 代码。
QuantLib 金融计算——收益率曲线之构建曲线(1)
理论和实践上有多种方法可以构建与市场一致的收益率曲线,背后的方法论取决于市场上的可获得金融工具的流动性。在构建收益率曲线时有两个选项必须选定好:插值方法和所选的金融工具或数据。
quantlib-python 允许构建下列两大类收益率曲线:
- 第一类,根据数值和对应日期构建:
DiscountCurve
,根据贴现因子构建- 若干
*ZeroCurve
型的收益率曲线,根据债券零息收益率构建(前缀表示具体的构建方法) ForwardCurve
,根据远期收益率构建
- 第二类,根据若干固定收益类对象(如
FixedRateBond
)构建:FittedBondDiscountCurve
,根据若干债券的价格构建- 若干
Piecewise**
型的收益率曲线,根据若干不同类型金融工具(存款收益率、收益率远期合约和互换等等)的报价分段构建(后缀表示具体的构建方法和曲线类型)
本文介绍第一种。
载入 QuantLib:
import QuantLib as qlprint(ql.__version__)
1.12
YieldTermStructure
事实上,所有上述类都派生自基类 YieldTermStructure
,该基类实现了一些常用的功能。例如,实现了返回基准日期、天数计算规则、日历的函数,以及返回收益率的最小或最大日期的函数。
YieldTermStructure
常用的成员函数:
discount(d, extrapolate = False)
:浮点数,d
是Date
对象,extrapolate
是布尔型。返回贴现因子大小。zeroRate(d, resultDayCounter, comp, freq = Annual, extrapolate = False)
:InterestRate
,d
是Date
对象,resultDayCounter
是DayCounter
对象,comp
和freq
是预置整数,extrapolate
是布尔型。返回等价的零息收益率对象。forwardRate(d1, d2, dc, comp, freq = Annual, extrapolate = false)
:InterestRate
,d1
和d2
是Date
对象,resultDayCounter
是DayCounter
对象,comp
和freq
是 quantlib-python 预置整数(表示付息方式和频率),extrapolate
是布尔型。返回d1
和d2
之间的远期收益率对象。
DiscountCurve
首先介绍 DiscountCurve
。这种构造方法适用于给定的一组贴现因子,并为其分配给相应的期限。
DiscountCurve
对象的构造
构造函数具有以下实现
DiscountCurve(dates,dfs,dayCounter,cal)
这些变量的类型和解释如下:
dates
:日期序列,贴现因子对应的到期日。注意:第一个日期必须是贴现曲线的基准日期,例如贴现因子是 1.0 的日期。dfs
:浮点数序列,贴现因子dayCounter
:DayCounter
对象,天数计算规则cal
:Calendar
对象,日历表
DiscountCurve
常用的成员函数均继承自基类 YieldTermStructure
。
在下面的例子中,根据历史上某天路透社公布的贴现因子报价构建收益率曲线。在收益率曲线构建之后,求给定日期的等价零息收益率、贴现因子和远期收益率。
EUR | Yield | Discount |
---|---|---|
TN | 0.3148 | 0.9999656 |
1w | 0.3083 | 0.9999072 |
1M | 0.4225 | 0.9996074 |
2M | 0.5443 | 0.9990040 |
3M | 0.7242 | 0.9981237 |
6M | 0.9614 | 0.9951358 |
9M | 0.9372 | 0.9929456 |
1Y | 1.0006 | 0.9899849 |
1Y3M | 1.1120 | 0.9861596 |
1Y6M | 1.2457 | 0.9815178 |
1Y9M | 1.4358 | 0.9752363 |
2Y | 1.6263 | 0.9680804 |
例子 1:
def testingYields1():dates = []dfs = []cal = ql.UnitedStates()today = ql.Date(11, ql.September, 2009)libor = ql.EURLibor1M()dc = libor.dayCounter()settlementDays = 2settlement = cal.advance(today, settlementDays, ql.Days)dates.append(settlement)dates.append(settlement + ql.Period(1, ql.Days))dates.append(settlement + ql.Period(1, ql.Weeks))dates.append(settlement + ql.Period(1, ql.Months))dates.append(settlement + ql.Period(2, ql.Months))dates.append(settlement + ql.Period(3, ql.Months))dates.append(settlement + ql.Period(6, ql.Months))dates.append(settlement + ql.Period(9, ql.Months))dates.append(settlement + ql.Period(1, ql.Years))dates.append(settlement + ql.Period(1, ql.Years) + ql.Period(3, ql.Months))dates.append(settlement + ql.Period(1, ql.Years) + ql.Period(6, ql.Months))dates.append(settlement + ql.Period(1, ql.Years) + ql.Period(9, ql.Months))dates.append(settlement + ql.Period(2, ql.Years))dfs.append(1.0)dfs.append(0.9999656)dfs.append(0.9999072)dfs.append(0.9996074)dfs.append(0.9990040)dfs.append(0.9981237)dfs.append(0.9951358)dfs.append(0.9929456)dfs.append(0.9899849)dfs.append(0.9861596)dfs.append(0.9815178)dfs.append(0.9752363)dfs.append(0.9680804)tmpDate1 = settlement + ql.Period(1, ql.Years) + ql.Period(3, ql.Months)tmpDate2 = tmpDate1 + ql.Period(3, ql.Months)curve = ql.DiscountCurve(dates, dfs, dc, cal)equ_zero = curve.zeroRate(tmpDate1, dc, ql.Simple, ql.Annual)print("等价 Zero Rate:",equ_zero)print("等价 Zero Rate 计算的贴现因子:",equ_zero.discountFactor(settlement, tmpDate1))print("真实 Discount Factor:",curve.discount(tmpDate1))print("1Y3M-1Y6M 间的远期收益率 Fwd Rate:",curve.forwardRate(tmpDate1, tmpDate2, dc, ql.Continuous))testingYields1()
输出如下所示:
等价零息收益率: 1.107998 % Actual/360 simple compounding
等价零息收益率计算的贴现因子: 0.9861595999999999
真实贴现因子: 0.9861596
1Y3M-1Y6M 间的远期收益率: 1.887223 % Actual/360 continuous compounding
ZeroCurve
下面介绍 ZeroCurve
。这种构造方法适用于给定的一组零息收益率,并为其分配给相应的期限。
ZeroCurve
对象的构造
构造函数具有以下实现
ZeroCurve(dates,yields,dayCounter,cal,i,comp,freq)
这些变量的类型和解释如下:
dates
:日期序列,零息收益率对应的到期日。注意:第一个日期必须是曲线的基准日期,例如收益率是 0.0 的日期。yields
:浮点数序列,零息收益率dayCounter
:DayCounter
对象,天数计算规则cal
:Calendar
对象,日历表i
:Linear
对象,线性插值方法comp
和freq
是预置整数,表示付息方式和频率
ZeroCurve
常用的成员函数均继承自基类 YieldTermStructure
。
在下面的例子中,根据 2018 年 7 月 23 日货币网公布的即期国债收盘收益率数据构建曲线。在收益率曲线构建之后,求给定日期的等价零息收益率、贴现因子和远期收益率。
期限 | 即期收益率 |
---|---|
1 | 3.0544 |
2 | 3.1565 |
3 | 3.2531 |
4 | 3.2744 |
5 | 3.2964 |
6 | 3.4092 |
7 | 3.5237 |
8 | 3.5264 |
9 | 3.5298 |
10 | 3.5337 |
15 | 3.8517 |
20 | 3.8884 |
30 | 4.0943 |
例子 2:
def testingYields2():dates = []dfs = []cal = ql.China(ql.China.IB)today = ql.Date(23, ql.July, 2018)dc = ql.ActualActual(ql.ActualActual.ISMA)settlementDays = 0settlement = cal.advance(today, settlementDays, ql.Days)dates.append(settlement)dates.append(settlement + ql.Period(1, ql.Years))dates.append(settlement + ql.Period(2, ql.Years))dates.append(settlement + ql.Period(3, ql.Years))dates.append(settlement + ql.Period(4, ql.Years))dates.append(settlement + ql.Period(5, ql.Years))dates.append(settlement + ql.Period(6, ql.Years))dates.append(settlement + ql.Period(7, ql.Years))dates.append(settlement + ql.Period(8, ql.Years))dates.append(settlement + ql.Period(9, ql.Years))dates.append(settlement + ql.Period(10, ql.Years))dates.append(settlement + ql.Period(15, ql.Years))dates.append(settlement + ql.Period(20, ql.Years))dates.append(settlement + ql.Period(30, ql.Years))dfs.append(0.0000 / 100.0)dfs.append(3.0544 / 100.0)dfs.append(3.1565 / 100.0)dfs.append(3.2531 / 100.0)dfs.append(3.2744 / 100.0)dfs.append(3.2964 / 100.0)dfs.append(3.4092 / 100.0)dfs.append(3.5237 / 100.0)dfs.append(3.5264 / 100.0)dfs.append(3.5298 / 100.0)dfs.append(3.5337 / 100.0)dfs.append(3.8517 / 100.0)dfs.append(3.8884 / 100.0)dfs.append(4.0943 / 100.0)tmpDate1 = settlement + ql.Period(7, ql.Years)tmpDate2 = settlement + ql.Period(8, ql.Years)curve = ql.ZeroCurve(dates, dfs, dc, cal, ql.Linear(), ql.Compounded, ql.Annual)print("零息收益率:",curve.zeroRate(tmpDate2, dc, ql.Compounded, ql.Annual))print("贴现因子:",curve.discount(tmpDate2))print("7Y - 8Y 远期收益率:",curve.forwardRate(tmpDate1, tmpDate2, dc, ql.Compounded, ql.Annual))
输出如下所示:
零息收益率: 3.526400 % Actual/Actual (ISMA) Annual compounding
贴现因子: 0.7578636936087101
7Y - 8Y 远期收益率: 3.545302 % Actual/Actual (ISMA) Annual compounding
转载于:https://www.cnblogs.com/xuruilong100/p/9521018.html
QuantLib 金融计算——收益率曲线之构建曲线(1)相关推荐
- QuantLib 金融计算——收益率曲线之构建曲线(3)
目录 QuantLib 金融计算--收益率曲线之构建曲线(3) 概述 估算期限结构的步骤 读取样本券数据 一些基本配置 配置 *Helper 对象 配置期限结构 估算期限结构 汇总结果 当前实现存在的 ...
- QuantLib 金融计算——收益率曲线之构建曲线(2)
目录 QuantLib 金融计算--收益率曲线之构建曲线(2) YieldTermStructure 问题描述 Piecewise** 分段收益率曲线的原理 Piecewise** 对象的构造 Fit ...
- QuantLib 金融计算库
一.简介 QuantLib 是一个免费的.开源的, 金融计算的C++库,旨在为量化金融计算提供一个统一的.综合的软件框架. QuantLib 的源代码由 C++ 编写,得力于 C++ 在面向对象和泛型 ...
- QuantLib 金融计算——随机过程之概述
目录 QuantLib 金融计算--随机过程之概述 框架 用法与接口 如果未做特别说明,文中的程序都是 Python3 代码. QuantLib 金融计算--随机过程之概述 载入模块 import Q ...
- QuantLib 金融计算——基本组件之天数计算规则详解
目录 天数计算规则详解 定义 30 / 360 法 30/360 US 30/360 Bond Basis 30E/360 30E/360 ISDA Actual 法 Actual/Actual IC ...
- 【小白的CFD之旅】20 计算区域的构建
计算域是什么 计算域如何创建 常用的建模软件 计算域几何的特殊之处 具体的计算域提取方法 小白总结 自从上次在食堂听了小牛师兄关于计算网格的一些问题后,小白决定在寒假期间好好的补习一下关于计算网格的划 ...
- NLP实践|CCKS2020金融知识图谱自动化构建技术方法总结
每天给你送来NLP技术干货! 编辑:AI算法小喵 写在前面 文本是参加2020CCKS评测 基于本体的金融知识图谱自动化构建技术 之后的一篇总结博客,笔者查阅了大量文献,并做了大量采用深度学习模型的实 ...
- 金融计算与编程 基于matlab,金融计算与编程.pdf
金融市场与风险管理系列教材 金融计算与编程 ---基于 MATLAB 的应用 曹志广 著 上海财经大学出版社 ( ) 图书在版编目 CIP数据 : / : 金融计算与编程 基于 的应用 曹志广著 上海 ...
- portstats matlab,MATLAB金融计算试题
<MATLAB金融计算试题>由会员分享,可在线阅读,更多相关<MATLAB金融计算试题(19页珍藏版)>请在人人文库网上搜索. 1.精品文档MATLAB金融计算试题(2014级 ...
最新文章
- 管理数据,应用程序和主机安全-B
- 20165301 预备作业三:Linux安装及命令入门
- hadoop关闭安全模式
- 【iOS】【项目全局动态埋点】Runtime+Aspects(hook)
- Ubuntu安装教程【超多图】
- 使用Maven配置JBoss / Wildfly数据源
- python中面向对象的特殊成员_Python面向对象特殊成员
- webservice 安全性 对外_WebService安全性的几种实现方法【身份识别】
- python中定义类的关键字_在Python中,定义一个类使用什么关键字?
- 上下求索——基于双向推理的多跳知识库问答技术
- 2021-09-09 Hadoop Hive Spark概览
- ANSI SQL 定义
- 喜讯 | 大势智慧获得全球软件领域最高权威CMMI5认证
- 单片机入门——流水灯介绍
- NLP自然语言处理-文本摘要简述
- state=08S01,code=0
- 图片上传之webuploader和qiniuUploader
- 训练自己的yolov5样本, 并部署到rv1126 <三>
- Sql Server插入随机数
- Web前端期末大作业--响应式网络科技公司网页设计(IT网络主题-HTML+CSS+JavaScript)实现
热门文章
- VS2019 MFC ODBC 操作SQL SERVER 数据库
- 如何合并视频?教你把多个视频合并成一个视频
- ABAP:多页签的选择屏幕
- 第三章习题3第4题--for循环输出俄文字母表
- 【分布式版本控制系统Git】| Git 分支操作、Git 团队协作机制、GitHub 操作
- [BBS 水木清华站]给Linux新手
- H.264编码技术(zz)
- MySQL每秒50w+的写入,如何实现?
- 计算机专业370,2018复旦计算机专硕初试370+经验贴(更新部分内容)
- 在linux服务器下配置代理服务器( 使用liunx服务器的ip用来代理 )