R:更快滚动的 VWAP

R: Faster Rolling VWAP

给定以下数据

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

我生成一个从索引 =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 时,效率会急剧下降。 有什么更快实施的建议吗?

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

  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