title: “Apply it to your data 5”

subtitle: “What return should you expect from the portfolio in a typical quarter?”

author: “Byron Hartley”

date: “2022-10-07”

# Load packages

# Core
library(tidyverse)
library(tidyquant)

Goal

Collect individual returns into a portfolio by assigning a weight to each stock

Choose your stocks.

from 2012-12-31 to 2017-12-31

1 Import stock prices

symbols <- c ("PANW", "NVDA", "AAPL")

prices <- tq_get(x = symbols,
                 get = "stockprices",
                 from = "2012-12-31",
                 to = "2017-12-31")

2 Convert prices to returns (quarterly)

asset_returns_tbl <- prices %>% 
  
  group_by(symbol) %>%
  
  tq_transmute(select = adjusted, 
               mutate_fun = periodReturn, 
               period = "quarterly", 
               type = "log") %>%
  
  slice(-1) %>%
  
  ungroup() %>%
  
  set_names(c("asset", "date", "returns"))

3 Assign a weight to each asset (change the weigting scheme)

# symbols
symbols <- asset_returns_tbl %>% distinct(asset) %>% pull()
symbols
## [1] "AAPL" "NVDA" "PANW"
# weights
weights <- c(0.33, 0.33, 0.33)
weights 
## [1] 0.33 0.33 0.33
w_tbl <- tibble(symbols, weights)
w_tbl 
## # A tibble: 3 × 2
##   symbols weights
##   <chr>     <dbl>
## 1 AAPL       0.33
## 2 NVDA       0.33
## 3 PANW       0.33

4 Build a portfolio

# ?tq_portfolio

portfolio_returns_tbl <- asset_returns_tbl %>%
  
  tq_portfolio(assets_col = asset,
               returns_col = returns, 
               weights = w_tbl, 
               rebalance_on = "quarters")

portfolio_returns_tbl
## # A tibble: 20 × 2
##    date       portfolio.returns
##    <date>                 <dbl>
##  1 2013-03-28           -0.0234
##  2 2013-06-28           -0.0999
##  3 2013-09-30            0.126 
##  4 2013-12-31            0.142 
##  5 2014-03-31            0.0841
##  6 2014-06-30            0.144 
##  7 2014-09-30            0.0799
##  8 2014-12-31            0.134 
##  9 2015-03-31            0.114 
## 10 2015-06-30            0.0514
## 11 2015-09-30            0.0225
## 12 2015-12-31            0.0909
## 13 2016-03-31            0.0149
## 14 2016-06-30           -0.0431
## 15 2016-09-30            0.268 
## 16 2016-12-30            0.0765
## 17 2017-03-31            0.0453
## 18 2017-06-30            0.153 
## 19 2017-09-29            0.118 
## 20 2017-12-29            0.0603

5 Plot: Portfolio Histogram and Density

What return should you expect from the portfolio in a typical quarter?

portfolio_returns_tbl %>%
  
  ggplot(mapping = aes(x = date, y = portfolio.returns)) +
  geom_point(color = "cornflowerblue") +
  
  # Formatting
  scale_x_date(date_breaks = "1 year", 
               date_labels = "%Y") + 
  
  # Labeling
  labs(y = "monthly returns", 
       x = NULL, 
       title = "Portfolio Returns Scatter")

Histogram

portfolio_returns_tbl %>%
  
  ggplot(mapping = aes(x = portfolio.returns)) +
  geom_histogram(fill = "cornflowerblue", binwidth = 0.05) +
  
  labs(x = "returns", 
       title = "Portfolio Returns Distribution")

Histogram & Dentisy plot

portfolio_returns_tbl %>%
  
  ggplot(mapping = aes(x = portfolio.returns)) +
  geom_histogram(fill = "cornflowerblue", binwidth = 0.01) +
  geom_density() +
  
  # Formatting
  scale_x_continuous(labels = scales::percent_format()) +
  
  labs(x = "returns", 
       y = "distribution",
       title = "Portfolio Histogram & Density")

What return should you expect from the portfolio in a typical quarter?

The portfolio generated an average quarterly return of approximately 7.33%. This figure comes from calculating the mean of the 20 quarterly returns recorded between 2013 and 2017. Because the returns are measured using logarithmic calculations, their arithmetic mean is roughly 7.33% per quarter.