我如何 window 在 kdb 中跨不同日期加入

How do I window join across different dates in kdb

我是 kdb 的初学者。当我在 NYSE 的测试数据上练习 window join 时,我遇到了 window join across different dates 的问题。

基本上,我的 table 看起来像:

t:([] sym:10#`AAPL;date:2021.03.21 2021.03.21 2021.03.21 2021.03.21 2021.03.21 2021.03.22 2021.03.22 2021.03.22 2021.03.22 2021.03.22;price:100 101 105 110 120 130 140 150 160 170;time:10:01 10:04 10:07 10:10 10:13 10:01 10:04 10:07 10:10 10:13)

我正在尝试在每个日期每 3 分钟创建一个滑动 window,并计算该 window 中的价格总和。但是,我不确定如何 window 加入不同的组。

我试过了:

w3:-3  0+\:t[`minute];
newdata: wj1[w3;`minute;t;(t;(sum;`price)

但这并没有给我正确的结果。有人可以帮忙解决这个问题吗?谢谢!

要跨日期执行 wj,您需要一个可以根据日期和时间创建的时间戳列:

t:update timeStamp:"P"$"D" sv/: flip string (date;time) from t
t
sym  date       price time  timeStamp
---------------------------------------------------------
AAPL 2021.03.21 100   10:01 2021.03.21D10:01:00.000000000
AAPL 2021.03.21 101   10:04 2021.03.21D10:04:00.000000000
AAPL 2021.03.21 105   10:07 2021.03.21D10:07:00.000000000
AAPL 2021.03.21 110   10:10 2021.03.21D10:10:00.000000000
AAPL 2021.03.21 120   10:13 2021.03.21D10:13:00.000000000

然后您可以像这样使用时间戳列:

w3:-00:03 00:00 +\:t[`timeStamp]

wj1[w3;`timeStamp;t;(t;(sum;`price))]
sym  date       price time  timeStamp
---------------------------------------------------------
AAPL 2021.03.21 100   10:01 2021.03.21D10:01:00.000000000
AAPL 2021.03.21 201   10:04 2021.03.21D10:04:00.000000000
AAPL 2021.03.21 206   10:07 2021.03.21D10:07:00.000000000
AAPL 2021.03.21 215   10:10 2021.03.21D10:10:00.000000000
AAPL 2021.03.21 230   10:13 2021.03.21D10:13:00.000000000
AAPL 2021.03.22 130   10:01 2021.03.22D10:01:00.000000000
AAPL 2021.03.22 270   10:04 2021.03.22D10:04:00.000000000
AAPL 2021.03.22 290   10:07 2021.03.22D10:07:00.000000000
AAPL 2021.03.22 310   10:10 2021.03.22D10:10:00.000000000
AAPL 2021.03.22 330   10:13 2021.03.22D10:13:00.000000000

如果 table 中有超过 1 个符号,则应应用 parted 属性:

t:update `p#sym from `sym`timeStamp xasc t

然后在wj的第二个参数timeStamp前加上sym:

q)wj[w3;`sym`timeStamp;select sym, timeStamp from t;(t;(sum;`price))]
sym  timeStamp                     price
----------------------------------------
AAPL 2021.03.21D10:01:00.000000000 100
AAPL 2021.03.21D10:04:00.000000000 201
AAPL 2021.03.21D10:07:00.000000000 206
AAPL 2021.03.21D10:10:00.000000000 215
AAPL 2021.03.21D10:13:00.000000000 230
AAPL 2021.03.22D10:01:00.000000000 250
AAPL 2021.03.22D10:04:00.000000000 270
AAPL 2021.03.22D10:07:00.000000000 290
AAPL 2021.03.22D10:10:00.000000000 310
AAPL 2021.03.22D10:13:00.000000000 330
MSFT 2021.03.21D10:01:00.000000000 468
MSFT 2021.03.21D10:04:00.000000000 915
MSFT 2021.03.21D10:07:00.000000000 668
MSFT 2021.03.21D10:10:00.000000000 403
MSFT 2021.03.21D10:13:00.000000000 604
MSFT 2021.03.22D10:01:00.000000000 775
MSFT 2021.03.22D10:04:00.000000000 697
MSFT 2021.03.22D10:07:00.000000000 829
MSFT 2021.03.22D10:10:00.000000000 799
MSFT 2021.03.22D10:13:00.000000000 382