# Load packages
# Core
library(tidyverse)
library(tidyquant)
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
symbols <- c("X", "CMC", "ZEUS", "GOOG", "TSLA")
prices <- tq_get(x = symbols,
get = "stock.prices",
from = "2012-12-31")
asset_return_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"))
symbols <- asset_return_tbl %>% distinct(asset) %>% pull()
symbols
## [1] "CMC" "GOOG" "TSLA" "X" "ZEUS"
weights <- c(0.3, 0.2, 0.3, 0.1, 0.10)
weights
## [1] 0.3 0.2 0.3 0.1 0.1
w_tbl <- tibble(symbols, weights)
w_tbl
## # A tibble: 5 × 2
## symbols weights
## <chr> <dbl>
## 1 CMC 0.3
## 2 GOOG 0.2
## 3 TSLA 0.3
## 4 X 0.1
## 5 ZEUS 0.1
portfolio_returns_tbl <- asset_return_tbl %>%
tq_portfolio(assets_col = asset,
returns_col = returns,
weights = w_tbl,
rebalance_on = "months",
col_rename = "returns")
portfolio_returns_tbl
## # A tibble: 143 × 2
## date returns
## <date> <dbl>
## 1 2013-01-31 0.0685
## 2 2013-02-28 -0.0250
## 3 2013-03-28 0.0228
## 4 2013-04-30 0.0651
## 5 2013-05-31 0.228
## 6 2013-06-28 0.0130
## 7 2013-07-31 0.0974
## 8 2013-08-30 0.0440
## 9 2013-09-30 0.107
## 10 2013-10-31 0.0170
## # ℹ 133 more rows
portfolio_kurt_tidyquant_builitin_percent <- portfolio_returns_tbl %>%
tq_performance(Ra = returns,
performance_fun = table.Stats) %>%
select(Kurtosis)
portfolio_kurt_tidyquant_builitin_percent
## # A tibble: 1 × 1
## Kurtosis
## <dbl>
## 1 0.215
window = 24
rolling_kurt_tbl <- portfolio_returns_tbl %>%
tq_mutate(select = returns,
mutate_fun = rollapply,
width = window,
FUN = kurtosis,
col_rename = "kurt") %>%
na.omit() %>%
select(-returns)
rolling_kurt_tbl %>%
ggplot(aes(x = date, y = kurt)) +
geom_line(color = "cornflowerblue") +
scale_y_continuous(breaks = seq(-1, 4, .5)) +
scale_x_date(breaks = scales::pretty_breaks(n = 7)) +
theme(plot.title = element_text(hjust = .5)) +
labs(x = NULL,
y = "Kurtosis",
title = paste("Rolling", window, "month Kurtosis")) +
annotate(geom = "text", x = as.Date("2021-12-01"), y = 3,
size = 4, color = "red",
label = str_glue("Downside risk rose toward the begining of 2016
then lowered after about a year
and again skyrocketed in 2018-2019 "))
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.
It has increased slightly over time but has fluxuated a but especially around 2016-2017 and 2018-2019. An increase in kurtosis means higher deviation and risk.