# 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

symbols <- c("NVDA", "AAPL", "NFLX", "MSFT", "TSLA")
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 (change the weigting scheme)

# Symbols
symbol <- asset_returns_tbl %>% distinct(asset) %>% pull()
symbols
## [1] "NVDA" "AAPL" "NFLX" "MSFT" "TSLA"
# 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 NVDA       0.25
## 2 AAPL       0.25
## 3 NFLX       0.2 
## 4 MSFT       0.2 
## 5 TSLA       0.1

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.0926
##  2 2013-02-28  0.0258
##  3 2013-03-28  0.0195
##  4 2013-04-30  0.109 
##  5 2013-05-31  0.0998
##  6 2013-06-28 -0.0456
##  7 2013-07-31  0.0755
##  8 2013-08-30  0.0906
##  9 2013-09-30  0.0378
## 10 2013-10-31  0.0188
## # … with 50 more rows

5 Compute 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.455

6 Plot: Rolling 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")) +
    annotate(geom = "text", x = as.Date("2016-07-01"), y = 3,
             size = 5, color = "red",
             label = str_glue("Slight Increase to Downside Risk Over the Course of 3 Years")) 

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.

The downside risk of my portfolio has very slowly increased. Over the span of 3 years the downside risk a little over single Kurtosis point. Back in January 2015 the original Kurtosis score was about -1.1, fast forward to January 2018 the Kurtosis score has risen to -0.1 roughly. I don’t believe that these numbers are anything to be afraid of, not yet at least. My portfolio skewness -0.25 last week which isn’t very good. But the slow increase in Kurtosis seems inevitable when you see my portfolio skewness. Overall the has downside risk of my portfolio has increased, but I don’t think it is anything to stress about yet.