# 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

#choose stocks 
symbols <- c("COST", "TSLA", "NFLX", "GOOG")

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     = "monthly", 
                 type      = "log") %>% 
    
    slice(-1) %>% 
    
    ungroup() %>% 
    
    set_names(c("asset", "date", "returns"))

3 Assign a weight to each asset

symbols <- asset_returns_tbl %>% distinct(asset) %>% pull()
symbols 
## [1] "COST" "GOOG" "NFLX" "TSLA"
# weights 
weights <- c(0.25, 0.25, 0.25, 0.25)
weights
## [1] 0.25 0.25 0.25 0.25
w_tbl <- tibble(symbols, weights)
w_tbl 
## # A tibble: 4 × 2
##   symbols weights
##   <chr>     <dbl>
## 1 COST       0.25
## 2 GOOG       0.25
## 3 NFLX       0.25
## 4 TSLA       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 = "months", 
                 col_rename = "returns") 

portfolio_returns_tbl
## # A tibble: 60 × 2
##    date       returns
##    <date>       <dbl>
##  1 2013-01-31 0.196  
##  2 2013-02-28 0.0265 
##  3 2013-03-28 0.0321 
##  4 2013-04-30 0.136  
##  5 2013-05-31 0.177  
##  6 2013-06-28 0.0108 
##  7 2013-07-31 0.110  
##  8 2013-08-30 0.0716 
##  9 2013-09-30 0.0707 
## 10 2013-10-31 0.00978
## # ℹ 50 more rows

5 Calculate Sharpe Ratio

#Define Risk Free Rate 
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.443

6 Plot: Rolling Sharpe Ratio

# Create a custom function to calculate rolling SR 
calculate_rolling_SharpeRatio <- function(data) {
    
   rolling_SR <-  SharpeRatio(R = data, 
                Rf = rfr, 
                FUN = "StdDev") 
    
    return(rolling_SR)
}

# Define Window 
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.545
##  2 2015-01-30      0.515
##  3 2015-02-27      0.526
##  4 2015-03-31      0.462
##  5 2015-04-30      0.453
##  6 2015-05-29      0.421
##  7 2015-06-30      0.420
##  8 2015-07-31      0.421
##  9 2015-08-31      0.353
## 10 2015-09-30      0.290
## # ℹ 27 more rows
#Plot 
rolling_sr_tbl %>% 
    
    ggplot(aes(x = date, y = rolling_sr)) + 
    geom_line(color = "cornflowerblue") + 
    
    #Labeling 
    labs(x = NULL, y = "Rolling Sharpe Ratio")  

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 February 2016. What do you think the reason is?
In my portfolio, there was a significant structural break during February 2016, where the Rolling Sharpe Ratio reached 0.08, from there the portfolio has increased in its performance, reaching about a 0.25 in Rolling Sharpe Ratio on 2018. I believe that my portfolio faced a structural break during February of 2016, due to the political uncertainty happening at the time. The Presidential Elections where occurring , and it became a close call between Democrat and Republicans candidates. Political uncertainty can affect the market, which I believe is what happened throughout the year of 2016.