我使用了http://code.kx.com/svn/kx/kdb+/tick/tba.q中定义的架构:
贸易:出价:问:([]时间:timespan$();sym:
符号$();价格:float$();size:
INT $())
我想加入竞价并将表格放入单一报价表中,但无法弄清楚如何做到这一点。 aj []只使用表中的一个时间列,但我需要两个时间列组合在一起。
E.g。
出价
time size price
----------------
10:00:00 10 0.05
10:00:03 10 0.06
10:00:06 20 0.06
问
time size price
----------------
10:00:00 10 0.06
10:00:02 10 0.07
10:00:04 20 0.07
结果应为:
time bs bprc as aprc
--------------------------
10:00:00 10 0.05 10 0.06
10:00:02 10 0.05 10 0.07
10:00:03 10 0.06 10 0.07
10:00:04 10 0.06 20 0.07
10:00:06 20 0.06 20 0.07
是否有人使用此tba架构?它更紧凑,显着节省了磁盘空间,但我发现它在查询方面并不是很灵活。如果我想每天获得平均点差,那我该如何去做呢?
谢谢!
答案 0 :(得分:3)
您不需要aj
来实现您想要的效果。 uj
结合fills
将完成这项工作:
b: 1!`time`sym`bs`bprc xcol bid / convert bid to a keyed table
a: 1!`time`sym`as`aprc xcol ask / convert ask to a keyed table
ba: `time xasc b uj a / join them and sort by time
/ forward fill the missing prices
select time, sym, fills bs, fills bprc, fills as, fills aprc from ba
希望这有帮助。
<强>更新即可。如果您需要支持多个符号,那么您应该按{user} 3930建议的time
和 sym
进行分组:
b: 2!`time`sym`bs`bprc xcol bid / convert bid to a keyed table
a: 2!`time`sym`as`aprc xcol ask / convert ask to a keyed table
然后:
ba: `time xasc b uj a / no change here
ungroup select time, sym, fills bs, fills bprc, fills as, fills aprc by sym from ba
我们的想法是,您只将fills
应用于每个组中的值,以防止价格在符号边界外泄漏。
答案 1 :(得分:1)
您可以使用联合联接来完成此任务。
q)bid
time sym bsize bprice
--------------------------------------
0D10:00:00.000000000 AAPL 10 0.05
0D10:00:03.000000000 AAPL 10 0.06
0D10:00:06.000000000 AAPL 10 0.06
q)ask
time sym asize aprice
--------------------------------------
0D10:00:00.000000000 AAPL 10 0.06
0D10:00:02.000000000 AAPL 10 0.07
0D10:00:04.000000000 AAPL 10 0.07
q)0!update bsize:fills bsize, bprice:fills bprice, asize:fills asize, aprice:fills aprice from `time xasc (2!bid) uj (2!ask)
time sym bsize bprice asize aprice
---------------------------------------------------
0D10:00:00.000000000 AAPL 10 0.05 10 0.06
0D10:00:02.000000000 AAPL 10 0.05 10 0.07
0D10:00:03.000000000 AAPL 10 0.06 10 0.07
0D10:00:04.000000000 AAPL 10 0.06 10 0.07
0D10:00:06.000000000 AAPL 10 0.06 10 0.07
<强>更新强>
因为uj在时间和sym键入的表上,所以联合连接也与sym列一起工作