我有一個含有一些高頻率股票價格數據的csv文件,我想從表格中獲得第二個價格數據。填寫第二個來自Q KDB的數據+
在每個文件中,有一個名爲date
列,time
,symbol
,price
,volume
,等
有幾秒鐘沒有這樣的交易中有幾秒鐘丟失的數據。
我想知道如何填寫Q中缺失的數據以獲取第二次數據從9:30到16:00完整?如果價格缺失,那麼只需使用最近的價格作爲它的價格。
我正在考慮編寫一些循環,但我不知道如何完全去做。
我有一個含有一些高頻率股票價格數據的csv文件,我想從表格中獲得第二個價格數據。填寫第二個來自Q KDB的數據+
在每個文件中,有一個名爲date
列,time
,symbol
,price
,volume
,等
有幾秒鐘沒有這樣的交易中有幾秒鐘丟失的數據。
我想知道如何填寫Q中缺失的數據以獲取第二次數據從9:30到16:00完整?如果價格缺失,那麼只需使用最近的價格作爲它的價格。
我正在考慮編寫一些循環,但我不知道如何完全去做。
簡化一點,我假設你有你的數據集的一些隨機的時間戳是這樣的:
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
版本稍快。
非常感謝!我已經通過aj – Demi 2015-01-21 18:49:07
解決了該問題.aj也可以工作 - 確保表格已排序,因爲它執行二分搜索以查找最接近的匹配項。它會比我的解決方案慢得多:-) – 2015-01-21 21:55:47
您可以添加您已有的任何代碼的示例,以及您當前正在提取數據的代碼嗎?閱讀https://stackoverflow.com/help/mcve瞭解如何編寫一個好問題的信息。 – 2015-01-20 18:38:14
我用aj解決了這個問題。無論如何謝謝 – Demi 2015-01-21 18:50:08