# 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
symbols <- c("AMZN", "MSFT", "HD", "WMT")
prices <- tq_get(x = symbols,
get = "stock.prices",
from = "2012-12-31",
to = "2022-10-26")
prices
## # A tibble: 9,892 × 8
## symbol date open high low close volume adjusted
## <chr> <date> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
## 1 AMZN 2012-12-31 12.2 12.6 12.1 12.5 68380000 12.5
## 2 AMZN 2013-01-02 12.8 12.9 12.7 12.9 65420000 12.9
## 3 AMZN 2013-01-03 12.9 13.0 12.8 12.9 55018000 12.9
## 4 AMZN 2013-01-04 12.9 13.0 12.8 13.0 37484000 13.0
## 5 AMZN 2013-01-07 13.1 13.5 13.1 13.4 98200000 13.4
## 6 AMZN 2013-01-08 13.4 13.4 13.2 13.3 60214000 13.3
## 7 AMZN 2013-01-09 13.4 13.5 13.3 13.3 45312000 13.3
## 8 AMZN 2013-01-10 13.4 13.4 13.1 13.3 57268000 13.3
## 9 AMZN 2013-01-11 13.3 13.4 13.2 13.4 48266000 13.4
## 10 AMZN 2013-01-14 13.4 13.7 13.4 13.6 85500000 13.6
## # … with 9,882 more rows
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"))
asset_returns_tbl
## # A tibble: 472 × 3
## asset date returns
## <chr> <date> <dbl>
## 1 AMZN 2013-01-31 0.0567
## 2 AMZN 2013-02-28 -0.00464
## 3 AMZN 2013-03-28 0.00837
## 4 AMZN 2013-04-30 -0.0488
## 5 AMZN 2013-05-31 0.0589
## 6 AMZN 2013-06-28 0.0311
## 7 AMZN 2013-07-31 0.0813
## 8 AMZN 2013-08-30 -0.0696
## 9 AMZN 2013-09-30 0.107
## 10 AMZN 2013-10-31 0.152
## # … with 462 more rows
# symbols
symbols <- asset_returns_tbl %>% distinct(asset) %>% pull()
symbols
## [1] "AMZN" "HD" "MSFT" "WMT"
# weights
weights <- c(0.30, 0.30, 0.15, 0.25)
weights
## [1] 0.30 0.30 0.15 0.25
w_tbl <- tibble(symbols, weights)
w_tbl
## # A tibble: 4 × 2
## symbols weights
## <chr> <dbl>
## 1 AMZN 0.3
## 2 HD 0.3
## 3 MSFT 0.15
## 4 WMT 0.25
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: 118 × 2
## date returns
## <date> <dbl>
## 1 2013-01-31 0.0510
## 2 2013-02-28 0.0117
## 3 2013-03-28 0.0295
## 4 2013-04-30 0.0317
## 5 2013-05-31 0.0397
## 6 2013-06-28 0.00350
## 7 2013-07-31 0.0295
## 8 2013-08-30 -0.0453
## 9 2013-09-30 0.0418
## 10 2013-10-31 0.0722
## # … with 108 more rows
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.309
# 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: 95 × 2
## date rolling_sr
## <date> <dbl>
## 1 2014-12-31 0.435
## 2 2015-01-30 0.403
## 3 2015-02-27 0.444
## 4 2015-03-31 0.378
## 5 2015-04-30 0.380
## 6 2015-05-29 0.342
## 7 2015-06-30 0.316
## 8 2015-07-31 0.354
## 9 2015-08-31 0.348
## 10 2015-09-30 0.311
## # … with 85 more rows
rolling_sr_tbl %>%
ggplot(aes(x = date, y = rolling_sr)) +
geom_line(color = "purple") +
# Labeling
labs(x = NULL, y = "Rolling Sharpe Ratio") +
annotate(geom = "text",
x = as.Date("2016-12-31"), y = 0.1,
label = str_glue("This portfolio did well from 2016 to 2018,
but has done poorly from 2021 to 2022."), color = "black", 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 November 2016. What do you think the reason is?
My portfolio did moderately well from 2016 to 2018. It was up and down through 2018 to 2017, and kept dropping to 2020. After 2020, my portfolio started to do well again until 2022, where it dropped drastically to where it is now.