通过 xts 递归循环

标签 r time-series xts

我正在对订单簿随时间的发展进行建模。我在 xts 中有一个初始订单簿形状,然后也在 xts 中进行后续深度更新:

初始订单簿形状如下所示(所有条目具有相同的时间):

                            BID.price       size
2014-02-11 23:59:42.494426  508.1000        10.0000000
2014-02-11 23:59:42.494426  509.1200         8.0000000
2014-02-11 23:59:42.494426  509.1000        10.0000000

随后的深度更新如下所示:

                           BID. price       size
2014-02-12 04:57:51.191514 508.1000        -10.00000000
2014-02-12 04:57:51.640302 514.0000         10.00000000

我需要的是:

1) 对于更新中的每一行,将价格与订单簿进行比较:

1a) 如果更新价格水平已在订单簿中,请相应调整大小,因此上面的示例如下所示:

                            BID.price       size
2014-02-12 04:57:51.191514  509.1200         8.0000000
2014-02-12 04:57:51.291514  509.1000        10.0000000

(价格水平508.10000已删除,时间已更新)

1b) 如果深度更新尚未在订单簿中,请添加具有给定大小的新奖金级别,因此示例如下所示:

                            BID.price       size
2014-02-12 04:57:51.640302  509.1200         8.0000000
2014-02-12 04:57:51.640302  509.1000         10.0000000
2014-02-12 04:57:51.640302  514.0000         10.00000000

(新增价格等级514,时间调整)。

是否有任何方便快捷的方法来避免 for 循环深度更新 xts?

谢谢!

最佳答案

我认为这里不需要使用 xts 对象,因为所有观察的索引都是相同的,并且这里正确的 id 是 bid 变量。因此,我使用 1 个简单的 data.frame 解释我的解决方案,如上所示:

DT                  ## the day before
  day    bid size
1   1 508.10   10
2   1 509.12    8
3   1 509.10   10
DT1                ## the current or last day
  day   bid size
1   2 508.1  -10
2   2 514.0   10

现在使用merge我们几乎有了解决方案:

dtm
     bid day.x size.x day.y size.y
1 508.10     1     10     2    -10
2 509.10     1     10    NA     NA
3 509.12     1      8    NA     NA
4 514.00    NA     NA     2     10

现在我们应该调整大小并删除空位置的出价。我在这里创建了一个中间 %+% 函数来处理缺失值。

## compute size
"%+%" <- function(x,y) 
     ifelse(is.na(x),
            ifelse(is.na(y),NA,y),
            ifelse(is.na(y),x,NA))
## remove  numm poistion(size==0)
subset(transform(dtm,size=size.x%+%size.y,day=max(day.y,na.rm=T)),
       size !=0,select=c(day,bid,size))

 day    bid size
2   2 509.10   10
3   2 509.12    8
4   2 514.00   10

我认为你可以使用data.table在这里获得更简洁和语法糖的解决方案。

关于通过 xts 递归循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21878055/

相关文章:

r - 带有虚拟变量的时间序列变量的多元回归

excel - 使用Rblapi包拉取数据

r - R:index()无法返回所需的类

r - 找到最接近的封闭 FALSE 值位置

python - 参数未通过 rpy2 传递给 R

r - 在 R 中将大型长数据转换为宽数据

python - python中的时间序列分割

r - 如何在 R 中创建部分因子设计?

java - JFreeChart 链接轴

r - 使用字符串索引 xts 并仅返回该确切时间的观察结果