我有一些代码来获取股票价格和计算月度回报。如果用于计算它的价格没有在月底发生,我想放弃最后一次回报。例如,运行以下代码会在2014-06-13之前返回价格。而且,即使没有整整一个月,monthlyReturn函数也会计算6月的回报。有没有一种简单的方法可以确保monthReturn只计算整个月的回报,或者如果没有按整月的价格计算,则从返回向量中减去最后一个月?
library(quantmod)
symbols <- c('XLY', 'XLP', 'XLE', 'XLF', 'XLV', 'XLI', 'XLB', 'XLK', 'XLU')
Stock <- xts()
Prices <- xts()
for (i in 1:length(symbols)){
Stock <- getSymbols(symbols[i],auto.assign = FALSE)
Prices <- merge(Prices,Stock[,6])
}
returns <- do.call(cbind, lapply(Prices, monthlyReturn, leading=FALSE))
names(returns) <- symbols
我发现了这段代码,但似乎有一些限制。有没有办法改善这个?
if(tail(index(x.xts),1) != as.Date(as.yearmon(tail(index(x.xts),1)), frac=1)){
x.m.xts = x.m.xts[-dim(x.m.xts)[1],]
}
# That test isn't quite right, but its close. It won't work on the first
# day of a new month when the last business day wasn't the last day of
# the month. It will work for the second day.
答案 0 :(得分:1)
您可以对xts:::last.xts
使用否定子集。这将删除上个月
last(returns, "-1 months")
但是如果月份尚未结束,你只想删除上个月,所以将最后一行的月份与当前日期的月份进行比较。
if (format(end(returns), "%Y%m") == format(Sys.Date(), "%Y%m"))
returns <- last(returns, "-1 month")