【问题标题】:KDB+/q: how to implement an xbar aggregation after an xgroup aggregation on kdb tableKDB+/q:如何在 kdb 表上进行 xgroup 聚合后实现 xbar 聚合
【发布时间】:2019-08-22 13:54:31
【问题描述】:

我正在尝试在 xgroup 聚合之后对交易数据运行 xbar 聚合,但我似乎无法正确:

我正在尝试采用以下格式的表格(由交易组成):

time                    side amount price  exchange
------------------------------------------------
2019.08.22T12:01:04.389 sell 54     9953.5 exchange1
2019.08.22T12:01:05.034 sell 205    9953.5 exchange1
2019.08.22T12:01:05.754 sell 150    9953.5 exchange1
2019.08.22T12:01:06.375 sell 516    9953.5 exchange1
2019.08.22T12:01:07.044 sell 100    9953.5 exchange1
2019.08.22T12:01:07.691 sell 1500   9953.5 exchange1
2019.08.22T12:01:08.393 sell 300    9953.5 exchange1
2019.08.22T12:01:09.005 sell 2254   9953.5 exchange2
2019.08.22T12:01:09.625 sell 500    9957.5 exchange2
2019.08.22T12:01:10.448 sell 5330   9953.5 exchange2
2019.08.22T12:01:11.065 sell 260    9953.5 exchange2
2019.08.22T12:01:11.701 sell 38     9953.5 exchange2
2019.08.22T12:01:12.404 sell 44     9953.5 exchange2
2019.08.22T12:01:12.974 sell 41     9953.5 exchange2

一方面,我想使用 xbar 将它们分组为 5 分钟的时间段,即

从交易中选择价格,按 5 xbar time.minute 计算金额

另一方面,我试图将它们并排分组并交换,即

exchangeside xgroup 交易

我正在寻找结合上述两种方法的最佳方法,以便我有 4 个按时间分组/窗口化/聚合的组,即

exchange1 sell time1 price1 amt1
               time2 price2 amt2
exchange1 buy  time1 ...
               time2 ...
exchange2 sell time1 ...
               time2 ...
exchange2 buy  time1 ...
               time2 ...

等等

如何简洁地实现这一目标? 谢谢

【问题讨论】:

  • 您能否提供一个其他人可以使用的示例表格,并举例说明您想要的结果
  • 当然对不起...漫长的夜晚

标签: time-series kdb


【解决方案1】:

如果您尝试使用分组聚合超过 15 分钟的存储桶,那么您可以在 by 子句中进行:

trades:([]exch:100?`P`Q;sym:100?`IBM`MSFT;side:100?`B`S;time:asc 0D10:20+0D00:01*100?100;price:100?100.;size:100?1000);

q)select avg price, sum size by exch,side,sym,15 xbar time.minute from trades
exch side sym  minute| price    size
---------------------| -------------
P    B    IBM  10:30 | 34.14991 369
P    B    IBM  10:45 | 46.46884 1204
P    B    IBM  11:15 | 30.9058  1106
P    B    IBM  11:30 | 22.88752 1196
P    B    IBM  11:45 | 12.47049 494
...

【讨论】:

  • 谢谢...非常直接的解决方案。
  • 好的,编辑我的答案以更具体地针对您编辑的问题
  • 在此基础上,您不能在 Q-SQL 查询的 select 规范中使用点表示法进行时间转换,因为它是为解析链接列而保留的
猜你喜欢
  • 2020-01-08
  • 1970-01-01
  • 2017-02-10
  • 2022-11-08
  • 1970-01-01
  • 1970-01-01
  • 2016-03-07
  • 2023-03-09
  • 1970-01-01
相关资源
最近更新 更多