我试图找出一种聪明的方法来计算一大批股票的3天滚动回报。我不习惯使用xts对象,我希望你们中的一些人,因为我很乐意在我的数据上使用PerformanceAnalytics包。
我有一个大的xts对象,有559只股票和10年的每日价格。有没有一种聪明的方法来保持xts对象的结构并保存滚动返回?最好没有for循环。
> dim(Prices)
[1] 2610 559
答案 0 :(得分: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]))
}
}