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)