# Load packages
# Core
library(tidyverse)
library(tidyquant)
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
# Choose stocks
symbols <- c("AAPL", "ROKU", "CL=F")
# Using tq_get() ----
prices <- tq_get(x = symbols,
get = "stock.prices",
from = "2012-12-31",
to = "2023-10-22")
asset_returns_tbl <- prices %>%
# Calculate monthly returns
group_by(symbol) %>%
tq_transmute(select = adjusted,
mutate_fun = periodReturn,
period = "monthly",
type = "log") %>%
slice (-1) %>%
ungroup() %>%
# rename
set_names(c("asset", "date", "returns"))
# period_returns = c("yearly", "quarterly", "monthly", "weekly")
symbols <- asset_returns_tbl %>% distinct(asset) %>% pull()
w <- c(0.15,
0.35,
0.50)
w_tbl <- tibble(symbols, w)
portfolio_returns_tbl <- asset_returns_tbl %>%
tq_portfolio(assets_col = asset,
returns_col = returns,
weights = w_tbl,
col_rename = "returns",
rebalance_on = "months")
portfolio_returns_tbl
## # A tibble: 130 × 2
## date returns
## <date> <dbl>
## 1 2013-01-31 -0.00237
## 2 2013-02-28 -0.0239
## 3 2013-03-28 0.0196
## 4 2013-04-30 -0.0138
## 5 2013-05-31 -0.00230
## 6 2013-06-28 -0.00184
## 7 2013-07-31 0.0492
## 8 2013-08-30 0.0207
## 9 2013-09-30 -0.0210
## 10 2013-10-31 -0.00716
## # ℹ 120 more rows
# Define risk free rate
rfr <- 0.0003
portfolio_SharpeRatio_tbl <- portfolio_returns_tbl %>%
tq_performance(Ra = returns,
Rf = rfr,
performance_fun = SharpeRatio,
FUN = "StdDev")
portfolio_SharpeRatio_tbl
## # A tibble: 1 × 1
## `StdDevSharpe(Rf=0%,p=95%)`
## <dbl>
## 1 0.0505
# Create a custom function to calculate rolling Sharpe Ratio
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: 107 × 2
## date rolling_sr
## <date> <dbl>
## 1 2014-12-31 -0.198
## 2 2015-01-30 -0.230
## 3 2015-02-27 -0.156
## 4 2015-03-31 -0.215
## 5 2015-04-30 -0.0688
## 6 2015-05-29 -0.0527
## 7 2015-06-30 -0.0634
## 8 2015-07-31 -0.216
## 9 2015-08-31 -0.237
## 10 2015-09-30 -0.249
## # ℹ 97 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("2019-06-01"), y = 0.5,
label = "This portfolio did quite well from 2017 - mid 2022.",
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 the early stages of 2016. What do you think the reason is?
My portfolio performed quite well from 2017 until the middle of 2022, but it has not performed great. Structural breaks: the first structural break was in the start of 2016, and the second structural break was in December 2022 / January 2023. I think the reason for the structural break in the code along assignment in the early stages of 2016 happened because of the recession that happened some months earlier, and this might be the reason for the structural break in my portfolio as well in early 2016. The recession led the global stock markets to fall hard, and the world economy took a hard hit.