如何使用 tidyquant 计算多只股票的投资价值?

How to calculate investment values of multiple stocks using tidyquant?

我想获取每只股票的投资价值,但我认为我获取的是整个数据集。

library(tidyquant)
library(dplyr)
data(FANG)
monthly_returns_stocks <- FANG %>%
  group_by(symbol) %>%
  tq_transmute(adjusted, periodReturn, period = "monthly")

weights <- c(0.50, 0.25, 0.25, 0)

monthly_returns_stocks %>%
  tq_portfolio(assets_col   = symbol,
               returns_col  = monthly.returns, 
               weights = weights,
               col_rename   = "investment.growth",
               wealth.index = TRUE) %>%
mutate(investment.growth = investment.growth*100)

我做错了什么?

我想通过每个符号获得随着时间推移的投资价值,假设在时间 0 投资 100 美元。因此所需的输出看起来像...

desired_output <-
  tibble::tribble(
    ~symbol,       ~date, ~investment.growth,
       "FB", "1/31/2013",               100L,
       "FB", "2/28/2013",               103L,
       "FB", "3/28/2013",               106L,
       "FB", "4/30/2013",               101L,
       "FB", "5/31/2013",                99L,
     "AMZN", "1/31/2013",               100L,
     "AMZN", "2/28/2013",               105L,
     "AMZN", "3/28/2013",               109L,
     "AMZN", "4/30/2013",               123L,
     "AMZN", "5/31/2013",               112L,
     "GOOG", "1/31/2013",               100L,
     "GOOG", "2/28/2013",                98L,
     "GOOG", "3/28/2013",                96L,
     "GOOG", "4/30/2013",               102L,
     "GOOG", "5/31/2013",               106L)

查看您的预期输出,以下代码行将您带到那里。起点是您的 monthly_returns_stocks data.frame。基本上是每月 returns + 1 倍投资 $100 的累积总和。如果您想查看每只股票 1000 美元投资的增长情况,请将 100 更改为 1000。

monthly_returns_stocks %>% 
  mutate(investment.growth = 100 * (1 + cumsum(monthly.returns)))

# A tibble: 192 x 4
# Groups:   symbol [4]
   symbol date       monthly.returns investment.growth
   <chr>  <date>               <dbl>             <dbl>
 1 FB     2013-01-31        0.106                111. 
 2 FB     2013-02-28       -0.120                 98.6
 3 FB     2013-03-28       -0.0613                92.5
 4 FB     2013-04-30        0.0856               101. 
 5 FB     2013-05-31       -0.123                 88.7
 6 FB     2013-06-28        0.0218                90.9
 7 FB     2013-07-31        0.479                139. 
 8 FB     2013-08-30        0.122                151. 
 9 FB     2013-09-30        0.217                173. 
10 FB     2013-10-31       -0.000398             173. 
# ... with 182 more rows

另外:加权投资组合 return 美元:

monthly_returns_stocks %>% 
  mutate(investment.growth = 100 * (1 + cumsum(monthly.returns))) %>% 
  # get the last records per symbol
  filter(row_number() == max(row_number())) %>%  
  ungroup() %>% 
  # weigths in order of the stock order: FB, AMZN, NFLX, GOOG
  summarise(portfolio_return = sum(investment.growth * weights)) 

# A tibble: 1 x 1
  portfolio_return
             <dbl>
1            2111.