library(quantmod)
## Loading required package: xts
## Loading required package: zoo
## 
## Attaching package: 'zoo'
## The following objects are masked from 'package:base':
## 
##     as.Date, as.Date.numeric
## Registered S3 method overwritten by 'xts':
##   method     from
##   as.zoo.xts zoo
## Loading required package: TTR
## Registered S3 method overwritten by 'quantmod':
##   method            from
##   as.zoo.data.frame zoo
## Version 0.4-0 included new data defaults. See ?getSymbols.
library(plyr)
tickers <- c("AAPL", "AMZN", "MSFT")
getSymbols(tickers, from = "2007-01-01", to = "2018-12-31")
## 'getSymbols' currently uses auto.assign=TRUE by default, but will
## use auto.assign=FALSE in 0.5-0. You will still be able to use
## 'loadSymbols' to automatically load data. getOption("getSymbols.env")
## and getOption("getSymbols.auto.assign") will still be checked for
## alternate defaults.
## 
## This message is shown once per session and may be disabled by setting 
## options("getSymbols.warning4.0"=FALSE). See ?getSymbols for details.
## [1] "AAPL" "AMZN" "MSFT"
data.env<-new.env()
l_ply(tickers, function(sym) try(getSymbols(sym, env=data.env), silent=T))
stocks <- tickers[tickers %in% ls(data.env)]
stocks
## [1] "AAPL" "AMZN" "MSFT"
data <- xts()
data
## Data:
## numeric(0)
## 
## Index:
## integer(0)
#i=1
for(i in seq_along(stocks)) {
  symbol <- stocks[i]
  data <- merge(data, Ad(get(symbol, envir=data.env)))
}
AMZN.ad<-Ad(AMZN)
head(AMZN.ad)
##            AMZN.Adjusted
## 2007-01-03         38.70
## 2007-01-04         38.90
## 2007-01-05         38.37
## 2007-01-08         37.50
## 2007-01-09         37.78
## 2007-01-10         37.15
tickers = c("AAPL", "MSFT", "AMZN")
getSymbols(tickers, from = "2010-01-01", to = "2012-12-31" , auto.assign = TRUE)
## [1] "AAPL" "MSFT" "AMZN"
data = new.env()
getSymbols(tickers, from = "2010-01-01", to = "2012-12-31", env = data , auto.assign = TRUE)
## [1] "AAPL" "MSFT" "AMZN"
AMZN.ad<-Ad(AMZN)
head(AMZN.ad)
##            AMZN.Adjusted
## 2010-01-04        133.90
## 2010-01-05        134.69
## 2010-01-06        132.25
## 2010-01-07        130.00
## 2010-01-08        133.52
## 2010-01-11        130.31
class(AMZN.ad)
## [1] "xts" "zoo"
AAPL.ad<-Ad(AAPL)
head(AAPL.ad)
##            AAPL.Adjusted
## 2010-01-04      26.53848
## 2010-01-05      26.58437
## 2010-01-06      26.16151
## 2010-01-07      26.11315
## 2010-01-08      26.28675
## 2010-01-11      26.05486
class(AAPL.ad)
## [1] "xts" "zoo"
MSFT.ad<-Ad(MSFT)
head(MSFT.ad)
##            MSFT.Adjusted
## 2010-01-04      24.29437
## 2010-01-05      24.30222
## 2010-01-06      24.15307
## 2010-01-07      23.90189
## 2010-01-08      24.06673
## 2010-01-11      23.76060
class(MSFT.ad)
## [1] "xts" "zoo"
merged_firm3_36months<-merge(Ad(AMZN.ad), Ad(AAPL.ad), Ad(MSFT.ad))
head(merged_firm3_36months)
##            AMZN.Adjusted AAPL.Adjusted MSFT.Adjusted
## 2010-01-04        133.90      26.53848      24.29437
## 2010-01-05        134.69      26.58437      24.30222
## 2010-01-06        132.25      26.16151      24.15307
## 2010-01-07        130.00      26.11315      23.90189
## 2010-01-08        133.52      26.28675      24.06673
## 2010-01-11        130.31      26.05486      23.76060
colnames(merged_firm3_36months)<-c("AMZN", "AAPL", "MSFT")
head(merged_firm3_36months)
##              AMZN     AAPL     MSFT
## 2010-01-04 133.90 26.53848 24.29437
## 2010-01-05 134.69 26.58437 24.30222
## 2010-01-06 132.25 26.16151 24.15307
## 2010-01-07 130.00 26.11315 23.90189
## 2010-01-08 133.52 26.28675 24.06673
## 2010-01-11 130.31 26.05486 23.76060
AMZN_36monthly_return<-monthlyReturn(AMZN.ad, subset=NULL, type='arithmetic',
                                     leading=TRUE, from = "2010-01-01", to = "2012-12-31" )
AAPL_36monthly_return<-monthlyReturn(AAPL.ad, subset=NULL, type='arithmetic',
                                     leading=TRUE, from = "2010-01-01", to = "2012-12-31" )
MSFT_36monthly_return<-monthlyReturn(MSFT.ad, subset=NULL, type='arithmetic',
                                   leading=TRUE, from = "2010-01-01", to = "2012-12-31" )
firm3_36monthly_return<-monthlyReturn(merged_firm3_36months, subset=NULL, type='arithmetic',
                                      leading=TRUE, from = "2010-01-01", to = "2012-12-31" )
month36<-merge(AMZN_36monthly_return, MSFT_36monthly_return, AAPL_36monthly_return)
library(fBasics)
## Loading required package: timeDate
## Loading required package: timeSeries
## 
## Attaching package: 'timeSeries'
## The following object is masked _by_ '.GlobalEnv':
## 
##     MSFT
## The following object is masked from 'package:zoo':
## 
##     time<-
## 
## Attaching package: 'fBasics'
## The following object is masked from 'package:TTR':
## 
##     volatility

MVP

Sigma = cov(month36)
std = sqrt(diag(Sigma))
ones = rep(1,3)
one.vec = matrix(ones, ncol=1)
a = inv(Sigma)%*%one.vec
b = t(one.vec)%*%a
mvp.w =a / as.numeric(b)
mvp.w
##                        [,1]
## monthly.returns   0.2324220
## monthly.returns.1 0.5327565
## monthly.returns.2 0.2348215
mvp.ret<-sum((mvp.w)*colMeans(merged_firm3_36months))
mvp.ret
## [1] 74.73155