实用性再提升!DURATION 数据类型现已支持交易日历!

DolphinDB 自 2.00.9/1.30.21 版本开始,提供交易日历功能,并内置世界五十多个交易所的交易日历。借助交易日历,用户可以在 DolphinDB 中便捷查询指定范围内的交易日,或搭配内置函数,基于交易日进行日期偏移计算、数据采样等操作。

最近,交易日历功能再次进行了更新。自 2.00.11.1 版本起,DURATION 数据类型已支持交易日历。

DURATION 数据类型介绍

在使用交易日历进行计算时,用户可以用"正负数字 + 4个大写字母"的形式表示交易所交易日历时间。以纽交所(XNYS)为例,假设 Ti 为基准日期,那么 3XNYS 代表第 Ti+3 个交易日,-3XNYS 代表第 Ti-3 个交易日。除了使交易日期的表达更加精准方便之外,使用 DURATION 数据类型还能避免包含自然日对研究分析的一些不利影响。

DURATION 数据类型支持交易日历之前,在不对日期进行任何处理的前提下,系统对数据进行处理时会包含连同休市日在内的所有自然日。现在,使用 DURATION 数据类型则可以自动去除休市日,在只需要考虑交易日的研究中简化数据处理过程,使计算结果准确。

例如,当计算纽交所 (XNYS) 某只股票每两个交易日的收盘价之和时,使用 DURATION 类型数据,即"2XNYS"进行运算的脚本如下:

复制代码
date = [2022.12.30, 2023.01.03, 2023.01.04, 2023.01.05, 2023.01.06]
close = [100.10, 78.89, 88.99, 88.67, 78.78]
X1 = indexedSeries(date, close)
msum(X1, window=2XNYS)

# output
           #0                 
           ------
2022.12.30|100.1
2023.01.03|178.99
2023.01.04|167.88000000000002
2023.01.05|177.66000000000003
2023.01.06|167.45000000000005

由于 2023.01.01 和 2023.01.02 是休市日,所以 2023.01.03 对应的收盘价之和应为 2022.12.30 和 2023.01.03 这两天的收盘价之和,即:100.10+78.89=178.99。我们可以发现,系统计算结果时自动去除了两个休市日的影响。

场景案例

用户能基于交易日历 duration 进行一系列的操作和计算,如窗口连接、滑动窗口计算、偏移计算等。

窗口连接

用户可使用 wj(leftTable, rightTable, window, aggs, matchingCols, [rightMatchingCols]) 函数对数据表做基于交易日历的窗口连接,并将交易日作为窗口区间单位。以下为以纽交所(XNYS)交易日作为窗口单位进行窗口连接的一个例子:

