# 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("RTX", "GD", "LMT", "BA")
stock_prices <- tq_get(x = symbols,
get = "stock.prices",
from = "2012-12-31",
to = "2017-12-31")
ar_table <- stock_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 <- ar_table %>% distinct(asset) %>% pull()
symbols
## [1] "BA" "GD" "LMT" "RTX"
# weights
weights <- c(0.35, 0.30, 0.20, 0.15)
weights
## [1] 0.35 0.30 0.20 0.15
w_tbl <- tibble(symbols, weights)
w_tbl
## # A tibble: 4 × 2
## symbols weights
## <chr> <dbl>
## 1 BA 0.35
## 2 GD 0.3
## 3 LMT 0.2
## 4 RTX 0.15
portfolio_returns_table <- ar_table %>%
tq_portfolio(assets_col = asset,
returns_col = returns,
weights = w_tbl,
rebalance_on = "months")
portfolio_returns_table
## # A tibble: 60 × 2
## date portfolio.returns
## <date> <dbl>
## 1 2013-01-31 -0.0224
## 2 2013-02-28 0.0349
## 3 2013-03-28 0.0727
## 4 2013-04-30 0.0405
## 5 2013-05-31 0.0642
## 6 2013-06-28 0.0184
## 7 2013-07-31 0.0764
## 8 2013-08-30 -0.0114
## 9 2013-09-30 0.0773
## 10 2013-10-31 0.0423
## # … with 50 more rows
portfolio_sd <- portfolio_returns_table %>%
tq_performance(Ra = portfolio.returns,
performance_fun = table.Stats) %>%
select(Stdev) %>%
mutate(tq_sd = round(Stdev, 4))
portfolio_sd
## # A tibble: 1 × 2
## Stdev tq_sd
## <dbl> <dbl>
## 1 0.0367 0.0367
# Mean of portfolio returns
portfolio_mean <- mean(portfolio_returns_table$portfolio.returns)
portfolio_mean
## [1] 0.02068666
sd_mean_table <- ar_table %>%
group_by(asset) %>%
tq_performance(Ra = returns,
performance_fun = table.Stats) %>%
select(Mean = ArithmeticMean, Stdev) %>%
ungroup() %>%
# Add Porfolio SD
add_row(tibble(asset = "Portfolio",
Mean = portfolio_mean,
Stdev = portfolio_sd$tq_sd))
sd_mean_table
## # A tibble: 5 × 3
## asset Mean Stdev
## <chr> <dbl> <dbl>
## 1 BA 0.0249 0.0618
## 2 GD 0.0197 0.0422
## 3 LMT 0.0234 0.0387
## 4 RTX 0.0093 0.0468
## 5 Portfolio 0.0207 0.0367
sd_mean_table %>%
ggplot(aes(x = Stdev, y = Mean, color = asset)) +
geom_point() +
ggrepel::geom_text_repel(aes(label = asset))
rolling_sd_table <- portfolio_returns_table %>%
tq_mutate(select = portfolio.returns,
mutate_fun = rollapply,
width = 24,
FUN = sd,
col_rename = "rolling_sd") %>%
na.omit() %>%
select(date, rolling_sd)
rolling_sd_table
## # A tibble: 37 × 2
## date rolling_sd
## <date> <dbl>
## 1 2014-12-31 0.0338
## 2 2015-01-30 0.0322
## 3 2015-02-27 0.0324
## 4 2015-03-31 0.0321
## 5 2015-04-30 0.0341
## 6 2015-05-29 0.0330
## 7 2015-06-30 0.0336
## 8 2015-07-31 0.0316
## 9 2015-08-31 0.0353
## 10 2015-09-30 0.0330
## # … with 27 more rows
rolling_sd_table %>%
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 = .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 would expect my portfolio to perform not that well to be honest. While the standard deviation may be low, the mean is fairly high. The market would be have to be in perfect conditions for this portfolio to work. It probably does not halp that all of these stocks are from the aerospace and defense sector. When one moves, the rest will most likely move in the same direction. If I had to invest all my money, I would put it into Raytheon (RTX). This stock has a moderate standard deviation and a low mean. This means that the risk is moderate, which also means that the potential return is moderate. The Boeing (BA) stock is kind of an outlier in this portfolio. This stock is way to risky and throws off the balance of the portfolio even being only 15% of the portfolio