# Load packages
# Core
library(tidyverse)
library(tidyquant)
Visualize expected returns and risk to make it easier to compare the performance of multiple assets and portfolios.
Choose your stocks.
from 2012-12-31 to 2017-12-31
# Choose stocks
symbols <- c("ROKU", "AAPL", "CL=F")
# Using tq_get() ----
prices <- tq_get(x = symbols,
get = "stock.prices",
from = "2012-12-31",
to = "2017-12-31")
asset_returns_tbl <- prices %>%
# Calculate monthly returns
group_by(symbol) %>%
tq_transmute(select = adjusted,
mutate_fun = periodReturn,
period = "monthly",
type = "log") %>%
slice (-1) %>%
ungroup() %>%
# rename
set_names(c("asset", "date", "returns"))
# period_returns = c("yearly", "quarterly", "monthly", "weekly")
symbols <- asset_returns_tbl %>% distinct(asset) %>% pull()
w <- c(0.35,
0.45,
0.20)
w_tbl <- tibble(symbols, w)
portfolio_returns_rebalanced_monthly_tbl <- asset_returns_tbl %>%
tq_portfolio(assets_col = asset,
returns_col = returns,
weights = w_tbl,
col_rename = "returns",
rebalance_on = "months")
portfolio_returns_rebalanced_monthly_tbl
## # A tibble: 60 × 2
## date returns
## <date> <dbl>
## 1 2013-01-31 -0.0275
## 2 2013-02-28 -0.0348
## 3 2013-03-28 0.0256
## 4 2013-04-30 -0.0177
## 5 2013-05-31 0.000528
## 6 2013-06-28 -0.0221
## 7 2013-07-31 0.0841
## 8 2013-08-30 0.0392
## 9 2013-09-30 -0.0304
## 10 2013-10-31 0.00525
## # ℹ 50 more rows
# write_rds(portfolio_returns_rebalanced_monthly_tbl,
# "00_data/Ch03_portfolio_returns_rebalanced_monthly_tbl.rds")
portfolio_sd_tidyquant_builtin_percent <- portfolio_returns_rebalanced_monthly_tbl %>%
tq_performance(Ra = returns,
Rb = NULL,
performance_fun = table.Stats) %>%
select(Stdev) %>%
mutate(tq_sd = round(Stdev, 4))
portfolio_sd_tidyquant_builtin_percent
## # A tibble: 1 × 2
## Stdev tq_sd
## <dbl> <dbl>
## 1 0.0517 0.0517
# Mean of portfolio returns
portfolio_mean_tidyquant_builtin_percent <-
mean(portfolio_returns_rebalanced_monthly_tbl$returns)
portfolio_mean_tidyquant_builtin_percent
## [1] 0.004343072
# Expected Returns vs Risk
sd_mean_tbl <- asset_returns_tbl %>%
group_by(asset) %>%
tq_performance(Ra = returns,
performance_fun = table.Stats) %>%
select(Mean = ArithmeticMean, Stdev) %>%
ungroup() %>%
# Add portfolio sd
add_row(tibble(asset = "Portfolio",
Mean =
portfolio_mean_tidyquant_builtin_percent,
Stdev =
portfolio_sd_tidyquant_builtin_percent$tq_sd))
sd_mean_tbl
## # A tibble: 4 × 3
## asset Mean Stdev
## <chr> <dbl> <dbl>
## 1 AAPL 0.015 0.0695
## 2 CL=F -0.007 0.0865
## 3 ROKU 0.223 0.518
## 4 Portfolio 0.00434 0.0517
sd_mean_tbl %>%
ggplot(aes(x = Stdev, y = Mean, color = asset)) +
geom_point() +
ggrepel::geom_text_repel(aes(label = asset))
rolling_sd_tbl <-portfolio_returns_rebalanced_monthly_tbl %>%
tq_mutate(select = returns,
mutate_fun = rollapply,
width = 24,
FUN = sd,
col_rename = "rolling_sd") %>%
na.omit() %>%
select(date, rolling_sd)
rolling_sd_tbl
## # A tibble: 37 × 2
## date rolling_sd
## <date> <dbl>
## 1 2014-12-31 0.0420
## 2 2015-01-30 0.0419
## 3 2015-02-27 0.0427
## 4 2015-03-31 0.0427
## 5 2015-04-30 0.0478
## 6 2015-05-29 0.0479
## 7 2015-06-30 0.0478
## 8 2015-07-31 0.0505
## 9 2015-08-31 0.0496
## 10 2015-09-30 0.0501
## # ℹ 27 more rows
rolling_sd_tbl %>%
ggplot(aes(x = date, y = rolling_sd)) +
geom_line(color = "cornflowerblue") +
# Formatting
scale_y_continuous(labels = scales::percent_format()) +
# Labeling
labs(x = NULL,
y = NULL,
title = "24-Month Rolling Volatility") +
theme(plot.title = element_text(hjust = 0.5))
How should you expect your portfolio to perform relative to its assets in the portfolio? I do not expect my portfolio to perform greatly relative to its assets. The portfolio does not have a combined large risk, which means that the return will most likely not be great.
Would you invest all your money in any of the individual stocks instead of the portfolio? Personally, I would never invest all my money in one individual stock instead of my entire portfolio, because the risk is too big. Instead, I would split my money up and invest in all the stocks, because this would result in a smaller risk. I don’t have too much money to waste, which means that I will not be taking the biggest risks when it comes to investing. Additionally, investing in multiple stocks will more often than not result in a greater return than investing in one individual stock, unless you are extremely lucky with the one stock you decide to invest in. However, if I was to only invest in one individual stock, it would be Roku, because Roku is the most exciting product right now, and it is the one with largest risk and possible returns. Discuss both in terms of expected return and risk.