# Load packages

# Core
library(tidyverse)
library(tidyquant)

Goal

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

1 Import stock prices

symbols <- c("NKE", "NFLX", "AAPL")
prices <- tq_get(x = symbols, 
                 from = "2012-12-31",
                 to   = "2017-12-31")

2 Convert prices to returns (monthly)

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" "NFLX" "NKE"
# weights
weights <- c(0.25, 0.5, 0.25)
weights
## [1] 0.25 0.50 0.25
w_tbl <- tibble(symbols, weights)
w_tbl
## # A tibble: 3 × 2
##   symbols weights
##   <chr>     <dbl>
## 1 AAPL       0.25
## 2 NFLX       0.5 
## 3 NKE        0.25

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.347 
##  2 2013-06-28            0.0485
##  3 2013-09-30            0.272 
##  4 2013-12-31            0.150 
##  5 2014-03-31           -0.0469
##  6 2014-06-30            0.175 
##  7 2014-09-30            0.0690
##  8 2014-12-31           -0.0957
##  9 2015-03-31            0.142 
## 10 2015-06-30            0.250 
## 11 2015-09-30            0.0498
## 12 2015-12-31            0.0452
## 13 2016-03-31           -0.0496
## 14 2016-06-30           -0.113 
## 15 2016-09-30            0.0694
## 16 2016-12-30            0.113 
## 17 2017-03-31            0.167 
## 18 2017-06-30            0.0221
## 19 2017-09-29            0.0834
## 20 2017-12-29            0.100

5 Compute Standard Deviation

portfolio_sd_tidyquant_builtin_percent <- portfolio_returns_tbl %>%
    
    tq_performance(Ra = portfolio.returns, 
                   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.119 0.119
# Mean of portfolio returns
portfolio_mean_tidyquant_builtin_percent <- mean(portfolio_returns_tbl$portfolio.returns)

portfolio_mean_tidyquant_builtin_percent
## [1] 0.08997243

6 Plot: Expected Returns versus Risk

# 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.045  0.119 
## 2 NFLX      0.134  0.217 
## 3 NKE       0.0474 0.0868
## 4 Portfolio 0.0900 0.119
sd_mean_tbl %>%
    
    ggplot(aes(x = Stdev, y = Mean, color = asset)) + 
    geom_point() + 
    ggrepel::geom_text_repel(aes(label = asset))

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 say that my portfolio average is in a good place, the left corner is where you want your stocks to be at and my portfolio average lands in that region, this is because I have two stocks in the bottom left hand corner (which means not much risk or reward involved in the stocks). Netflix however is in the top right of my graph which means that it is a high risk high reward stock, as the standard deviation (how far it varies from the mean) is more than .20 however the mean itself is also very high at around .13, this makes for a high risk and high reward, as having a big standard deviation is bad but a higher mean is good. My portfolio is only where it’s at because of the weight of each stock, with “NKE” and “AAPL” both with weights of .25 and “NFLX” with a weight of .50 which means that half of my portfolio is “NFLX”. I probably wouldn’t put all of my money towards one of these stocks in particular, however if I could guarentee that return on my portfolio I would consider investing how I have it set up, as “Portfolio” is in a good spot on the graph.