【问题标题】:3-day rolling log return in RR中的3天滚动日志返回
【发布时间】:2017-04-11 08:38:26
【问题描述】:

我正在尝试找出一种聪明的方法来计算大量股票的 3 天滚动回报。我不习惯使用 xts 对象,我希望你们中的一些人会这样做,因为我很想在我的数据上使用 PerformanceAnalytics 包。

3D rolling return formula

我有一个包含 559 只股票和 10 年每日价格的大型 xts 对象。有没有一种聪明的方法来保持 xts 对象的结构并保存滚动返回?最好没有 for 循环。

> dim(Prices)
[1] 2610  559

【问题讨论】:

  • 我使用双 for 循环迭代股票和天数,然后手动绑定日期。我想做得更优雅。
  • 你能分享一小部分数据还是创建一些虚拟数据?

标签: r xts


【解决方案1】:

diff() 函数可能对我有帮助。

# Generates Dummy Data
set.seed(100)
dates <- seq(as.Date("2010/1/1"), length.out=20, by="day")
R <- as.xts(rbind(c(0,0,0),matrix(runif(n=57, min = -0.1, max = 0.1),nrow=19)),order.by=dates)
colnames(R) <- c("St1","St2","St3")
prices <- 100*apply(1+R,2,cumprod)

# Calculating log-returns
logR3d <- diff(log(prices), lag=3)

# Check calculations
logR3d_calc <- as.xts(matrix(NA, nrow = 17, ncol = 3 ),order.by=dates[4:20])
colnames(logR3d_calc)=c("St1","St2","St3")

for (stock in 1:ncol(prices)){
  for (day in 2:(nrow(prices)-2)){
    logR3d_calc[day-1,stock] <- sum(log(1+R[day:(day+2),stock]))
  }
}

【讨论】:

  • 另一个选项是TTR::ROC: logR3 &lt;- TTR::ROC(prices, 3)
  • 谢谢,我去看看
猜你喜欢
  • 1970-01-01
  • 2020-12-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-11-10
  • 2019-10-03
  • 1970-01-01
  • 2012-01-21
相关资源
最近更新 更多