QuantLib 金融计算——基本组件之 Date 类
如果未做特别说明,文中的程序都是 Python3 代码。
QuantLib 金融计算——基本组件之 Date 类
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 预留的四个特殊对象:Days
、Weeks
、Months
、Years
。
例子 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
返回的就是当前的估值日期,这一日期是可配置的。
例子 4:
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
QuantLib 金融计算——基本组件之 Date 类的更多相关文章
- QuantLib 金融计算——基本组件之 Calendar 类
目录 QuantLib 金融计算--基本组件之 Calendar 类 Calendar 对象的构造 一些常用的成员函数 自定义假期列表 工作日修正 如果未做特别说明,文中的程序都是 Python3 代 ...
- QuantLib 金融计算——基本组件之 DayCounter 类
目录 QuantLib 金融计算--基本组件之 DayCounter 类 DayCounter 对象的构造 一些常用的成员函数 如果未做特别说明,文中的程序都是 Python3 代码. QuantLi ...
- QuantLib 金融计算——基本组件之 Schedule 类
目录 QuantLib 金融计算--基本组件之 Schedule 类 Schedule 对象的构造 作为"容器"的 Schedule 对象 一些常用的成员函数 如果未做特别说明,文 ...
- QuantLib 金融计算——基本组件之 InterestRate 类
目录 QuantLib 金融计算--基本组件之 InterestRate 类 InterestRate 对象的构造 一些常用的成员函数 如果未做特别说明,文中的程序都是 Python3 代码. Qua ...
- QuantLib 金融计算——基本组件之 ExchangeRateManager 类
目录 QuantLib 金融计算--基本组件之 ExchangeRateManager 类 概述 Money 类中的汇率转换配置 ExchangeRateManager 函数 如果未做特别说明,文中的 ...
- QuantLib 金融计算——基本组件之 Currency 类
目录 QuantLib 金融计算--基本组件之 Currency 类 概述 构造函数 成员函数 如果未做特别说明,文中的程序都是 python3 代码. QuantLib 金融计算--基本组件之 Cu ...
- QuantLib 金融计算——基本组件之 DateGeneration 类
目录 QuantLib 金融计算--基本组件之 DateGeneration 类 QuantLib 金融计算--基本组件之 DateGeneration 类 许多产品的估值依赖于对未来现金流的分析,因 ...
- QuantLib 金融计算——基本组件之 Index 类
目录 QuantLib 金融计算--基本组件之 Index 类 QuantLib 金融计算--基本组件之 Index 类 Index 类用于表示已知的指数或者收益率,例如 Libor 或 Shibor ...
- QuantLib 金融计算——基本组件之 Money 类
目录 QuantLib 金融计算--基本组件之 Money 类 概述 构造函数 成员函数 如果未做特别说明,文中的程序都是 python3 代码. QuantLib 金融计算--基本组件之 Money ...
随机推荐
- QByteArray to QString
QByteArray => QString void BarEngine::ByteArrayToString(QByteArray &ba, QString &str) { i ...
- mybatis框架入门程序:演示通过mybatis实现数据库的插入操作中实现返回结果的获取
1.mybatis实现数据库的插入操作可以查看https://www.cnblogs.com/wyhluckdog/p/10149895.html这篇博文,这里面的插入操作没有返回结果,所以这篇博文就 ...
- git 查询某人的提交记录
git log --author=liubo --name-only
- tips 移出 消失和 移入 显示
//规则tipsvar tip_index = 0;$(document).on('mouseenter', '.layui-badge-rim', function(){ tip_index=lay ...
- sqlserver2012 清除日志
1. backup log wwgl_demo to disk='D:\DATA_BACKUP\2017-07-19.log' 2. 右键数据库-->任务-->收缩-->文件 ...
- (博弈 sg入门2)
接下来介绍Nim游戏(同样引用杭电上的,懒的打字) 1.有两个玩家: 2. 有三堆扑克牌(比如:可以分别是 5,7,9张): 3. 游戏双方轮流操作: 4. 玩家的每次操作是选择其中某 ...
- BOM Open Interface. Import Bills and Routings 无法打开
问题: 最近要做一些关于BOM的接口问题,用自己装好的 VM Linux Oracle EBS R12 Vision详细研究下关于BOM的 Open Interface: BOM.Substitute ...
- Oracle EBS应用笔记整理 (转自IT++ flyingkite)
***************************************************** Author: Flyingkite Blog: http://space.itpub. ...
- org.springframework.dao.CannotAcquireLockException解决
java.sql.SQLException: Lock wait timeout exceeded 该异常为一个service中调用了另一个service,两个service对同一表进行操作,造成事务 ...
- sqlite批量处理数据性能优化
最近设计到sqlite数据库批量操作的,性能很是问题.于是一番研究(站在巨人肩膀)从网上整理出来相关性能优化方向.大体分三个级别,一般第一个阶段已足够. 1.sqlite每次插入数据(每调用一次sql ...