#r #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)
Что я делаю не так?
Я хочу получить инвестиционные значения с течением времени по каждому символу, предполагая, скажем, инвестиции в размере 100 долларов в момент времени 0. Таким образом, желаемый результат будет выглядеть примерно так…
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)
Комментарии:
1. Будет
group_by(symbol)
ли снова работать перед вычислением инвестиционной стоимости?2. Вы получаете (взвешенную) доходность портфеля, вот о чем вы просите. Чего вы, собственно, ожидаете? Потому что у вас уже есть индивидуальные ежемесячные доходы с первыми строками кода. Если это не то, что вы хотите, покажите пример того, какой результат вы ожидаете.
3. @RuiBarradas, нет, это не сработало!
4. @phiver, просто обновил вопрос, чтобы отразить это.
Ответ №1:
Если посмотреть на ожидаемый результат, то следующие строки кода приведут вас туда. Отправной точкой является ваш фрейм данных monthly_returns_stocks. В основном совокупная сумма ежемесячной прибыли 1, умноженная на инвестиции в размере 100 долларов. Измените 100 на 1000, если вы хотите увидеть рост инвестиций в 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
И в качестве дополнительного: взвешенная доходность портфеля в долларах:
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.