我试图在R中展示如何为投资组合分配权重,然后计算每日回报。下面是每日回报的数据,我为每个回报分配了25%的权重,用于制作相同的权重投资组合并计算回报。 (有4家公司股票,其中我刚刚提供了2只股票的数据,因此已经给出了每股股票25%的权重)但是,我在R中配置相同的情况是不合适的。
Workings:
25% = 636.99*25% = 159.25
633.79*25% = 158.45
Returns = Closing - opening
= 159.25-158.45
= -0.80
Is there any way I can show this in R?
AMZN 25% Returns GOOG 25% Returns
636.99 159.25 741.84 185.46
633.79 158.45 -0.80 742.58 185.65 0.18
632.65 158.16 -0.28 743.62 185.90 0.26
607.94 151.99 -6.18 726.39 181.60 -4.31
607.05 151.76 -0.22 714.47 178.62 -2.98
617.74 154.43 2.67 716.03 179.01 0.39
617.89 154.47 0.04 726.07 181.52 2.51
581.81 145.45 -9.02 700.56 175.14 -6.38
答案 0 :(得分:2)
退货应该分开,而不是减去。亚马逊的1天回报应计算为633.79 / 636.69 - 1 = -0.0046
。等权重投资组合可以在第2天采用这四个回报的均值。
在第2天之后,您需要考虑您的投资组合重新平衡的频率。这是quant.stackexchange.com的主题,而不是编程问题。但是我会给你两个(不切实际的)案例,你假设投资组合在每天开始时是完全相等加权的,以及(简单和现实的)情况,我们将投资组合设置为等于加权一开始我们就忘了它。
正如我在your
question about stock price returns中提到的,收集和操纵股票价格的一个好的R包是quantmod
。尝试:
library(quantmod)
symbols <- c("GOOG", "AMZN", "FB", "AAPL")
getSymbols(symbols, src = 'google')
closing.prices <- merge.xts(GOOG[,4], AMZN[,4], FB[,4], AAPL[,4])["2016-12-30/"]
请注意,所有内容都将使用xts
时间序列完成。时间序列closing.prices
将是自2016年底以来的价格,并且可以使用ROC
包中的TTR
转换为一系列回报:
library(TTR)
price.returns = ROC(closing.prices)
对于我们在每天开始时25%等权重的投资组合,投资组合的回报将是手段:
rowMeans(price.returns)
更真实的情况是,投资组合在年初的等权重为25%,您可以计算每只股票的总回报,然后计算四者的平均值:
mean(as.numeric(closing.prices["2017-09-12"]) / as.numeric(closing.prices["2016-12-30"]) - 1)
其中closing.prices["2017-09-12"]
是今天的收盘价,closing.prices["2016-12-30"]
是年初的收盘价。