2015-01-20 23 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