R 中的 3 天滚动日志 return
3-day rolling log return in R
我正在尝试找出一种聪明的方法来计算大量股票的 3 天滚动 return。我不习惯使用 xts 对象,我希望你们中的一些人是,因为我喜欢在我的数据上使用 PerformanceAnalytics 包。
3D rolling return formula
我有一个大型 xts 对象,其中包含 559 只股票和 10 年的每日价格。有没有什么聪明的办法既能保持xts对象的结构又能保存滚动return?最好没有for循环。
> dim(Prices)
[1] 2610 559
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]))
}
}
我正在尝试找出一种聪明的方法来计算大量股票的 3 天滚动 return。我不习惯使用 xts 对象,我希望你们中的一些人是,因为我喜欢在我的数据上使用 PerformanceAnalytics 包。
3D rolling return formula
我有一个大型 xts 对象,其中包含 559 只股票和 10 年的每日价格。有没有什么聪明的办法既能保持xts对象的结构又能保存滚动return?最好没有for循环。
> dim(Prices)
[1] 2610 559
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]))
}
}