2014-03-05 25 views
1

我試圖在KDB中創建一個表,其中列是查詢結果。例如,我已經加載股票數據並搜索給定時間窗口股票交易的價格。我創建了一個函數 getTrades [Sybmol;日期;開始時間; StopTime]在KDB中使用結果列創建表

這將搜索我的數據庫並返回在開始和停止時間之間交易的價格。所以我的結果蘋果30秒的窗口可能是: 527.10,527.45,527.60,526.90等

使用XBAR在那裏我有所有的每秒的行和列我想要做的就是現在創建一個表在StartTime和StopTime交易的價格。如果價格在1秒內交易,我會在欄中放置一個X.我認爲我可以處理大部分的問題,但我正在努力的主要工作是將上面得到的結果轉換成表格名稱。我也在努力如何使它變得靈活,所以我的桌子在一個場景中有5個欄目(5個交易價格),而另一個場景則有10個欄目,因此它根據我正在搜索的窗口中交易的價格水平而變化。

謝謝。

回答

3

執行程序化選擇的最好和最乾淨的方式是使用select的功能形式。

從q表示凡人,

?[t;c;b;a]     

其中t是一個表,是一個聚集體的字典,b爲groupbys的字典和c是約束的列表。

換句話說,選擇一個由b從t其中c。

這將允許您動態創建一個可以是任意大小的。

你可以在這裏找到更多的信息: http://code.kx.com/q4m3/9_Queries_q-sql/#912-functional-forms

0

這看起來有點令人費解...但我認爲這可能是你追求的。

樣品表筆與時間和價格列:

t:`time xasc([]time:100?(.z.T+500*til 100);price:100?(100 101 102 103 104 105 106)) 

此表複製你從你的函數調用的第一步,得到了什麼 - 「選擇時間,價格從貿易,其中日期= X,象徵= y,starttime = t1,endtime = t2「。

要返回表中指定的格式:

q) flip (`time,`$string[c])!flip {x,'y}[key a;]value a:{x in y}[c:asc distinct tt`price] each group (!) . reverse value flip tt:update time:time.second from t 

time  100 101 102 103 104 105 106 
------------------------------------ 
20:34:29 0 1 0 0 0 1 0 
20:34:30 0 0 0 0 0 0 1 
20:34:31 0 0 1 0 0 0 0 
20:34:32 0 0 1 0 1 0 0 
... 

這有布爾變量,而不是X作爲布爾變量可能是比較容易的工作。

也請原諒一行......如果我有機會,我會分解它,並嘗試使其更具可讀性。

1

Pivot Table

我認爲數據透視表將適用於這種情況。使用jgleeson例如:

time   price 
------------------ 
11:27:01.600 106 
11:27:02.600 102 
11:27:02.600 102 
11:27:03.100 100 
11:27:03.100 102 
11:27:03.100 102 
11:27:03.100 104 
11:27:03.600 104 
11:27:03.600 102 
11:27:04.100 106 
11:27:05.100 105 
11:27:06.600 106 
11:27:07.100 101 
11:27:07.100 104 
11:27:07.600 105 
11:27:07.600 105 
11:27:07.600 101 

not null exec (exec `$string asc distinct price from s)#(`$string price)!price by time:1 xbar time.second from s:select from t where time within 11:27:00 11:27:30 

和回報:

time | 100 101 102 103 104 105 106 
--------| --------------------------- 
11:27:01| 0 0 0 0 0 0 1 
11:27:02| 0 0 1 0 0 0 0 
11:27:03| 1 0 1 0 1 0 0 
11:27:04| 0 0 0 0 0 0 1 
11:27:05| 0 0 0 0 0 1 0 
11:27:06| 0 0 0 0 0 0 1 
11:27:07| 0 1 0 0 1 1 0 

它可以支持獨特的價格任何數字。