2

我有一个由 data.table 保存的来自外汇市场(mydt)的数据:

datetime|side(0=Bid,1=Ask)| distance(1:best price, 2: 2nd best)| 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,1,1,1.6068
2008/01/28,09:11:28.000,1,2,1.6069

2008/01/28,09:11:29.000,0,1,1.6067
2008/01/28,09:11:29.000,0,2,1.6066

2008/01/28,09:11:30.000,0,1,1.6065
2008/01/28,09:11:30.000,0,2,1.6064
2008/01/28,09:11:30.000,1,1,1.6066
2008/01/28,09:11:30.000,1,2,1.6067

我想在每个时间块中计算 spread=minAsk-maxBid 。通常的写法是:

mydt[,min(price[side==1]) - max(price[side==0]),by=datetime]

但是,数据已经被这条规则总结了:如果一侧没有变化,数据中就没有记录。这意味着比较块 1 和块 2,这部分没有变化,也没有记录:

2008/01/28,09:11:28.000,1,1,1.6068
2008/01/28,09:11:28.000,1,2,1.6069

我想逐块计算一些变量(点差或加权平均价格),但有时我需要前一个块的信息(因为这个规则)。我怎样才能做到这一点?

4

0 回答 0