# 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("NVDA", "AAPL", "GOOG", "AMD", "INTC")
prices <- tq_get(x = symbols,
get = "stock.prices",
from = "2012-12-31",
to = "2017-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
symbols <- asset_returns_tbl %>% distinct(asset) %>% pull()
symbols
## [1] "AAPL" "AMD" "GOOG" "INTC" "NVDA"
# 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 AAPL 0.25
## 2 AMD 0.25
## 3 GOOG 0.2
## 4 INTC 0.2
## 5 NVDA 0.1
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.00164
## 2 2013-02-28 -0.00108
## 3 2013-03-28 0.0152
## 4 2013-04-30 0.0583
## 5 2013-05-31 0.114
## 6 2013-06-28 -0.0279
## 7 2013-07-31 0.0103
## 8 2013-08-30 -0.0323
## 9 2013-09-30 0.0532
## 10 2013-10-31 0.0333
## # ℹ 50 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.386
Calculate_rolling_SharpeRatio <- function(data) {
rolling_SR <- SharpeRatio(R = data,
Rf = rfr,
FUN = "StdDev")
return(rolling_SR)
}
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: 37 × 2
## date rolling_sr
## <date> <dbl>
## 1 2014-12-31 0.367
## 2 2015-01-30 0.352
## 3 2015-02-27 0.419
## 4 2015-03-31 0.323
## 5 2015-04-30 0.249
## 6 2015-05-29 0.193
## 7 2015-06-30 0.184
## 8 2015-07-31 0.138
## 9 2015-08-31 0.146
## 10 2015-09-30 0.0994
## # ℹ 27 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("2016-06-01"), y = 0.5,
label = "This portfolio has done quite well 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 seen solid returns overtime but started out somewhat
rocky. With a structural break in early 2016 showing the lowest Sharpe
ratio of the graph but, steadily rising after this break peaking at 0.6
in late 2017. Although my portfolio only hit 0.6 one time showing it has
a weaker risk vs return then what the market would consider optimal.
This is likely because my portfolio is only invested into the tech
sector and only has five stocks in it. With a more diverse portfolio I
would expect my risk vs return to be higher than it is currently. As my
break point is in the same time frame as the one in the Code Along. It
is safe to say the break point came from large portfolio sell offs. This
is likely the effect of oil prices dropping heavily in 2016 resulting in
investors and market hedgers to sell off large stock positions in order
to pay off their losses in the oil industry. Along with other economic
factors the stock market saw a decline from 2015 going into 2016 across
the board.