# Load packages

# Core
library(tidyverse)
library(tidyquant)

Goal

Visualize and examine changes in the underlying trend in the downside risk of your portfolio in terms of kurtosis.

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

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 Kurtosis

portfolio_kurt_tidyquant_builtin_percent <- portfolio_returns_tbl %>% 

   tq_performance(Ra = returns, 
                  performance_fun = table.Stats) %>% 
    
       select(Kurtosis)  

portfolio_kurt_tidyquant_builtin_percent
## # A tibble: 1 Ă— 1
##   Kurtosis
##      <dbl>
## 1    0.621

6 Plot

Rolling 24-Months Kurtosis

# Assign a value for window 
window = 24 

# Transform data: calculate 24 month rolling kurtosis 
rolling_kurt_tbl <- portfolio_returns_tbl %>% 
    
    tq_mutate(select = returns, 
              mutate_fun = rollapply, 
              width = window, 
              FUN = kurtosis, 
              col_rename = "kurt") %>% 
    na.omit() %>% 
    select(-returns) 

# Plot 
rolling_kurt_tbl %>% 
    
    ggplot(aes(x = date, y = kurt)) +
    geom_line(color = "cornflowerblue") + 
    
    # Formatting 
    scale_y_continuous(breaks = seq(-1, 4, 0.5)) + 
    scale_x_date(breaks = scales::pretty_breaks(n =7)) + 
    theme(plot.title = element_text(hjust = 0.5)) + 
    
    # Labeling 
    labs(x = NULL, 
         y = "Kurtosis", 
         title = paste0("Rolling" , window , "Month Kurtosis"))  

Has the downside risk of your portfolio increased or decreased over time? Explain using the plot you created. You may also refer to the skewness of the returns distribution you plotted in the previous assignment.

My portfolio has displayed an increase in Kurtosis throughout its life, with a significant increase in Kurtosis from July 2017, to January 2018. This significant increase, alongside the skewness of returns of my portfolio being positive but about 0.05, indicates a positive almost symmetrical distribution. This can tell us that the downside risk of the portfolio has increased overtime.

Link to the previous assignment’s skewness of returns distribution graph: https://rpubs.com/NahomyP/apply7