# Load packages

# Core
library(tidyverse)
library(tidyquant)

Goal

Visualize and examine changes in the underlying trend in the performance of your portfolio in terms of Sharpe Ratio.

Choose your stocks.

from 2012-12-31 to present

1 Import stock prices

symbols <- c("NVDA", "AAPL", "GOOG", "AMD", "INTC")
prices <- tq_get(x = symbols, 
                 get = "stock.prices",
                 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     = "monthly",
                 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" "AMD"  "GOOG" "INTC" "NVDA"
# 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 AMD        0.25
## 3 GOOG       0.2 
## 4 INTC       0.2 
## 5 NVDA       0.1

4 Build a portfolio

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

portfolio_returns_tbl
## # A tibble: 60 × 2
##    date        returns
##    <date>        <dbl>
##  1 2013-01-31 -0.00164
##  2 2013-02-28 -0.00108
##  3 2013-03-28  0.0152 
##  4 2013-04-30  0.0583 
##  5 2013-05-31  0.114  
##  6 2013-06-28 -0.0279 
##  7 2013-07-31  0.0103 
##  8 2013-08-30 -0.0323 
##  9 2013-09-30  0.0532 
## 10 2013-10-31  0.0333 
## # ℹ 50 more rows

5 Compute Sharpe Ratio

rfr <- 0.0003

portfolio_SharpeRatio_tbl <- portfolio_returns_tbl %>%
    
    tq_performance(Ra = returns, 
                   performance_fun = SharpeRatio,
                   Rf              = rfr,
                   FUN             = "StdDev")

portfolio_SharpeRatio_tbl 
## # A tibble: 1 × 1
##   `StdDevSharpe(Rf=0%,p=95%)`
##                         <dbl>
## 1                       0.386

6 Plot: Rolling Sharpe Ratio

Calculate_rolling_SharpeRatio <- function(data) {
    
    rolling_SR <- SharpeRatio(R = data,
                Rf = rfr,
                FUN = "StdDev")
    
    return(rolling_SR)
}

window <- 24

# Transform data: calculate rolling Sharpe ratio
rolling_sr_tbl <- portfolio_returns_tbl %>%
    
    tq_mutate(select = returns,
              mutate_fun = rollapply, 
              width = window,
              FUN = Calculate_rolling_SharpeRatio,
              col_rename = "rolling_sr") %>%
    
    select(-returns) %>%
    na.omit()

rolling_sr_tbl 
## # A tibble: 37 × 2
##    date       rolling_sr
##    <date>          <dbl>
##  1 2014-12-31     0.367 
##  2 2015-01-30     0.352 
##  3 2015-02-27     0.419 
##  4 2015-03-31     0.323 
##  5 2015-04-30     0.249 
##  6 2015-05-29     0.193 
##  7 2015-06-30     0.184 
##  8 2015-07-31     0.138 
##  9 2015-08-31     0.146 
## 10 2015-09-30     0.0994
## # ℹ 27 more rows
rolling_sr_tbl %>%
    
    ggplot(aes(x = date, y = rolling_sr)) +
    geom_line(color = "cornflowerblue") +

    # Labeling
    labs(x = NULL, y = "Rolling Sharpe Ratio") +
    
    annotate(geom = "text", 
             x = as.Date("2016-06-01"), y = 0.5,
             label = "This portfolio has done quite well since 2016.",
             color = "red", size = 5) 

How has your portfolio performed over time? Provide dates of the structural breaks, if any. The Code Along Assignment 9 had one structural break in November 2016. What do you think the reason is?
My portfolio has seen solid returns overtime but started out somewhat rocky. With a structural break in early 2016 showing the lowest Sharpe ratio of the graph but, steadily rising after this break peaking at 0.6 in late 2017. Although my portfolio only hit 0.6 one time showing it has a weaker risk vs return then what the market would consider optimal. This is likely because my portfolio is only invested into the tech sector and only has five stocks in it. With a more diverse portfolio I would expect my risk vs return to be higher than it is currently. As my break point is in the same time frame as the one in the Code Along. It is safe to say the break point came from large portfolio sell offs. This is likely the effect of oil prices dropping heavily in 2016 resulting in investors and market hedgers to sell off large stock positions in order to pay off their losses in the oil industry. Along with other economic factors the stock market saw a decline from 2015 going into 2016 across the board.