2015-01-20 59 views
0

我有一個含有一些高頻率股票價格數據的csv文件,我想從表格中獲得第二個價格數據。填寫第二個來自Q KDB的數據+

在每個文件中,有一個名爲date列,timesymbolpricevolume,等

有幾秒鐘沒有這樣的交易中有幾秒鐘丟失的數據。

我想知道如何填寫Q中缺失的數據以獲取第二次數據從9:30到16:00完整?如果價格缺失,那麼只需使用最近的價格作爲它的價格。

我正在考慮編寫一些循環,但我不知道如何完全去做。

+0

您可以添加您已有的任何代碼的示例,以及您當前正在提取數據的代碼嗎?閱讀https://stackoverflow.com/help/mcve瞭解如何編寫一個好問題的信息。 – 2015-01-20 18:38:14

+0

我用aj解決了這個問題。無論如何謝謝 – Demi 2015-01-21 18:50:08

回答

1

簡化一點,我假設你有你的數據集的一些隨機的時間戳是這樣的:

time       price 
-------------------------------------- 
2015.01.20D22:42:34.776607000 7 
2015.01.20D22:42:34.886607000 3 
2015.01.20D22:42:36.776607000 4 
2015.01.20D22:42:37.776607000 8 
2015.01.20D22:42:37.886607000 7 
2015.01.20D22:42:39.776607000 9 
2015.01.20D22:42:40.776607000 4 
2015.01.20D22:42:41.776607000 9 

所以有一些缺失秒那裏。我打算將此表稱爲t。所以,如果你做了逐秒類型的查詢,顯然是缺少秒仍然下落不明:

q)select max price by time.second from t 
second | price 
--------| ----- 
22:42:34| 7 
22:42:36| 4 
22:42:37| 8 
22:42:39| 9 
22:42:40| 4 
22:42:41| 9 

要得到缺少秒,你必須加入空的列表。在這種情況下,我們知道數據從22:42:34到22:42:41,但實際上你必須找到最小/最大時間,並用它來創建一個臨時的「空」表來加入:

q)([] second:22:42:34 + til 1+`int$22:42:41-22:42:34 ; price:(1+`int$22:42:41-22:42:34)#0N) 
second price 
-------------- 
22:42:34 
22:42:35 
22:42:36 
22:42:37 
22:42:38 
22:42:39 
22:42:40 
22:42:41 

然後左連接:

q)([] second:22:42:34 + til 1+`int$22:42:41-22:42:34 ; price:(1+`int$22:42:41-22:42:34)#0N) lj select max price by time.second from t 
second price 
-------------- 
22:42:34 7 
22:42:35 
22:42:36 4 
22:42:37 8 
22:42:38 
22:42:39 9 
22:42:40 4 
22:42:41 9 

您可以使用fills或任何你喜歡的填充啓發式是之後。

q)fills `second xasc asc ([] second:22:42:34 + til 1+`int$22:42:41-22:42:34 ; price:(1+`int$22:42:41-22:42:34)#0N) lj select max price by time.second from t 
second price 
-------------- 
22:42:34 7 
22:42:35 7 
22:42:36 4 
22:42:37 8 
22:42:38 8 
22:42:39 9 
22:42:40 4 
22:42:41 9 

(注意:fills之前second的那種!)

順便說對於較大的表,這將是比快環多。 q中的循環通常是一個壞主意。

編輯

你可以用逗號連接太,這兩個表需要在second列被鍵入

t,t1 

(其中,T1爲空填表格鍵上second

我還沒有測試過它,但我懷疑它會比lj版本稍快。

+0

非常感謝!我已經通過aj – Demi 2015-01-21 18:49:07

+1

解決了該問題.aj也可以工作 - 確保表格已排序,因爲它執行二分搜索以查找最接近的匹配項。它會比我的解決方案慢得多:-) – 2015-01-21 21:55:47