我正在研究 EBS,外汇市场限价订单簿(LOB):这是一个 100 毫秒时间片内的 LOB 示例:
datetime|side(0=Bid,1=Ask)| distance(1:best price, 2: 2nd best, etc.)| price
2008/01/28,09:11:28.000,0,1,1.6066
2008/01/28,09:11:28.000,0,2,1.6065
2008/01/28,09:11:28.000,0,3,1.6064
2008/01/28,09:11:28.000,0,4,1.6063
2008/01/28,09:11:28.000,0,5,1.6062
2008/01/28,09:11:28.000,1,1,1.6067
2008/01/28,09:11:28.000,1,2,1.6068
2008/01/28,09:11:28.000,1,3,1.6069
2008/01/28,09:11:28.000,1,4,1.6070
2008/01/28,09:11:28.000,1,5,1.6071
2008/01/28,09:11:28.500,0,1,1.6065 (I skip the rest)
总结数据,他们有两个规则(为了简单起见,我做了一些改动):
如果 Bid 或 Ask 方的 LOB 没有变化,他们将不会记录该方。查看数据的最后一行,毫秒是 000,现在是 500,这意味着在 100、200、300 和 400 毫秒内任何一侧的 LOB 都没有变化(但这些信息对于任何计算都很重要)。
从订单簿的给定一侧删除最后一个价格(仅最后一个)。在这种情况下,价格字段中没有任何内容的单个记录。同样,那时将没有整个 LOB 的记录。
示例:2008/01/28,09:11:28.800,0,1,
我想计算 minAsk-maxBid(1.6067-1.6066) 或加权平均价格(使用所有距离的大小作为权重,我的真实数据中有大小列)。我想为我的全部数据做。但正如你所见,数据已经汇总,这不是常规的。我已经编写了一个代码来生成整个数据(不仅仅是摘要)。这对于小型数据集很好,但对于大型数据集,我正在创建一个巨大的文件。我想知道您是否有任何提示如何处理数据?如何在有效的同时填补空白。