如何使用 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.
我想获取每只股票的投资价值,但我认为我获取的是整个数据集。
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.