等权重 RETURNS 在 R 中不等权重

Equal-Weighted RETURNS not EQUALLY-Weighted in R

为什么以下投资组合没有返回正确的百分比 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)

然而正确的 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))

returns 被低估了大约 : 18%

这也发生在其他等权重投资组合中,但我无法找出原因。感谢任何帮助

通过每日再平衡形成的投资组合的每日 returns 由您的 EW 给出,也就是说,投资组合的每一天都以每个资产的相同指定权重开始,然后计算每天 return 使用该权重。一段时间内投资组合的累计 return 可以使用

计算
EW <- EW["2015-01-03/2015-06-10",]
ret1_rebal <- last(cumprod(EW+1)-1)
ret2_rebal <- Return.cumulative(EW,geometric=TRUE)

累积 return 的代码已从最初发布的内容中更正。

当投资组合未重新平衡时,每个资产的 return 会在该期间单独累积。投资组合在任何时候的价值都是这些累积资产 return 的总和,由初始分配加权。这可以通过

计算
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)) 的投资组合 return。

> last(EW_no_rebal)
[1] 0.4586492
> sum(RETS)*(1/ncol(RETS))
[1] 0.4586492