在KDB/Q中按时滑动窗口

Mar*_*inD 3 aggregate aggregate-functions sliding-window kdb q-lang

Q/KDB中有一些函数让我们在滑动窗口(msum,mavg等)上聚合.但是这些函数会考虑先前行的数量.

我想要一个可以在滑动窗口上聚合但有时间而不是行数的函数.例如在最后5分钟.

这样的功能存在吗?如果没有,我该如何设计呢?我不想使用while循环,因为它会因为大量数据而导致我的程序运行速度过慢.

谢谢您的帮助

hel*_*bye 5

你想聚合到固定时间桶by,xbar是你的朋友:http://code.kx.com/q/ref/arith-integer/#xbar

trade: ([] time:`time$(10:00 10:01 10:03 10:07 10:09); price:`float$(12.1 12.6 12.4 12.4 12.9); size:`int$(5 6 10 34 2))
select last price, sum size by 5 xbar time.minute from trade
minute| price size
------| ----------
10:00 | 12.4  21  
10:05 | 12.9  36
Run Code Online (Sandbox Code Playgroud)

如果你想在每一行中回溯5分钟,你可以找到一个窗口加入:http://code.kx.com/q/ref/joins/#wj-wj1-window-join

w:-300000 0+\:trade.time
wj1[w;`time;trade;(trade;(last;`price);(sum;`size))]
time         price size
-----------------------
10:00:00.000 12.1  5   
10:01:00.000 12.6  11  
10:03:00.000 12.4  21  
10:07:00.000 12.4  44  
10:09:00.000 12.9  36    
Run Code Online (Sandbox Code Playgroud)