R:更快滚动VWAP

时间:2016-02-15 20:21:32

标签: r volume

鉴于以下数据

N<-1000;
Px<-runif(N, min = 100, max = 120);
Vol<-runif(N, min = 1, max = 20)

我使用

生成一个从index = 1滚动的VWAP系列
VWAP<-unlist(lapply(seq(1,length(Px)),function(x) sum(Px[1:x]*Vol[1:x])/sum(Vol[1:x])))

这适用于N <10000但是当N接近1M时效率显着降低。 有关更快实施的建议吗?

1 个答案:

答案 0 :(得分:1)

您可以使用此语法,该语法不会在每次迭代时重新计算先前元素的总和:

  N<-1000000;
  Px<-runif(N, min = 100, max = 120);
  Vol<-runif(N, min = 1, max = 20)
  PxVol <- Px*Vol
  SPxVol <- cumsum(PxVol)
  SVol <- cumsum(Vol)
  VWAP <- SPxVol/SVol