以下做法可以将已有的“DDB”交易所重新指定20200202008为交易所节假日,且不保留之前的holiday日期。通过temporalAdd查询202001的下一个交易日的脚本如下:
//将 2023.03.07 2023.03.08(周二, 周三) 重新设置为节假日
updateMarketHoliday("DDB",2023.03.07 2023.03.08)
//2023.01.03 2023.01.04(周二, 周三) 不再是节假日
getMarketCalendar("DDB",2023.01.01, 2023.01.10)
#output
[2023.01.02,2023.01.03,2023.01.04,2023.01.05,2023.01.06,2023.01.09,2023.01.10]
//2023.03.07, 2023.03.08(周二, 周三) 作为节假日,不会出现在交易日历中
getMarketCalendar("DDB",2023.03.01, 2023.03.10)
#output
[2023.03.01,2023.03.02,2023.03.03,2023.03.06,2023.03.09,2023.03.10]
新增交易日历后,可直接调用getMarketCalendar等函数对新的交易日历进行操作:
//将 2023.01.03 2023.01.04(周二, 周三) 设置为节假日
holiday = 2023.01.03 2023.01.04
//用户登录
login(`admin,`123456)
//添加交易日历
addMarketHoliday("DDB",holiday)
//获取指定日期区间的交易日历
getMarketCalendar("DDB",2023.01.01, 2023.01.10)
#output
[2023.01.02,2023.01.05,2023.01.06,2023.01.09,2023.01.10]
temporalAdd(2023.01.01,2,"DDB")
#output
2023.01.05
注意:该函数设置的节假日信息将覆盖旧的交易日历文件,不可单独对该文件更新或新增节假日信息。
交易日历的查询和应用
为方便中国大陆用户使用,DolphinDB也提供了中国大陆六大交易所的简称作为标识码。
1查询交易日历-getMarketCalendar
3基于交易日历取最近的交易日-transFreq
搭配getMarketCalendar函数查询指定范围内的交易日;搭配temporalAdd,transFreq,asFreq,resample等内置函数,基于交易日进行计算。
DolphinDB也支持管理员用户自定义交易日历,或者对现有交易日历修改和更新。管理员用户可通过DolphinDB内置函数更新交易日历:
4基于交易日的数据采样-asFreq/resample
自定义及更新内置交易日历
函数resample可以在采样的基础上,搭配聚合函数获取想要的交易日数据。以纽交所某支股票收盘价数据为例,查询每日收盘价的脚本如下:
timestampv = [2022.12.30T23:00:00.000,2023.01.01T00:00:00.000,2023.01.03T00:10:00.000,2023.01.03T00:20:00.000,2023.01.04T00:20:00.000,2023.01.04T00:30:00.000,2023.01.06T00:40:00.000]
close = [100.10, 100.10, 100.10, 78.89, 88.99, 88.67, 78.78]
s=indexedSeries(timestampv, close)
s.resample("XNYS", last)
#output
#0
------
2022.12.30|100.10
2023.01.03|78.89
2023.01.04|88.67
2023.01.05|
2023.01.06|78.78
2基于交易日历的日期偏移计算-temporalAdd
DolphinDB启动时会解析marketHolidayDir下所有的csv文件,启动后便可在resample,asfreq,transFreq,temporalAdd等函数内使用该交易所的编码。
交易日历出处
可使用函数getMarketCalendar获取对应交易所在startDate和endDate确定的时间范围内的的交易日历。以纽交所为例,获取2022年1月1日至2022年1月10日间的交易日历的脚本如下:
getMarketCalendar("XNYS",2022.01.01, 2022.01.10)
#output
[2022.01.03,2022.01.04,2022.01.05,2022.01.06,2022.01.07,2022.01.10]
假设需要更新已建好的“DDB”交易所的交易日历,可以使用函数updateMarketHoliday重新设置该文件的节假日信息,进而更新该交易所的交易日历。
如需对交易日历做时间偏移,可以使用temporalAdd函数,获取给定时间的偏移的交易日。以纽交所为例,获取2023年1月1日至2023年1月6日增加2个交易日的日期的脚本如下:
dates=[2023.01.01, 2023.01.02, 2023.01.03, 2023.01.04, 2023.01.05, 2023.01.06]
temporalAdd(dates,2,"XNYS")
#output
[2023.01.04,2023.01.04,2023.01.05,2023.01.06,2023.01.09,2023.01.10]
1新增交易日历
2替换交易日历
使用addMarketHoliday新建交易日历使用updateMarketHoliday更新交易日历
getMarketCalendar函数可以获取相应时间范围内的交易日。但是如若某天不是交易日,又想获得该日期前最近的一个交易日,可以使用transFreq函数。指定rule参数为对应交易所编码,可获取对应日期的最近的交易日。以纽交所为例,获取2023年1月1日至1月6日最近的交易日历的脚本如下:
dates=[2023.01.01, 2023.01.02, 2023.01.03, 2023.01.04, 2023.01.05, 2023.01.06]
dates.transFreq("XNYS")
#output
[2022.12.30,2022.12.30,2023.01.03,2023.01.04,2023.01.05,2023.01.06]
DolphinDB自30.21/00.9版本开始提供交易日历功能。内置的世界上五十多个交易所的节假日的csv文件存放于marketHolidayDir配置项对应的文件夹下,并以交易所的编码命名该文件,例如:“XNYS”。
DolphinDB在处理holiday文件时会自动过滤周末,因此在提交holiday文件时,不需要添加周末日期,只添加非周末的节假日信息即可。
1国际交易所ISOCODE列表
DolphinDB内置的交易日历可以支持多个场景的应用:
新增的交易所与模块的适用范围一样,目前都是只对当前节点有效。如果需要对其他节点生效,在其他节点进行同样的操作即可。
基于交易日的数据采样,可使用函数asFreq或者函数resample,两者的区别在于是否对数据做聚合操作,resample可以配合聚合函数使用,而asFreq函数是纯粹的取值。
函数[asFreq]会将数据按交易日展开,如果某一天的交易日数据有多个,只取第一个值。如若数据中没有交易日序列中的数据,会以NULL填充。以纽交所某支股票数据为例,获取2022年12月30日至2023年01月06日的交易日数据的脚本如下:
timestampv = [2022.12.30T23:00:00.000,2023.01.01T00:00:00.000,2023.01.03T00:10:00.000,2023.01.03T00:20:00.000,2023.01.04T00:20:00.000,2023.01.04T00:30:00.000,2023.01.06T00:40:00.000]
close = [100.10, 100.10, 100.10, 78.89, 88.99, 88.67, 78.78]
s=indexedSeries(timestampv, close)
s.asFreq("XNYS")
#output
#0
------
2022.12.30|100.10
2023.01.03|100.10
2023.01.04|88.99
2023.01.05|
2023.01.06|78.78
文章为作者独立观点,不代表股票交易接口观点