复制代码
t1 = table(2023.01.03 2023.01.06 as date)
date = [2022.12.30, 2023.01.03, 2023.01.04, 2023.01.05, 2023.01.06]
close = [100.10, 78.89, 88.99, 88.67, 78.78]
t2 = table(date, close)
wj(t1, t2, -2XNYS:0XNYS, <avg(close)>, `date);

# output
   | date       | avg_close         
---|------------|-------------------
 0 | 2023.01.03 | 89.495            
 1 | 2023.01.06 | 85.48 

滑动窗口计算

DolphinDB 提供了丰富的函数来支持滑动窗口计算,包括 m 系列/ tm 系列/twindow/tmovingWindowData。

其中,m 系列函数 可以对滑动窗口内数据进行聚合计算 。以 msum(X, window, [minPeriods]) 函数为例,计算纽交所 (XNYS) 某只股票每两个交易日(2XNYS)的收盘价之和的脚本如下:

复制代码
date = [2022.12.30, 2023.01.03, 2023.01.04, 2023.01.05, 2023.01.06]
close = [100.10, 78.89, 88.99, 88.67, 78.78]
X1 = indexedSeries(date, close)
msum(X1, window=2XNYS)

# output
           #0                 
           ------
2022.12.30|100.1
2023.01.03|178.99
2023.01.04|167.88
2023.01.05|177.66
2023.01.06|167.45

tm 系列函数 可以根据交易日历进行时序滑动窗口计算 。以 tmavg(T, X, window) 函数为例、计算纽交所 (XNYS) 某只股票每两个交易日(2XNYS)的平均收盘价的脚本如下:

复制代码
date = [2022.12.30, 2023.01.03, 2023.01.04, 2023.01.05, 2023.01.06]
close = [100.10, 78.89, 88.99, 88.67, 78.78]
t = table(date, close)
select tmavg(date, close, 2XNYS) from t

# output
   | tmavg_date         
---|------------
 0 | 100.1              
 1 | 89.495
 2 | 83.94
 3 | 88.83
 4 | 83.725

twindow(func, funcArgs, T, range, [prevailing=false])函数可以将函数/运算符应用到滑动窗口的数据当中。以纽交所 (XNYS) 某只股票为例,针对T中的每个日期Ti,计算区间 [Ti-1个交易日(-1XNYS),Ti+2个交易日(+2XNYS)]内平均收盘价的脚本如下:

复制代码
date = [2022.12.30, 2023.01.03, 2023.01.04, 2023.01.05, 2023.01.06]
close = [100.10, 78.89, 88.99, 88.67, 78.78]
t = table(date, close)
select twindow(avg, close, date, -1XNYS:2XNYS) from t

# output
   | twindow_avg       
---|-------------------
 0 | 89.32666666666667 
 1 | 89.1625 
 2 | 83.8325 
 3 | 85.48
 4 | 83.725

tmovingWindowData(T, X, window, [leftClosed = false])**函数可以基于交易日返回每个滑动窗口中包含的元素。**以纽交所 (XNYS) 某只股票为例,以2个交易日(2XNYS)为窗口长度,返回每个滑动窗口包含的元素的脚本如下:

复制代码
date = [2022.12.30, 2023.01.03, 2023.01.04, 2023.01.05, 2023.01.06]
close = [100.10, 78.89, 88.99, 88.67, 78.78]
tmovingWindowData(date, close, 2XNYS)

# output
[[100.1],[100.1, 78.89],[78.89, 88.99],[88.99, 88.67],[88.67, 78.78]]

偏移计算

用户可以根据交易日历,使用 move(X, steps)tmove(T, X, window) 函数对数据做偏移计算。

move(X, steps) 函数 可根据交易日历对数据进行移动操作。以纽交所(XNYS)为例,将2022.12.30至2023年1月6日中的交易日对应的收盘价格向后移动两个交易日脚本如下:

复制代码
date = [2022.12.30, 2023.01.03, 2023.01.04, 2023.01.05, 2023.01.06]
close = [100.10, 78.89, 88.99, 88.67, 78.78]
X1 = indexedSeries(date, close)
move(X1, 2XNYS)

# output
          #0                 
           ------
2022.12.30|
2023.01.03|
2023.01.04|100.1
2023.01.05|78.89
2023.01.06|88.99

tmove(T, X, window)函数可根据交易日历返回 T 中每个日期向前移动 window 个交易日所对应的 X 中的元素。以纽交所(XNYS)为例,返回将2022.12.30至2023年1月6日中的交易日向前移动两个交易日所对应的收盘价格的脚本如下:

复制代码
date = [2022.12.30, 2023.01.03, 2023.01.04, 2023.01.05, 2023.01.06]
close = [100.10, 78.89, 88.99, 88.67, 78.78]
t = table(date, close)
select *, tmove(date, close, 2XNYS) from t

# output
      | date       | close | tmove_date
------|------------|-------|-----------
 0    | 2022.12.30 | 100.1 |       
 1    | 2023.01.03 | 78.89 |       
 2    | 2023.01.04 | 88.99 | 100.1 
 3    | 2023.01.05 | 88.67 | 78.89 
 4    | 2023.01.06 | 78.78 | 88.99

本次更新后,DURATION 数据类型已支持交易日历,用户可以更加灵活地处理交易数据。我们将继续定期更新交易日历功能,为用户的投资研究提供更多便利。

相关推荐
gixnpm_77039 分钟前
C语言编译程序是什么软件 | 了解常用C语言编译工具及其功能
时序数据库
不光头强3 小时前
Spring框架的事务管理
数据库·spring·oracle
百***92025 小时前
【MySQL】MySQL库的操作
android·数据库·mysql
q***76665 小时前
Spring Boot 从 2.7.x 升级到 3.3注意事项
数据库·hive·spring boot
信仰_2739932435 小时前
Redis红锁
数据库·redis·缓存
人间打气筒(Ada)6 小时前
Centos7 搭建hadoop2.7.2、hbase伪分布式集群
数据库·分布式·hbase
心灵宝贝6 小时前
如何在 Mac 上安装 MySQL 8.0.20.dmg(从下载到使用全流程)
数据库·mysql·macos
奋斗的牛马7 小时前
OFDM理解
网络·数据库·单片机·嵌入式硬件·fpga开发·信息与通信
忧郁的橙子.7 小时前
一、Rabbit MQ 初级
服务器·网络·数据库
杰杰7988 小时前
SQL 实战:用户访问 → 下单 → 支付全流程转化率分析
数据库·sql