# 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("MSFT", "NVDA", "JPM")
prices <- tq_get(x = symbols,
get = "stock.prices",
from = "2012-12-31")
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"))
symbols <- asset_returns_tbl %>% distinct(asset) %>% pull()
symbols
## [1] "JPM" "MSFT" "NVDA"
# weights
weights <- c(0.4, 0.3, 0.3)
weights
## [1] 0.4 0.3 0.3
w_tbl <- tibble(symbols, weights)
w_tbl
## # A tibble: 3 × 2
## symbols weights
## <chr> <dbl>
## 1 JPM 0.4
## 2 MSFT 0.3
## 3 NVDA 0.3
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: 132 × 2
## date returns
## <date> <dbl>
## 1 2013-01-31 0.0380
## 2 2013-02-28 0.0333
## 3 2013-03-28 0.000498
## 4 2013-04-30 0.0803
## 5 2013-05-31 0.0775
## 6 2013-06-28 -0.0256
## 7 2013-07-31 0.00859
## 8 2013-08-30 -0.0148
## 9 2013-09-30 0.0240
## 10 2013-10-31 0.0132
## # ℹ 122 more rows
# Define risk free rate
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.348
# 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: 109 × 2
## date rolling_sr
## <date> <dbl>
## 1 2014-12-31 0.636
## 2 2015-01-30 0.351
## 3 2015-02-27 0.389
## 4 2015-03-31 0.339
## 5 2015-04-30 0.344
## 6 2015-05-29 0.294
## 7 2015-06-30 0.284
## 8 2015-07-31 0.295
## 9 2015-08-31 0.301
## 10 2015-09-30 0.291
## # ℹ 99 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("2018-06-01"), y = 1,
label = "this portfolio has fallen since 2016",
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 November 2016. What do you think the reason is?
My portfolio has been very up and down over time. It appears to skoyrocket every two years, and then crash two years after that. The highest point was in 2018, and the lowest point was this past year.