QuantLib 金融计算——基本组件之 Calendar 类
如果未做特别说明,文中的程序都是 Python3 代码。
QuantLib 金融计算——基本组件之 Calendar 类
针对相应国家编制一套日历表用来推算假期、工作日和周末,这对于金融实务来说是一件基础又非常重要的事。
载入 QuantLib:
import QuantLib as ql
print(ql.__version__)
1.10
Calendar
对象的构造
在 QuantLib 中可以很轻松的构造特定国家的日历表。例如,通过 myCal = UnitedKingdom()
构造英国的日历表,其他国家诸如美国、日本、加拿大等等也可以用类似的方式构造。在有些国家,不同的市场遵循不同的日历表,例如在中国,银行间市场和交易所市场遵循的日历表是不一样的(交易所市场在周六周日一定不开放,不管是否调休)。对于这一问题,可以通过配置特定参数将日历表细化到具体的市场上,例如中国银行间市场的日历表可以通过 myCal = China(China.IB)
构造。China.IB
和 China.SSE
是 quantlib-python 的预留特殊变量,分别表示中国的银行间市场和交易所市场。
一些常用的成员函数
下面是一些常用的成员函数:
isBusinessDay(d)
:布尔值,判断d
是不是工作日。isHoliday(d)
:布尔值,判断d
是不是假期。isWeekend(w)
:布尔值,判断w
是不是周末(在有些国家,周末没有安排在周六周日)。isEndOfMonth(d)
:布尔值,判断d
是不是月末最后一个工作日。endOfMonth(d)
:日期,返回d
所在月的最后一个工作日。
例子 1:
def CalendarTesting1():
chinaCal = ql.China(ql.China.IB)
saudiArabCal = ql.SaudiArabia()
nyEve = ql.Date(3, ql.April, 2017)
print('Is BD :', chinaCal.isBusinessDay(nyEve))
print('Is Holiday :', chinaCal.isHoliday(nyEve))
print('Is Weekend in SA :', saudiArabCal.isWeekend(ql.Friday))
print('Is Weekend in CN :', chinaCal.isWeekend(ql.Friday))
print('Is Last BD :',
chinaCal.isEndOfMonth(ql.Date(5, ql.April, 2018)))
print('Last BD :', chinaCal.endOfMonth(nyEve))
Is BD : False
Is Holiday : True
Is Weekend in SA : True
Is Weekend in CN : False
Is Last BD : False
Last BD : April 28th, 2017
注意,在沙特阿拉伯周五周六是“周末”,这和中国不一样。
自定义假期列表
QuantLib 对中国市场的支持比较有限,目前的版本假期列表仅仅维护到 2004-2017 年,要想正确推算其他年份的日历表,用户需要自行配置假期。QuantLib 中的 Calendar
对象可以方便的实现自定义假期,通常仅仅需要借助下列两个函数:
addHoliday(d)
:添加d
为假期。removeHoliday(d)
:从假期表中移除d
。
将 2018 年清明节放假调休的安排配置到 Calendar
对象中。
例子 2:
def CalendarTesting2():
chinaCal = ql.China(ql.China.IB)
d1 = ql.Date(5, ql.April, 2018)
d2 = ql.Date(6, ql.April, 2018)
d3 = ql.Date(8, ql.April, 2018)
print('Is Business Day : ', chinaCal.isBusinessDay(d1))
print('Is Business Day : ', chinaCal.isBusinessDay(d2))
print('Is Business Day : ', chinaCal.isBusinessDay(d3))
chinaCal.addHoliday(d1)
chinaCal.addHoliday(d2)
chinaCal.removeHoliday(d3)
print('Is Business Day : ', chinaCal.isBusinessDay(d1))
print('Is Business Day : ', chinaCal.isBusinessDay(d2))
print('Is Business Day : ', chinaCal.isBusinessDay(d3))
Is Business Day : True
Is Business Day : True
Is Business Day : False
Is Business Day : False
Is Business Day : False
Is Business Day : True
工作日修正
将某个日期修正为工作日是一项必要的工作,QuantLib 中支持如下工作日转换模式:
Following
:将日期修正为之后出现的第一个工作日。ModifiedFollowing
:将日期修正为之后出现的第一个工作日,除非这个工作日出现在次月;如果修正后的工作日出现在次月,就将日期修正为之前出现的最近一个工作日,保证原始日期和修正后的日期处在同一个月。Preceding
:将日期修正为之前出现的最近一个工作日。ModifiedPreceding
:将日期修正为之前出现的最近一个工作日,除非这个工作日出现在上一个月;如果修正后的工作日出现在上一个月,就将日期修正为之后出现的第一个工作日,保证原始日期和修正后的日期处在同一个月。Unadjusted
:不作调整。
Calendar
对象通过下列两个函数实现修正日期的功能:
adjust(d, convention)
:日期,按照转换模式convention
修正d
。advance(d, period, convention, endOfMonth)
:日期,将日期date
向后推移时间间隔period
后再按照转换模式convention
修正;参数endOfMonth
表示,如果d
是月末的话,推移修正后的日期也要是在月末。
最后,可以通过下面的函数计算两个日期间的工作日个数:
businessDaysBetween(from, to, includeFirst, includeLast)
:计算日期from
和to
之间的工作日个数(是否包括首尾日期)。
例子 3:
def CalendarTesting3():
chinaCal = ql.China(ql.China.IB)
firstDate = ql.Date(31, ql.January, 2018)
secondDate = ql.Date(1, ql.April, 2018)
print('Date 2 Adj :', chinaCal.adjust(secondDate, ql.Preceding))
print('Date 2 Adj :', chinaCal.adjust(secondDate, ql.ModifiedPreceding))
mat = ql.Period(2, ql.Months)
print('Date 1 Month Adv :',
chinaCal.advance(firstDate, mat, ql.Following, False))
print('Date 1 Month Adv :',
chinaCal.advance(firstDate, mat, ql.ModifiedFollowing, False))
print('Business Days Between :',
chinaCal.businessDaysBetween(
ql.Date(5, ql.March, 2018), ql.Date(30, ql.March, 2018),
True, True))
Date 2 Adj : March 30th, 2018
Date 2 Adj : April 2nd, 2018
Date 1 Month Adv : April 2nd, 2018
Date 1 Month Adv : March 30th, 2018
Business Days Between : 20
QuantLib 金融计算——基本组件之 Calendar 类的更多相关文章
- QuantLib 金融计算——基本组件之 Schedule 类
目录 QuantLib 金融计算--基本组件之 Schedule 类 Schedule 对象的构造 作为"容器"的 Schedule 对象 一些常用的成员函数 如果未做特别说明,文 ...
- QuantLib 金融计算——基本组件之 Index 类
目录 QuantLib 金融计算--基本组件之 Index 类 QuantLib 金融计算--基本组件之 Index 类 Index 类用于表示已知的指数或者收益率,例如 Libor 或 Shibor ...
- QuantLib 金融计算——基本组件之 Currency 类
目录 QuantLib 金融计算--基本组件之 Currency 类 概述 构造函数 成员函数 如果未做特别说明,文中的程序都是 python3 代码. QuantLib 金融计算--基本组件之 Cu ...
- QuantLib 金融计算——基本组件之 Date 类
目录 QuantLib 金融计算--基本组件之 Date 类 Date 对象的构造 一些常用的成员函数 一些常用的静态函数 为估值计算配置日期 如果未做特别说明,文中的程序都是 Python3 代码. ...
- QuantLib 金融计算——基本组件之 DayCounter 类
目录 QuantLib 金融计算--基本组件之 DayCounter 类 DayCounter 对象的构造 一些常用的成员函数 如果未做特别说明,文中的程序都是 Python3 代码. QuantLi ...
- QuantLib 金融计算——基本组件之 DateGeneration 类
目录 QuantLib 金融计算--基本组件之 DateGeneration 类 QuantLib 金融计算--基本组件之 DateGeneration 类 许多产品的估值依赖于对未来现金流的分析,因 ...
- QuantLib 金融计算——基本组件之 InterestRate 类
目录 QuantLib 金融计算--基本组件之 InterestRate 类 InterestRate 对象的构造 一些常用的成员函数 如果未做特别说明,文中的程序都是 Python3 代码. Qua ...
- QuantLib 金融计算——基本组件之 ExchangeRateManager 类
目录 QuantLib 金融计算--基本组件之 ExchangeRateManager 类 概述 Money 类中的汇率转换配置 ExchangeRateManager 函数 如果未做特别说明,文中的 ...
- QuantLib 金融计算——基本组件之 Money 类
目录 QuantLib 金融计算--基本组件之 Money 类 概述 构造函数 成员函数 如果未做特别说明,文中的程序都是 python3 代码. QuantLib 金融计算--基本组件之 Money ...
随机推荐
- 手工kill掉VNC进程的故障处理
1.模拟Kill掉已经启动的VNC服务 1)启动桌面1的服务 [root@testdb ~]# vncserver :1 New 'testdb:1 (root)' desktop is testdb ...
- ubuntu 基础环境
一.序言 这里记录了安装ubuntu 系统,以及里面常用的东西,jdk,idea,maven,svn,git 等等工具的安装,因为这些动作不是经常操作的,因此这里做一个记录,方便新手或者忘记的时候看看 ...
- nDPI深度数据包检测
nDPI https://github.com/ntop/nDPI
- Mybatis之是如何执行你的SQL的(SQL执行过程,参数解析过程,结果集封装过程)
Myabtis的SQL的执行是通过SqlSession.默认的实现类是DefalutSqlSession.通过源码可以发现,selectOne最终会调用selectList这个方法. @Overrid ...
- web端跨域调用webapi(转)
在做Web开发中,常常会遇到跨域的问题,到目前为止,已经有非常多的跨域解决方案. 通过自己的研究以及在网上看了一些大神的博客,写了一个Demo 首先新建一个webapi的程序,如下图所示: 由于微软已 ...
- Linux执行YUM命令报错解决方案
Loaded plugins: rhnplugin, security This system is not registered with RHN. RHN support will be disa ...
- excel定位函数
在Excel中MATCH函数可以返回指定内容所在的位置,而INDEX又可以根据指定位置查询到位置所对应的数据,各取其优点,我们可以返回指定位置相关联的数据. MATCH函数(返回指定内容所 ...
- Oracle EBS应用笔记整理 (转自IT++ flyingkite)
***************************************************** Author: Flyingkite Blog: http://space.itpub. ...
- s21day25 python笔记
s21day25 python笔记 正则表达式 1.定义 定义:正则表达式是一种规则匹配字符串的规则 re模块本身只是用来操作正则表达式的,和正则本身没关系 为什么要有正则表达式? 匹配字符串 一个人 ...
- nginx停止