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

2018 年 10 月 22 日 R语言中文社区


作者:徐瑞龙,量化分析师,R语言中文社区专栏作者

博客专栏:

https://www.cnblogs.com/xuruilong100


QuantLib 将金融领域的日期对象抽象为 Date 类,并提供了丰富的计算函数。需要注意的是,quantlib-python 中的 Date 类并不同于 python 自身包含的 datetime 类,也没有继承关系。

载入 QuantLib:

import QuantLib as ql print(ql.__version__)


1.10


Date 对象的构造

Date 对象的构造方式有两种,分别是

  • Date(serialNumber),其中 serialNumber 是一个整数,例如 24214,并且 1 对应 1899-12-31。这种用法和 Excel 中一样。(需要注意的是,在较新版本的 quantlib-python 中,serialNumber 的取值范围被限定在 367~109574,相应的日期范围是 1901-01-01 ~ 2199-12-31。)

  • Date(d, m, y),其中 d 和 y 是整数;m 是 quantlib-python 中预留的特殊对象,专门用来表示月份:

    • 一月:January(等于 1)

    • ...

    • 十二月:December(等于 12)

Date 对象可以和整数做运算,用来向前或向后移动特定天数;Date 对象也可以和 Period 对象做运算,用来向前或向后移动特定的时间间隔。

Period 对象的构造:

  • Period(n, units),其中 n 是时间间隔的个数;units 的取值范围是 quantlib-python 预留的四个特殊对象:DaysWeeksMonthsYears

例子 1:

def DateTesting1():    myDate = ql.Date(12, ql.August, 2009)    print(myDate)    myDate = myDate + 1    print(myDate)    myDate = myDate + ql.Period(12, ql.Days)    print(myDate)    myDate = myDate - ql.Period(2, ql.Months)    print(myDate)    myDate = myDate - 1    print(myDate)    myDate = myDate + ql.Period(10, ql.Weeks)    print(myDate)


August 12th, 2009 August 13th, 2009 August 25th, 2009 June 25th, 2009 June 24th, 2009 September 2nd, 2009


一些常用的成员函数

Date 类常用的成员函数有:

  • weekday():整数,返回星期对应的数字:

    • 星期日:1

    • ...

    • 星期六:7

  • dayOfMonth():整数,返回日期是所在月份的第几天

  • dayOfYear():整数,返回日期是所在年份的第几天

  • month():整数,返回日期对应的月份

  • year():整数,返回日期对应的年份

  • serialNumber()整数,返回日期对应的天数(从 1899-12-31 开始)

例子 2:

def DateTesting2():    myDate = ql.Date(12, ql.August, 2017)    print('Original Date :', myDate)    print('Weekday :', myDate.weekday())    print('Day of Month :', myDate.dayOfMonth())    print('Day of Year :', myDate.dayOfYear())    print('Month :', myDate.month())    print('Year :', myDate.year())    serialNum = myDate.serialNumber()    print('Serial Number :', serialNum)


Original Date : August 12th, 2017 Weekday : 7 Day of Month : 12 Day of Year : 224 Month : 8 Year : 2017 Serial Number : 42959


一些常用的静态函数

Date 类也提供了一些有用的静态函数,例如用来判断是否闰年或者是否是月末。一些常用的静态函数如下:

  • Date.todaysDate()Date 对象,返回系统当前的日期

  • Date.minDate()Date 对象,返回 QuantLib 可表示的最小日期

  • Date.maxDate()Date 对象,返回 QuantLib 可表示的最大日期

  • Date.isLeap(y):布尔值,判断 y 是否闰年

  • Date.endOfMonth(d)Date 对象,返回日期 d 所在月份月末对应的日期

  • Date.isEndOfMonth(d):布尔值,判断 d 是否月末

  • Date.nextWeekday(d, w)Date 对象,返回日期 d 之后首个星期 w 对应的日期(例如 2018-03-12 之后第一个星期五)

  • Date.nthWeekday(n, w, m, y)Date 对象,返回所给月份 m 和年份 y 中的第 n 个星期 w 对应的日期(例如 2010 年七月的第三个星期三)

例子 3:

def DateTesting3():    print('Today :', ql.Date.todaysDate())    print('Min Date :', ql.Date.minDate())    print('Max Date :', ql.Date.maxDate())    print('Is Leap :', ql.Date.isLeap(2011))    print('End of Month :',          ql.Date.endOfMonth(ql.Date(4, ql.August, 2009)))    print('Is Month End :',          ql.Date.isEndOfMonth(ql.Date(29, ql.September, 2009)))    print('Is Month End :',          ql.Date.isEndOfMonth(ql.Date(30, ql.September, 2009)))    print('Next WD :',          ql.Date.nextWeekday(ql.Date(1, ql.September, 2009), ql.Friday))    print('n-th WD :',          ql.Date.nthWeekday(3, ql.Wednesday, ql.September, 2009))


Today : March 30th, 2018 Min Date : January 1st, 1901 Max Date : December 31st, 2199 Is Leap : False End of Month : August 31st, 2009 Is Month End : False Is Month End : True Next WD : September 4th, 2009 n-th WD : September 16th, 2009


为估值计算配置日期

有时候为了给金融产品定价,需要将估值计算发生的日期配置成特定日期。该金融产品可能依赖于其他产品,其他产品又在新的日期做定价。为了方便日期配置,QuantLib 提供了一个全局变量用来配置估值日期。Settings.instance().evaluationDate 返回的就是当前的估值日期,这一日期是可配置的。

