如果未做特别说明,文中的程序都是 Python3 代码。

QuantLib 金融计算——基本组件之 Schedule 类

Schedule 类用于构造一个特定的日期列表,例如债券的付息日列表,是 QuantLib 中固定收益类产品分析最常用到的组件。

载入 QuantLib:

  1. import QuantLib as ql
  2. print(ql.__version__)
  1. 1.10

Schedule 对象的构造

Schedule 类对象的构造依赖于之前介绍的几个基本组件。

  1. Schedule(effectiveDate ,
  2. terminationDate ,
  3. tenor,
  4. calendar,
  5. convention,
  6. terminationDateConvention,
  7. rule,
  8. endOfMonth,
  9. firstDate = Date (),
  10. nextToLastDate = Date ())

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

  • effectiveDateterminationDate:日期,日历列表的起始、结束日期,例如债券的起息日和到期日。
  • tenorPeriod 对象,相邻两个日期的间隔,例如债券的付息频率(1 年或 6 个月)或利率互换的利息重置频率(3 个月)。
  • calendar:日历表,生成日期所遵循的特定日历表。
  • convention:整数,如何调整非工作日(除最后一个日期外),取值范围是 quantlib-python 的一些预留变量。
  • terminationDateConvention:整数,如果最后一个日期是非工作日,该如何调整,取值范围是 quantlib-python 的一些预留变量。
  • ruleDateGeneration 的成员,生成日期的规则。
  • endOfMonth:如果起始日期在月末,是否要求其他日期也要安排在月末(除最后一个日期外)。
  • firstDate, nextToLastDate(可选):日期,专门为生成方法 rule 提供的起始、结束日期(不常用)。

作为“容器”的 Schedule 对象

Schedule 对象的行为和 Python 中的 list 非常相似,作为一种存储 Date 对象的序列容器存在。因此下面两个函数是可用的:

  • len(sch):返回 Schedule 对象 sch 内日期的个数。
  • [i]:返回第 i 个日期。

作为序列容器,和 list 一样,Schedule 对象也是可迭代的。

假设想要获得 2017 年每月首个工作日的列表:

  • 起始、结束日期分别是 2017-01-01 和 2017-12-01。
  • 时间间隔是一个月。
  • 日历表遵循中国银行间市场的规定
  • 遇到非工作日就递延到下一工作日

例子 1:

  1. def testingSchedule1():
  2. effectiveDate = ql.Date(1, ql.January, 2017)
  3. terminationDate = ql.Date(1, ql.December, 2017)
  4. tenor = ql.Period(1, ql.Months)
  5. calendar = ql.China(ql.China.IB)
  6. convention = ql.Following
  7. terminationDateConvention = ql.Following
  8. rule = ql.DateGeneration.Forward
  9. endOfMonth = False
  10. mySched = ql.Schedule(
  11. effectiveDate,
  12. terminationDate,
  13. tenor,
  14. calendar,
  15. convention,
  16. terminationDateConvention,
  17. rule,
  18. endOfMonth)
  19. for i in range(len(mySched)):
  20. print(mySched[i])
  21. print('------')
  22. for i in mySched:
  23. print(i)
  1. January 3rd, 2017
  2. February 3rd, 2017
  3. March 1st, 2017
  4. April 1st, 2017
  5. May 2nd, 2017
  6. June 1st, 2017
  7. July 3rd, 2017
  8. August 1st, 2017
  9. September 1st, 2017
  10. October 9th, 2017
  11. November 1st, 2017
  12. December 1st, 2017
  13. ------
  14. January 3rd, 2017
  15. February 3rd, 2017
  16. March 1st, 2017
  17. April 1st, 2017
  18. May 2nd, 2017
  19. June 1st, 2017
  20. July 3rd, 2017
  21. August 1st, 2017
  22. September 1st, 2017
  23. October 9th, 2017
  24. November 1st, 2017
  25. December 1st, 2017

一些常用的成员函数

  • until(d):从日期列表中截取前半部分,并保证最后一个日期是 d
  • isRegular(i):判断第 i 个区间是否完整。这个概念需要解释以下:如果一个 Schedule 对象含有 n 个日期,那么这个对象就含有 n-1 个区间。如果第 i 个区间的长度和事先规定的时间间隔一致,那么这个区间就是完整的(Regular)。

例子 2:

  1. def testingSchedule2():
  2. effectiveDate = ql.Date(1, ql.January, 2017)
  3. terminationDate = ql.Date(1, ql.December, 2017)
  4. tenor = ql.Period(1, ql.Months)
  5. calendar = ql.China(ql.China.IB)
  6. convention = ql.Following
  7. terminationDateConvention = ql.Following
  8. rule = ql.DateGeneration.Forward
  9. endOfMonth = False
  10. mySched = ql.Schedule(
  11. effectiveDate,
  12. terminationDate,
  13. tenor,
  14. calendar,
  15. convention,
  16. terminationDateConvention,
  17. rule,
  18. endOfMonth)
  19. mySched = mySched.until(ql.Date(15, ql.June, 2017))
  20. for i in mySched:
  21. print(i)
  22. print('------')
  23. for i in range(len(mySched) - 1):
  24. print('{}-th internal is regular? {}'.format(
  25. i + 1, mySched.isRegular(i + 1)))
  1. January 3rd, 2017
  2. February 3rd, 2017
  3. March 1st, 2017
  4. April 1st, 2017
  5. May 2nd, 2017
  6. June 1st, 2017
  7. June 15th, 2017
  8. ------
  9. 1-th internal is regular? True
  10. 2-th internal is regular? True
  11. 3-th internal is regular? True
  12. 4-th internal is regular? True
  13. 5-th internal is regular? True
  14. 6-th internal is regular? False

