library(quantmod)
library(readr)
library(xts)
library(PerformanceAnalytics)
apple <- getSymbols("AAPL", from = "2000-12-31", to = "2016-08-01", auto.assign = FALSE, src="yahoo")
amazon <- getSymbols("AMZN", from = "2000-12-31", to = "2016-08-01", auto.assign = FALSE, src="yahoo")
amazon_monthly <- to.monthly(amazon)
head(amazon_monthly)
## amazon.Open amazon.High amazon.Low amazon.Close amazon.Volume
## Jan 2001 15.812 22.375 13.562 17.3125 210486800
## Feb 2001 17.188 17.188 9.938 10.1875 167374100
## Mar 2001 9.875 14.000 9.562 10.2300 167635900
## Apr 2001 10.330 18.160 8.100 15.7800 189780400
## May 2001 15.900 17.600 13.100 16.6900 144686700
## Jun 2001 17.220 17.920 11.200 14.1500 136695900
## amazon.Adjusted
## Jan 2001 17.3125
## Feb 2001 10.1875
## Mar 2001 10.2300
## Apr 2001 15.7800
## May 2001 16.6900
## Jun 2001 14.1500
amazon_returns <- Return.calculate(amazon_monthly$amazon.Close)
head(amazon_returns)
## amazon.Close
## Jan 2001 NA
## Feb 2001 -0.411552347
## Mar 2001 0.004171779
## Apr 2001 0.542521994
## May 2001 0.057667997
## Jun 2001 -0.152186989
amazon_returns <- amazon_returns[-1, ]
colnames(amazon_returns) <- "amazon"
head(amazon_returns)
## amazon
## Feb 2001 -0.411552347
## Mar 2001 0.004171779
## Apr 2001 0.542521994
## May 2001 0.057667997
## Jun 2001 -0.152186989
## Jul 2001 -0.117314488
apple_monthly <- to.monthly(apple)
head(amazon_monthly)
## amazon.Open amazon.High amazon.Low amazon.Close amazon.Volume
## Jan 2001 15.812 22.375 13.562 17.3125 210486800
## Feb 2001 17.188 17.188 9.938 10.1875 167374100
## Mar 2001 9.875 14.000 9.562 10.2300 167635900
## Apr 2001 10.330 18.160 8.100 15.7800 189780400
## May 2001 15.900 17.600 13.100 16.6900 144686700
## Jun 2001 17.220 17.920 11.200 14.1500 136695900
## amazon.Adjusted
## Jan 2001 17.3125
## Feb 2001 10.1875
## Mar 2001 10.2300
## Apr 2001 15.7800
## May 2001 16.6900
## Jun 2001 14.1500
apple_returns <- Return.calculate(apple_monthly$apple.Close)
head(amazon_returns)
## amazon
## Feb 2001 -0.411552347
## Mar 2001 0.004171779
## Apr 2001 0.542521994
## May 2001 0.057667997
## Jun 2001 -0.152186989
## Jul 2001 -0.117314488
apple_returns <- apple_returns[-1, ]
colnames(apple_returns) <- "apple"
head(apple_returns)
## apple
## Feb 2001 -0.1560700
## Mar 2001 0.2093155
## Apr 2001 0.1549614
## May 2001 -0.2173403
## Jun 2001 0.1654139
## Jul 2001 -0.1918278
# Create a grid
grid <- seq(from = 0, to = 1, by = 0.01)
# Initialize an empty vector for sharpe ratios
vsharpe <- rep(NA, times = 100 )
# Create a for loop to calculate Sharpe ratios
for(i in 1:length(grid)) {
weight <- grid[i]
preturns <- weight * apple_returns + (1 - weight) * amazon_returns
vsharpe[i] <- SharpeRatio.annualized(preturns)
}
# Plot weights and Sharpe ratio
plot(grid, vsharpe, xlab = "Weights", ylab= "Ann. Sharpe ratio")
abline(v = grid[vsharpe == max(vsharpe)], lty = 3)