def DateTesting4():    d = ql.Settings.instance().evaluationDate    print('Eval Date :', d)    ql.Settings.instance().evaluationDate = ql.Date(5, ql.January, 1995)    d = ql.Settings.instance().evaluationDate    print('New Eval Date :', d)


Eval Date : March 30th, 2018 New Eval Date : January 5th, 1995


往期回顾

时间序列分析工具箱——timetk

时间序列分析工具箱——tidyquant

时间序列分析工具箱——sweep

时间序列分析工具箱——tibbletime

基于 Keras 用深度学习预测时间序列

基于 Keras 用 LSTM 网络做时间序列预测

时间序列深度学习:状态 LSTM 模型预测太阳黑子(一)

时间序列深度学习:状态 LSTM 模型预测太阳黑子(二)

时间序列深度学习:seq2seq 模型预测太阳黑子

R中的设计模式

理解 LSTM 及其图示

时间序列分析工具箱—— h2o + timetk

QuantLib 金融计算——QauntLib 入门

公众号后台回复关键字即可学习

回复 爬虫            爬虫三大案例实战  
回复 
Python       1小时破冰入门

回复 数据挖掘     R语言入门及数据挖掘
回复 
人工智能     三个月入门人工智能
回复 数据分析师  数据分析师成长之路 
回复 机器学习      机器学习的商业应用
回复 数据科学      数据科学实战
回复 常用算法      常用数据挖掘算法

登录查看更多
0

相关内容

DATE:Design, Automation & Test in Europe。 Explanation:欧洲的设计、自动化和测试。 Publisher:IEEE/ACM。 SIT: http://dblp.uni-trier.de/db/conf/date/
商业数据分析,39页ppt
专知会员服务
160+阅读 · 2020年6月2日
【实用书】Python技术手册,第三版767页pdf
专知会员服务
234+阅读 · 2020年5月21日
Python导论,476页pdf,现代Python计算
专知会员服务
259+阅读 · 2020年5月17日
【干货书】数值计算C编程,319页pdf,Numerical C
专知会员服务
67+阅读 · 2020年4月7日
Python数据分析:过去、现在和未来,52页ppt
专知会员服务
99+阅读 · 2020年3月9日
【干货】大数据入门指南:Hadoop、Hive、Spark、 Storm等
专知会员服务
95+阅读 · 2019年12月4日
基于 Keras 用深度学习预测时间序列
R语言中文社区
23+阅读 · 2018年7月27日
误差反向传播——CNN
统计学习与视觉计算组
30+阅读 · 2018年7月12日
实战 | 用Python做图像处理(三)
七月在线实验室
15+阅读 · 2018年5月29日
【干货】卷积神经网络中的四种基本组件
优化哈希策略
ImportNew
5+阅读 · 2018年1月17日
【强化学习】强化学习+深度学习=人工智能
产业智能官
52+阅读 · 2017年8月11日
深度学习实战(二)——基于Keras 的深度学习
乐享数据DataScientists
15+阅读 · 2017年7月13日
Meta-Learning with Implicit Gradients
Arxiv
13+阅读 · 2019年9月10日
The Matrix Calculus You Need For Deep Learning
Arxiv
12+阅读 · 2018年7月2日
Arxiv
8+阅读 · 2018年6月19日
Arxiv
6+阅读 · 2018年4月21日
Arxiv
7+阅读 · 2018年3月21日
Arxiv
27+阅读 · 2017年12月6日
VIP会员
相关VIP内容
商业数据分析,39页ppt
专知会员服务
160+阅读 · 2020年6月2日
【实用书】Python技术手册,第三版767页pdf
专知会员服务
234+阅读 · 2020年5月21日
Python导论,476页pdf,现代Python计算
专知会员服务
259+阅读 · 2020年5月17日
【干货书】数值计算C编程,319页pdf,Numerical C
专知会员服务
67+阅读 · 2020年4月7日
Python数据分析:过去、现在和未来,52页ppt
专知会员服务
99+阅读 · 2020年3月9日
【干货】大数据入门指南:Hadoop、Hive、Spark、 Storm等
专知会员服务
95+阅读 · 2019年12月4日
相关资讯
基于 Keras 用深度学习预测时间序列
R语言中文社区
23+阅读 · 2018年7月27日
误差反向传播——CNN
统计学习与视觉计算组
30+阅读 · 2018年7月12日
实战 | 用Python做图像处理(三)
七月在线实验室
15+阅读 · 2018年5月29日
【干货】卷积神经网络中的四种基本组件
优化哈希策略
ImportNew
5+阅读 · 2018年1月17日
【强化学习】强化学习+深度学习=人工智能
产业智能官
52+阅读 · 2017年8月11日
深度学习实战(二)——基于Keras 的深度学习
乐享数据DataScientists
15+阅读 · 2017年7月13日
相关论文
Meta-Learning with Implicit Gradients
Arxiv
13+阅读 · 2019年9月10日
The Matrix Calculus You Need For Deep Learning
Arxiv
12+阅读 · 2018年7月2日
Arxiv
8+阅读 · 2018年6月19日
Arxiv
6+阅读 · 2018年4月21日
Arxiv
7+阅读 · 2018年3月21日
Arxiv
27+阅读 · 2017年12月6日
Top
微信扫码咨询专知VIP会员