我想要得到每只股票的投资价值,但我认为我得到的是整体数据集。
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)
发布于 2021-10-05 13:34:07
看一下您的预期输出,下面几行代码可以帮助您实现这一点。STarting点就是你的monthly_returns_stocks data.frame。基本上,每月收益的累积和+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
作为额外的:以美元为单位的加权投资组合回报:
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.
https://stackoverflow.com/questions/69438555
复制相似问题