【问题标题】:Assigning weights to a portfolio in R在 R 中为投资组合分配权重
【发布时间】:2017-09-12 17:11:33
【问题描述】:

我试图在 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

【问题讨论】:

  • 很多方法可以实现这一点,但我可能会定义权重GOOG_w = .25AMZN_w = .25 等。您还可以使用源电子表格跟踪权重。不过,我不会以您提供的格式存储数据。我会更多地遵循Ticker Symbol | Share Price | Number of Shares | Value in Portfolio | Returns
  • 另请注意,虽然您的起始权重在 25% 时相等,但仅在开始时才如此。一旦股价发生变化,您的投资组合的权重就不再相等,因此在您的示例中,您的 25% 列并不真正准确。
  • 好的,我会试试的
  • 还有一个问题:为什么要根据股价计算“25%”? A)通常你不能拥有一小部分股份,B)如果你正在建立一个同等权重的投资组合,你会根据你的起始资本而不是股价来建立它。 IE。我有 1,000 美元,所以如果我要创建四只股票的等权重投资组合,我会购买每只股票 250 美元。
  • 同意逻辑。为了简单起见,我在这里采用了 25% 的重量来了解工作原理。我只是想了解当我们拥有相等的加权投资组合时,如何在 R 中计算投资组合回报。

标签: r


【解决方案1】:

回报应该被除,而不是被减去。您的亚马逊 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 年底以来的价格,并且可以使用 TTR 包中的 ROC 转换为一系列收益:

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"] 是年初的收盘价。

【讨论】:

  • 嗨,你能解释一下命令 mean(as.numeric(close.prices["2017-09-12"]) / as.numeric(close.prices["2016-12-30" ]) - 1) 再一次?我无法获得输出。它向我显示错误:对象:未找到收盘价。谢谢。
猜你喜欢
  • 1970-01-01
  • 2022-11-18
  • 1970-01-01
  • 2022-01-18
  • 2020-01-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-01-16
相关资源
最近更新 更多