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

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 预留的四个特殊对象: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

原文地址:https://www.cnblogs.com/syq666/p/8706442.html

时间: 2024-10-09 21:57:22

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

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

如果未做特别说明,文中的程序都是 Python3 代码. QuantLib 金融计算--基本组件之 InterestRate 类 围绕收益率展开的若干计算(如计算贴现因子)是固定收益分析中最基础的部分.同时,由于固定收益产品在付息频率.计息方式.天数计算规则等细节方面的多样性,这一块的计算显得更加复杂繁琐.QuantLib 将与收益率有关的计算整合封装在 InterestRate 类,用户所作的只是按照规定配置特定的参数. 载入 QuantLib: import QuantLib as ql p

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

目录 QuantLib 金融计算--基本组件之 ExchangeRateManager 类 概述 Money 类中的汇率转换配置 ExchangeRateManager 函数 如果未做特别说明,文中的程序都是 python3 代码. QuantLib 金融计算--基本组件之 ExchangeRateManager 类 载入 QuantLib: import QuantLib as ql print(ql.__version__) 1.15 概述 QuantLib 中管理货币之间汇率信息的类是 E

QuantLib 金融计算

QuantLib 金融计算 QauntLib 入门 基本组件之 Date 类 基本组件之 Calendar 类 原文地址:https://www.cnblogs.com/xuruilong100/p/8711520.html

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

目录 QuantLib 金融计算--收益率曲线之构建曲线(1) YieldTermStructure DiscountCurve DiscountCurve 对象的构造 ZeroCurve ZeroCurve 对象的构造 如果未做特别说明,文中的程序都是 Python3 代码. QuantLib 金融计算--收益率曲线之构建曲线(1) 理论和实践上有多种方法可以构建与市场一致的收益率曲线,背后的方法论取决于市场上的可获得金融工具的流动性.在构建收益率曲线时有两个选项必须选定好:插值方法和所选的金

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

目录 QuantLib 金融计算--收益率曲线之构建曲线(2) YieldTermStructure 问题描述 Piecewise** 分段收益率曲线的原理 Piecewise** 对象的构造 FittedBondDiscountCurve FittedBondDiscountCurve 的原理 FittedBondDiscountCurve 的构造 FittingMethod 类 拟合曲线 如果未做特别说明,文中的程序都是 Python3 代码. QuantLib 金融计算--收益率曲线之构建

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

目录 QuantLib 金融计算--收益率曲线之构建曲线(4) 概述 三次样条函数与期限结构 knots 的选择 实现三次样条函数 实现拟合方法 测试 参考文献 如果未做特别说明,文中的程序都是 C++11 代码. QuantLib 金融计算--收益率曲线之构建曲线(4) 本文代码对应的 QuantLib 版本是 1.15.相关源代码可以在 QuantLibEx 找到. 概述 QuantLib 中提供了用三次 B 样条函数拟合期限结构的功能,但是,并未提供使用三次样条函数拟合期限结构的功能.本文

QuantLib 金融计算——自己动手封装 Python 接口(1)

目录 QuantLib 金融计算--自己动手封装 Python 接口(1) 概述 QuantLib 如何封装 Python 接口? 自己封装 Python 接口 封装 Array 和 Matrix 类 QuantLibEx 和官方包混合使用 附录:接口文件.setup.py 和 __init__.py QuantLib 金融计算--自己动手封装 Python 接口(1) 概述 QuantLib 已经开始在 PyPi 上发布封装好的 Python 接口,安装和使用非常方便,与普通的包别无二致.并且

QuantLib 金融计算——自己动手封装 Python 接口(2)

目录 QuantLib 金融计算--自己动手封装 Python 接口(2) 概述 如何封装一项复杂功能? 寻找最小功能集合的策略 实践 估计期限结构参数 修改官方接口文件 下一步的计划 QuantLib 金融计算--自己动手封装 Python 接口(2) 概述 对于一项简单功能,通常只需要包装少数几个类就可以,正如<自己动手封装 Python 接口(1)>演示的那样. 下面,将演示如何包装 QuantLib 中的复杂功能,最终实现从固息债交易数据中估计期限结构模型的参数. 如何封装一项复杂功能

QuantLib 金融计算——数学工具之求解器

目录 QuantLib 金融计算--数学工具之求解器 概述 调用方式 非 Newton 算法(不需要导数) Newton 算法(需要导数) 如果未做特别说明,文中的程序都是 Python3 代码. QuantLib 金融计算--数学工具之求解器 载入模块 import QuantLib as ql import scipy from scipy.stats import norm print(ql.__version__) 1.12 概述 QuantLib 提供了多种类型的一维求解器,用以求解单