Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/silverlight/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Kdb 在给定时间戳列表的情况下,获得asof价格的最有效方法_Kdb - Fatal编程技术网

Kdb 在给定时间戳列表的情况下,获得asof价格的最有效方法

Kdb 在给定时间戳列表的情况下,获得asof价格的最有效方法,kdb,Kdb,我有一个跨越多个日期的时间戳列表,没有符号,只有时间戳。这些时间可以是1000/2000,跨越多个日期 最有效的方法是什么来点击hdb并获得每个时间戳最接近的可用价格 从hdbtable中选择,其中date=x->可以超过60mm行 每次约会都这样做,然后在上面放一个aj是非常糟糕的 欢迎提出任何建议假设HDB遵循sym上带有'p属性的日期分区的标准约定,那么aj最有效的方式是 aj[`sym`time;select sym,time,other from myTable where …;sel

我有一个跨越多个日期的时间戳列表,没有符号,只有时间戳。这些时间可以是1000/2000,跨越多个日期

最有效的方法是什么来点击hdb并获得每个时间戳最接近的可用价格

从hdbtable中选择,其中date=x->可以超过60mm行

每次约会都这样做,然后在上面放一个aj是非常糟糕的


欢迎提出任何建议

假设HDB遵循sym上带有'p属性的日期分区的标准约定,那么aj最有效的方式是

aj[`sym`time;select sym,time,other from myTable where …;select sym,time,price from prices where date=x]
除日期外,价格表上不应有其他过滤器/where条款

你是说你没有符号,只有时间戳,那是什么意思?这是否意味着您想要该时间戳上所有sym的价格,还是想要该时间戳上任何sym的最后价格?前者很简单,因为您可以将时间戳加入到不同的符号列表中,并将其用作aj中的左表。后者不会像HDB数据那样容易,因为HDB数据可能没有按时完全排序,它可能先按sym排序,然后按时间排序。在这种情况下,您可能需要再次将时间戳加入到不同的sym列表中,并根据所有sym的价格加入aj,然后从该结果中选择时间最长的一个

所以我想这取决于几个因素。更多信息可能会有所帮助

编辑:基于进一步讨论的建议:

targetTimes:update targetTime:time from ([]time:"n"$09:43:19 10:27:58 13:12:11 15:34:03);
res:aj0[`sym`time;(select distinct sym from trade where date=2021.01.22)cross targetTimes;select sym,time,price from trade where date=2021.01.22];

select from res where not null price,time=(max;time)fby targetTime
sym  time                 targetTime           price
----------------------------------------------------
AQMS 0D09:43:18.999937967 0D09:43:19.000000000 4.5
ARNA 0D10:27:57.999842638 0D10:27:58.000000000 76.49
GE   0D15:34:02.999979520 0D15:34:03.000000000 11.17
HAL  0D13:12:10.997972224 0D13:12:11.000000000 18.81
这将给出与targetTime最接近的sym的价格。然后,您可以在多个日期内完成此操作:

{targetTimes: ...;res:aj0[...];select from res ...}peach mydates;

请注意,使此复杂化的是您的要求,即它是最接近您的sym减去TargetTime的任何sym的价格。这似乎很奇怪-通常您想要的是某个特定时间的SYM价格,而不是最接近某个特定时间的任何东西的价格。

您可以使用多线程优化查询,为每个线程分配一个要处理的日期,基本上使用的不仅仅是一个核心:

{select from hdbtable where date = x} peach listofdates

可以找到更多关于多线程的信息,也可以找到更多关于peach的信息

当时任何sym都可以。我们的输入是一个时间戳列表。我们希望得到与输入时间戳最接近的任何价格。时间戳列表与价格表中的不匹配当aj的左侧没有时间戳时,如何在sym上进行aj?我建议您在左侧表格中制作一个sym列,对应于右侧表格中的sym。虽然这假定右侧的表具有syms,并且在该表上具有parted属性。那么问题是,如果右边的表中有parted`p属性,那么是哪一列?换句话说,价格是多少?此外,hdb表是否进行了日期分区?是的,它在sym上进行了分区,并且进行了日期分区。所以你是说我应该做一些事情,比如从date=x的表中选择distinct sym,然后用一个叉积附加到每个日期的时间戳上?没错。为给定日期选择不同的符号将非常快,与时间戳交叉将很快,aj将是最佳的,最后选择的最大时间将很快。当然,你还是要一次约会一次,但桃子和奴隶可以帮你