为什么以下投资组合未返回CORRECT%Return:
# Load the packages & download the Stock Symbols
library("xts");library("quantmod");library("PerformanceAnalytics")
e <- new.env()
getSymbols("NPTN;XLRN;PBH;DISCK", from="2014-12-31", env=e)
dataset1 <- CalculateReturns(do.call(merge, eapply(e, Ad)),"discrete")
# Make Equal Weight
EW <- reclass(dataset1 %*% rep(1/ncol(dataset1),ncol(dataset1)), match.to=dataset1)
找出投资组合的累积总和:
# I have tried the following both methods:
last(cumsum(na.omit(EW)))
or
Return.cumulative(EW,geometric=FALSE)
然而,CORRECT Return应如下:
# Assuming I purchased on 01-02-2015 at the close
dataset2 <- do.call(merge, eapply(e, Ad))
RETS <-(coredata(dataset2["2015-06-10",])/coredata((dataset2["2015-01-02",])))-1
# Since this is an equally-weighted portfolio:
sum(RETS)*(1/ncol(RETS))
回报低估约为:18%
其他同等重量的投资组合也发生了这种情况,但我无法弄清楚原因。任何帮助表示赞赏
答案 0 :(得分:2)
每日重新平衡形成的投资组合的每日回报由您的EW
给出,也就是说,投资组合每天以相同的指定权重开始每个资产,然后使用该权重计算每日回报。可以使用
EW <- EW["2015-01-03/2015-06-10",]
ret1_rebal <- last(cumprod(EW+1)-1)
ret2_rebal <- Return.cumulative(EW,geometric=TRUE)
其中累积回报的代码已根据最初发布的内容进行了更正。
当投资组合未重新平衡时,每个资产的回报会在该期间内单独累计。任何时候投资组合的价值是初始分配加权的这些累计资产收益的总和。这可以通过
计算出来dataset1 <- dataset1["2015-01-03/2015-06-10",]
dataset3 <- reclass(cumprod(dataset1+1)-1, match.to=dataset1)
wts <- rep(1,ncol(dataset1))/ncol(dataset1)
EW_no_rebal <- dataset3%*%wts
last(EW_no_rebal)
请注意,last(EW_no_rebal)
等于直接根据价格计算的投资组合回报的计算sum(RETS)*(1/ncol(RETS))
。
> last(EW_no_rebal)
[1] 0.4586492
> sum(RETS)*(1/ncol(RETS))
[1] 0.4586492