我有一个来自外汇市场的数据(mydt),由data.table保存:
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
我想逐块去计算一些变量(点差或加权平均价格),但有时我需要前一个块的信息(因为这条规则)。我怎么能这样做?