2015-06-15 37 views
1

我以前在http://code.kx.com/svn/kx/kdb+/tick/tba.q定義的架構:KDB 2路ASOF加入(合併買入/賣出表)

行業:價格:問:([]時間: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

你試圖做嵌套'aj'作品?順便說一句'''aj ['sym'time; aj ['sym'time; trade; bid]; ask]''例如 –

回答

2

你不需要aj來實現你想要的。 ujfills組合將做的工作:

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 

希望這有助於。

更新。如果您需要通過timesym爲@ user2393012支持多個符號,那麼你應該小組建議:

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

,您不需要在每列上填寫。 '填充選擇...'滿足 –

+0

謝謝伊戈爾。不幸的是,不符合sym列。隨着時間的推移,填充符將填充不同的符號。我試圖做''時間xasc填充'sym時間xasc b uj a「,但它也沒有工作... – derenik

+0

@derenik多數民衆贊成多說,因爲你還需要關鍵的時間和sym。這就是'1!'的用途。所以如果你想在前兩列鍵入它的'2!' –

0

您可以使用聯合聯接來完成此操作。

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 

UPDATE

由於UJ是由時間和符號鍵表,以便工會聯同符號柱太

+0

我無法使其與表格中不止一個符號 - 填充符號邊界不斷滿足AAPL的價格。 – derenik

+0

您是否嘗試過更新sym? – skyscraper