最后一个区间的长度只有 15 天,所以是“不完整的”。

QuantLib 金融计算——基本组件之 Schedule 类的更多相关文章

  1. QuantLib 金融计算——基本组件之 Currency 类

    目录 QuantLib 金融计算--基本组件之 Currency 类 概述 构造函数 成员函数 如果未做特别说明,文中的程序都是 python3 代码. QuantLib 金融计算--基本组件之 Cu ...

  2. QuantLib 金融计算——基本组件之 Date 类

    目录 QuantLib 金融计算--基本组件之 Date 类 Date 对象的构造 一些常用的成员函数 一些常用的静态函数 为估值计算配置日期 如果未做特别说明,文中的程序都是 Python3 代码. ...

  3. QuantLib 金融计算——基本组件之 Calendar 类

    目录 QuantLib 金融计算--基本组件之 Calendar 类 Calendar 对象的构造 一些常用的成员函数 自定义假期列表 工作日修正 如果未做特别说明,文中的程序都是 Python3 代 ...

  4. QuantLib 金融计算——基本组件之 DayCounter 类

    目录 QuantLib 金融计算--基本组件之 DayCounter 类 DayCounter 对象的构造 一些常用的成员函数 如果未做特别说明,文中的程序都是 Python3 代码. QuantLi ...

  5. QuantLib 金融计算——基本组件之 DateGeneration 类

    目录 QuantLib 金融计算--基本组件之 DateGeneration 类 QuantLib 金融计算--基本组件之 DateGeneration 类 许多产品的估值依赖于对未来现金流的分析,因 ...

  6. QuantLib 金融计算——基本组件之 Index 类

    目录 QuantLib 金融计算--基本组件之 Index 类 QuantLib 金融计算--基本组件之 Index 类 Index 类用于表示已知的指数或者收益率,例如 Libor 或 Shibor ...

  7. QuantLib 金融计算——基本组件之 InterestRate 类

    目录 QuantLib 金融计算--基本组件之 InterestRate 类 InterestRate 对象的构造 一些常用的成员函数 如果未做特别说明,文中的程序都是 Python3 代码. Qua ...

  8. QuantLib 金融计算——基本组件之 ExchangeRateManager 类

    目录 QuantLib 金融计算--基本组件之 ExchangeRateManager 类 概述 Money 类中的汇率转换配置 ExchangeRateManager 函数 如果未做特别说明,文中的 ...

  9. QuantLib 金融计算——基本组件之 Money 类

    目录 QuantLib 金融计算--基本组件之 Money 类 概述 构造函数 成员函数 如果未做特别说明,文中的程序都是 python3 代码. QuantLib 金融计算--基本组件之 Money ...

随机推荐

  1. python设置格式模板

    # -*- coding: utf-8 -*- """ __mktime__ = '${DATE}' __author__ = '${USER}' __filename_ ...

  2. git忽略某个文件

    data/config/config.ini.php

  3. spring property标签中的 ref属性和ref 标签有什么不同? 如下:<property name="a" ref="b" />

    spring property标签中的 ref属性和ref 标签有什么不同? 如下:<property name="a" ref="b" /> sp ...

  4. 【美食技术】家庭自制DIY鸡蛋饼和疙瘩汤早餐视频教程

    鸡蛋饼制作方法 食材准备面粉 150g鸡蛋饼  鸡蛋饼鸡蛋 2个盐 适量水 适量(约300ml)油 20g荵花适量也可根据自己喜好准备一些调味料. 做法 鸡蛋饼是一种家常点心,做法很多,这里提供3种. ...

  5. JQuery和JS操作LocalStorage/SessionStorage的方法(转)

    出处:http://blog.csdn.net/djzhao627/article/details/50747628 首先说一下LocalStorage和SessionStorage LocalSto ...

  6. win2003 ent 64 + mssql ent 64

    1.打win2003补丁(取消IE8.0)2.msconfig->boot.int->高级中,将内核改成83.将cd1,cd2,高到Servers,Tools目录中,并保证Servers, ...

  7. UVa 10603 Fill (暴力BFS+优先队列)

    题意:给定4个数,a,b,c,d,分别代表空杯子容积为a,b,一个盛满水的杯子容积为c,让你不断倒水,找一个dd,是不是存在某个时刻, 某个杯子里的水dd,和d相同,或者无限接近.让求最少的倒水量和d ...

  8. jQuery 从 1.9 版开始,移除了 $.browser 和 $.browser.version

    jQuery 从 1.9 版开始,移除了 $.browser 和 $.browser.version , 取而代之的是 $.support . 在更新的 2.0 版本中,将不再支持 IE 6/7/8. ...

  9. ETL开发

    要进入开发阶段,了解不同的ETL产品. 整个ETL系统中,时间或更精确的,吞吐量是主要关心的内容.这种转换处理任务设计的主要目的归根结底是使得数据装载到展现表中最快并使得最终用户能快速的从这些表中得到 ...

  10. EAS_AOP分布式事务

    在System.Transactions事务体系中,为事务提供了7种不同的隔离级别.这7中隔离级别分别通过 System.Transactions.IsolationLevel的7个枚举项表示. pu ...