我有一个含有一些高频率股票价格数据的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