目录

  • 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):浮点数,dDate 对象, extrapolate 是布尔型。返回贴现因子大小。
  • zeroRate(d, resultDayCounter, comp, freq = Annual, extrapolate = False)InterestRatedDate 对象,resultDayCounterDayCounter 对象,compfreq 是预置整数,extrapolate 是布尔型。返回等价的零息收益率对象。
  • forwardRate(d1, d2, dc, comp, freq = Annual, extrapolate = false)InterestRated1d2Date 对象,resultDayCounterDayCounter 对象,compfreq 是 quantlib-python 预置整数(表示付息方式和频率),extrapolate 是布尔型。返回 d1d2 之间的远期收益率对象。

DiscountCurve

首先介绍 DiscountCurve。这种构造方法适用于给定的一组贴现因子,并为其分配给相应的期限。

DiscountCurve 对象的构造

构造函数具有以下实现

DiscountCurve(dates,dfs,dayCounter,cal)

这些变量的类型和解释如下:

  • dates:日期序列,贴现因子对应的到期日。注意:第一个日期必须是贴现曲线的基准日期,例如贴现因子是 1.0 的日期。
  • dfs:浮点数序列,贴现因子
  • dayCounterDayCounter 对象,天数计算规则
  • calCalendar 对象,日历表

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:浮点数序列,零息收益率
  • dayCounterDayCounter 对象,天数计算规则
  • calCalendar 对象,日历表
  • iLinear 对象,线性插值方法
  • compfreq 是预置整数,表示付息方式和频率

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)相关推荐

  1. QuantLib 金融计算——收益率曲线之构建曲线(3)

    目录 QuantLib 金融计算--收益率曲线之构建曲线(3) 概述 估算期限结构的步骤 读取样本券数据 一些基本配置 配置 *Helper 对象 配置期限结构 估算期限结构 汇总结果 当前实现存在的 ...

  2. QuantLib 金融计算——收益率曲线之构建曲线(2)

    目录 QuantLib 金融计算--收益率曲线之构建曲线(2) YieldTermStructure 问题描述 Piecewise** 分段收益率曲线的原理 Piecewise** 对象的构造 Fit ...

  3. QuantLib 金融计算库

    一.简介 QuantLib 是一个免费的.开源的, 金融计算的C++库,旨在为量化金融计算提供一个统一的.综合的软件框架. QuantLib 的源代码由 C++ 编写,得力于 C++ 在面向对象和泛型 ...

  4. QuantLib 金融计算——随机过程之概述

    目录 QuantLib 金融计算--随机过程之概述 框架 用法与接口 如果未做特别说明,文中的程序都是 Python3 代码. QuantLib 金融计算--随机过程之概述 载入模块 import Q ...

  5. QuantLib 金融计算——基本组件之天数计算规则详解

    目录 天数计算规则详解 定义 30 / 360 法 30/360 US 30/360 Bond Basis 30E/360 30E/360 ISDA Actual 法 Actual/Actual IC ...

  6. 【小白的CFD之旅】20 计算区域的构建

    计算域是什么 计算域如何创建 常用的建模软件 计算域几何的特殊之处 具体的计算域提取方法 小白总结 自从上次在食堂听了小牛师兄关于计算网格的一些问题后,小白决定在寒假期间好好的补习一下关于计算网格的划 ...

  7. NLP实践|CCKS2020金融知识图谱自动化构建技术方法总结

    每天给你送来NLP技术干货! 编辑:AI算法小喵 写在前面 文本是参加2020CCKS评测 基于本体的金融知识图谱自动化构建技术 之后的一篇总结博客,笔者查阅了大量文献,并做了大量采用深度学习模型的实 ...

  8. 金融计算与编程 基于matlab,金融计算与编程.pdf

    金融市场与风险管理系列教材 金融计算与编程 ---基于 MATLAB 的应用 曹志广 著 上海财经大学出版社 ( ) 图书在版编目 CIP数据 : / : 金融计算与编程 基于 的应用 曹志广著 上海 ...

  9. portstats matlab,MATLAB金融计算试题

    <MATLAB金融计算试题>由会员分享,可在线阅读,更多相关<MATLAB金融计算试题(19页珍藏版)>请在人人文库网上搜索. 1.精品文档MATLAB金融计算试题(2014级 ...

最新文章

  1. 管理数据,应用程序和主机安全-B
  2. 20165301 预备作业三:Linux安装及命令入门
  3. hadoop关闭安全模式
  4. 【iOS】【项目全局动态埋点】Runtime+Aspects(hook)
  5. Ubuntu安装教程【超多图】
  6. 使用Maven配置JBoss / Wildfly数据源
  7. python中面向对象的特殊成员_Python面向对象特殊成员
  8. webservice 安全性 对外_WebService安全性的几种实现方法【身份识别】
  9. python中定义类的关键字_在Python中,定义一个类使用什么关键字?
  10. 上下求索——基于双向推理的多跳知识库问答技术
  11. 2021-09-09 Hadoop Hive Spark概览
  12. ANSI SQL 定义
  13. 喜讯 | 大势智慧获得全球软件领域最高权威CMMI5认证
  14. 单片机入门——流水灯介绍
  15. NLP自然语言处理-文本摘要简述
  16. state=08S01,code=0
  17. 图片上传之webuploader和qiniuUploader
  18. 训练自己的yolov5样本, 并部署到rv1126 <三>
  19. Sql Server插入随机数
  20. Web前端期末大作业--响应式网络科技公司网页设计(IT网络主题-HTML+CSS+JavaScript)实现

热门文章

  1. VS2019 MFC ODBC 操作SQL SERVER 数据库
  2. 如何合并视频?教你把多个视频合并成一个视频
  3. ABAP:多页签的选择屏幕
  4. 第三章习题3第4题--for循环输出俄文字母表
  5. 【分布式版本控制系统Git】| Git 分支操作、Git 团队协作机制、GitHub 操作
  6. [BBS 水木清华站]给Linux新手
  7. H.264编码技术(zz)
  8. MySQL每秒50w+的写入,如何实现?
  9. 计算机专业370,2018复旦计算机专硕初试370+经验贴(更新部分内容)
  10. 在linux服务器下配置代理服务器( 使用liunx服务器的ip用来代理 )