汇总了大量数据,如何用R处理它?

时间:2013-08-30 02:32:54

标签: r summary forex

我正在研究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)

总结数据,它们有两个规则(为简单起见,我稍微改了一下):

  1. 如果Bid或Ask方面的LOB没有变化,他们将不会记录该方。查看数据的最后一行,毫秒为000,现在为500,这意味着在任何一侧的LOB没有变化100,200,300和400毫秒(但这些信息对于任何计算都很重要)。

  2. 从订单簿的给定一侧删除最后价格(仅限最后一个)。在这种情况下,单个记录在价格字段中没有任何内容。那时候整个LOB也没有记录。

    实施例:2008/01 / 28,09:11:28.800,0,1,

  3. 我想计算minAsk-maxBid(1.6067-1.6066)或加权平均价格(使用所有距离的大小作为权重,我的实际数据中有大小列)。我想为我的整个数据做。但正如您所看到的那样,数据已被总结,这不是常规的。我编写了一个代码来生成整个数据(而不仅仅是摘要)。这适用于小型数据集,但对于大型数据集,我正在创建一个巨大的文件。我想知道你是否有任何提示如何处理数据?如何在效率高的时候填补空白。

1 个答案:

答案 0 :(得分:3)

你没有给出一个很好的可重复的例子,所以这将是伪/未经测试的代码。仔细阅读文档并根据需要进行调整。

我建议您先过滤并将数据拆分为两个data.frames:

best.bid <- subset(data, side == 0 & distance == 1)
best.ask <- subset(data, side == 1 & distance == 1)

然后,对于这两个data.frames中的每一个,使用findInterval来计算相应的最佳要价或最佳出价:

best.bid$ask <- best.ask$price[findInterval(best.bid$time, best.ask$time)]
best.ask$bid <- best.bid$price[findInterval(best.ask$time, best.bid$time)]

(为此,您可能需要将日期/时间转换为线性度量,例如自开市以来的秒数。)

那应该很容易:

min.spread <- min(c(best.bid$ask - best.bid$price,
                    best.ask$bid - best.ask$price))

我不确定我是否理解一天的特殊性,但我敢打赌,您可以在市场收盘时计算价差并将其添加到最终的min电话中。


对于加权平均价格,请使用相同的想法,而不是两个best.bidbest.ask data.frames,您应该从两个weighted.avg.bidweighted.avg.ask数据开始.frames。