从月度回报计算中删除不完整的月份

时间:2014-06-16 02:11:44

标签: r xts quantmod

我有一些代码来获取股票价格和计算月度回报。如果用于计算它的价格没有在月底发生,我想放弃最后一次回报。例如,运行以下代码会在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.

1 个答案:

答案 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")