# 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
symbols <- c("DELL", "NVDA", "AMZN", "AAPL", "TSLA")
prices <- tq_get(x = symbols,
get = "stock.prices",
from = "2012-12-31",
to = "2024-12-31")
asset_returns_tbl <- prices %>%
group_by(symbol) %>%
tq_transmute(select = adjusted,
mutate_fun = periodReturn,
period ="monthly",
type = "log") %>%
slice(-1) %>%
ungroup() %>%
set_names(c("asset", "date", "returns"))
#Symbols
symbols <- asset_returns_tbl %>% distinct(asset) %>% pull()
symbols
## [1] "AAPL" "AMZN" "DELL" "NVDA" "TSLA"
#Weights
weights <- c(0.25, 0.25, 0.2, 0.2, 0.1)
weights
## [1] 0.25 0.25 0.20 0.20 0.10
w_tbl <- tibble(symbols, weights)
w_tbl
## # A tibble: 5 × 2
## symbols weights
## <chr> <dbl>
## 1 AAPL 0.25
## 2 AMZN 0.25
## 3 DELL 0.2
## 4 NVDA 0.2
## 5 TSLA 0.1
# ?tq_portfolio
portfolio_returns_tbl <- asset_returns_tbl %>%
tq_portfolio(assets_col = asset,
returns_col = returns,
weights = w_tbl,
reabalance_on = "months")
portfolio_returns_tbl
## # A tibble: 144 × 2
## date portfolio.returns
## <date> <dbl>
## 1 2013-01-31 -0.0145
## 2 2013-02-28 -0.00726
## 3 2013-03-28 0.0145
## 4 2013-04-30 0.0415
## 5 2013-05-31 0.117
## 6 2013-06-28 -0.00265
## 7 2013-07-31 0.0970
## 8 2013-08-30 0.0600
## 9 2013-09-30 0.0677
## 10 2013-10-31 -0.0167
## # ℹ 134 more rows
portfolio_sd_tidquant_builtin_percent <- portfolio_returns_tbl %>%
tq_performance(Ra = portfolio.returns,
performance_fun = table.Stats) %>%
select(Stdev) %>%
mutate(tq_sd = round(Stdev, 4) * 100)
# Mean of Portfolio Returns
portfolio_mean_tidquant_builtin_percent <-
mean(portfolio_returns_tbl$portfolio.returns)
portfolio_mean_tidquant_builtin_percent
## [1] 0.02984567
# 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() %>%
mutate(Stdev = Stdev *100, Mean = Mean * 100) %>%
# Add Portfolio Stdev
add_row(tibble(asset = "Portfolio",
Mean = portfolio_mean_tidquant_builtin_percent * 100,
Stdev = portfolio_sd_tidquant_builtin_percent$tq_sd))
sd_mean_tbl
## # A tibble: 6 × 3
## asset Mean Stdev
## <chr> <dbl> <dbl>
## 1 AAPL 1.91 7.79
## 2 AMZN 1.99 8.45
## 3 DELL 2.28 8.91
## 4 NVDA 4.3 12.2
## 5 TSLA 3.62 17.1
## 6 Portfolio 2.98 9.02
sd_mean_tbl %>%
ggplot(aes(x = Stdev, y = Mean, color = asset)) +
geom_point() +
# ggrepel::geom_text_repel(aes(label = asset))+ # This line no longer works!
# Use the standard geom_text() and nudge the labels slightly instead:
geom_text(aes(label = asset),
vjust = 1.5, # Nudges labels down
hjust = 0.5, # Centers labels horizontally
size = 4) # Sets text size
rolling_sd_tbl <- portfolio_returns_tbl %>%
tq_mutate(select = portfolio.returns,
mutate_fun = rollapply,
width = 24,
FUN = sd,
col_rename = "rolling_sd") %>%
na.omit() %>%
select(date, rolling_sd)
rolling_sd_tbl
## # A tibble: 121 × 2
## date rolling_sd
## <date> <dbl>
## 1 2014-12-31 0.0557
## 2 2015-01-30 0.0553
## 3 2015-02-27 0.0556
## 4 2015-03-31 0.0572
## 5 2015-04-30 0.0582
## 6 2015-05-29 0.0549
## 7 2015-06-30 0.0550
## 8 2015-07-31 0.0527
## 9 2015-08-31 0.0526
## 10 2015-09-30 0.0514
## # ℹ 111 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? Would you invest all your money in any of the individual stocks instead of the portfolio? Discuss both in terms of expected return and risk.
I expect my portfolio to out perform AAPL, AMZN, and DELL but not TSLA or NVDA. I would consider investing all of my money into Tesla and Nvidia because they have the highest volatility and average returns. This means that despite the larger risk, its usually a good bet to invest in these companies. Tesla poses the highest volatiliy of all of the stocks with Nvidia being 2nd.
If I had to pick one stock to invest in I would chose Nvidia because it has higher average returns than Tesla and less volatilty so there’s less risk of losing a severe amount of money with a good balance of returns.