如果未做特别说明,文中的程序都是 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),其中 dy 是整数;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 返回的就是当前的估值日期,这一日期是可配置的。

例子 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 类的更多相关文章

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

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

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

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

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

    目录 QuantLib 金融计算--基本组件之 Schedule 类 Schedule 对象的构造 作为"容器"的 Schedule 对象 一些常用的成员函数 如果未做特别说明,文 ...

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

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

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

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

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

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

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

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

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

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

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

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

随机推荐

  1. ireport related

    http://blog.csdn.net/q326527970/article/details/7049047

  2. Go基本数据类型

    Go基本数据类型 第一部分:基本数据类型和操作符 1. 文件名&关键字&标识符 1. 所有go源码以.go结尾 2. 标识符以字母或下划线开头,大小写敏感,比如: a. boy  b. ...

  3. msys2 + clion安装所需的mingw64编译环境

    pacman -S mingw-w64-x86_64-toolchain 输出结果为: $ pacman -S mingw-w64-x86_64-toolchain:: 在组 mingw-w64-x8 ...

  4. Java程序设计17——多线程-Part-B

    5 改变线程优先级 每个线程执行都具有一定的优先级,优先级高的线程获得较多的执行机会,而优先级低的线程则获得较少的执行机会. 每个线程默认的优先级都与创建它的父线程具有相同的优先级,在默认情况下,ma ...

  5. centos7下载自定义仓库的镜像设置方法

    1.vim /usr/lib/systemd/system/docker.service Description=Docker Application Container Engine Documen ...

  6. Linux下javaweb环境搭建

    步骤: 1.使用远程工具连接上服务器,例如xsheel(ssh).filezilla(ftp) 2.JDK安装及相关配置 3.Mysql安装及相关配置 4.Tomcat安装及相关配置 5.项目部署及启 ...

  7. msfvenom木马生成+免杀+壳(实测并不能免杀)

    msfvenom 选项: -p, --payload 有效载荷使用.指定一个有效的自定义载荷 --payload-options 列出有效载荷的标准选项 -l, --list [type] 列出一个模 ...

  8. Duplicate Symbol链接错误的原因总结和解决方法[转]

    from:http://www.cocoachina.com/bbs/read.php?tid=177492 duplicate symbol是一种常见的链接错误,不像编译错误那样可以直接定位到问题的 ...

  9. MySQL数据库Query性能定位

    1.SQL前面加 EXPLAIN 定位到sql级别 各个属性的含义 id select查询的序列号 select_type select查询的类型,主要是区别普通查询和联合查询.子查询之类的复杂查询. ...

  10. Image 和byte[]之间的转换

    1.Image 转 byte[] public byte[] GetByteByImage(Image image) { byte[] bt = null; try { if (!image.Equa ...