#2. Use 3 years in sample data to calculate MVP returns and standard deviation each month. (monthly returns)
rm(list=ls())
#install.packages('quantmod')
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
## Loading required package: TTR
## Version 0.4-0 included new data defaults. See ?getSymbols.
getSymbols("GOOG", auto.assign = TRUE)
## '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] "GOOG"
tickers = c("GOOG", "MSFT", "AMZN")
getSymbols(tickers, from = "2010-01-01", to = "2012-12-31", auto.assign = TRUE)
## [1] "GOOG" "MSFT" "AMZN"
data = new.env()
getSymbols(tickers, from = "2010-01-01", to = "2012-12-31", env = data , auto.assign = TRUE)
## [1] "GOOG" "MSFT" "AMZN"
ls(data)
## [1] "AMZN" "GOOG" "MSFT"
names(data)
## [1] "GOOG"        ".getSymbols" "AMZN"        "MSFT"
head(data$AMZN)
##            AMZN.Open AMZN.High AMZN.Low AMZN.Close AMZN.Volume
## 2010-01-04    136.25    136.61   133.14     133.90     7599900
## 2010-01-05    133.43    135.48   131.81     134.69     8851900
## 2010-01-06    134.60    134.73   131.65     132.25     7178800
## 2010-01-07    132.01    132.32   128.80     130.00    11030200
## 2010-01-08    130.56    133.68   129.03     133.52     9830500
## 2010-01-11    132.62    132.80   129.21     130.31     8779400
##            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
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"
GOOG.ad<-Ad(GOOG)
head(GOOG.ad)
##            GOOG.Adjusted
## 2010-01-04      311.3500
## 2010-01-05      309.9789
## 2010-01-06      302.1647
## 2010-01-07      295.1305
## 2010-01-08      299.0649
## 2010-01-11      298.6128
class(GOOG.ad)
## [1] "xts" "zoo"
MSFT.ad<-Ad(MSFT)
head(MSFT.ad)
##            MSFT.Adjusted
## 2010-01-04      24.61580
## 2010-01-05      24.62375
## 2010-01-06      24.47263
## 2010-01-07      24.21812
## 2010-01-08      24.38515
## 2010-01-11      24.07497
class(MSFT.ad)
## [1] "xts" "zoo"
firm3<-merge(Ad(AMZN), Ad(GOOG), Ad(MSFT))
head(firm3)
##            AMZN.Adjusted GOOG.Adjusted MSFT.Adjusted
## 2010-01-04        133.90      311.3500      24.61580
## 2010-01-05        134.69      309.9789      24.62375
## 2010-01-06        132.25      302.1647      24.47263
## 2010-01-07        130.00      295.1305      24.21812
## 2010-01-08        133.52      299.0649      24.38515
## 2010-01-11        130.31      298.6128      24.07497
colnames(firm3)<-c("AMZN", "GOOG", "MSFG")
head(firm3)
##              AMZN     GOOG     MSFG
## 2010-01-04 133.90 311.3500 24.61580
## 2010-01-05 134.69 309.9789 24.62375
## 2010-01-06 132.25 302.1647 24.47263
## 2010-01-07 130.00 295.1305 24.21812
## 2010-01-08 133.52 299.0649 24.38515
## 2010-01-11 130.31 298.6128 24.07497
monthlyReturn(AMZN.ad, subset=NULL, type='arithmetic',
              leading=TRUE, from = "2010-01-01", to = "2012-12-31")
##            monthly.returns
## 2010-01-29    -0.063405455
## 2010-02-26    -0.055896673
## 2010-03-31     0.146706095
## 2010-04-30     0.009795993
## 2010-05-28    -0.084901579
## 2010-06-30    -0.129124798
## 2010-07-30     0.078985876
## 2010-08-31     0.058868463
## 2010-09-30     0.258191104
## 2010-10-29     0.052018325
## 2010-11-30     0.061550555
## 2010-12-31     0.026225805
## 2011-01-31    -0.057555561
## 2011-02-28     0.021516117
## 2011-03-31     0.039471477
## 2011-04-29     0.087048202
## 2011-05-31     0.004494173
## 2011-06-30     0.039656327
## 2011-07-29     0.088170564
## 2011-08-31    -0.032761135
## 2011-09-30     0.004646193
## 2011-10-31    -0.012579203
## 2011-11-30    -0.099386457
## 2011-12-30    -0.099797117
## 2012-01-31     0.123281313
## 2012-02-29    -0.075858876
## 2012-03-30     0.126996454
## 2012-04-30     0.145128634
## 2012-05-31    -0.081888704
## 2012-06-29     0.072518913
## 2012-07-31     0.021677236
## 2012-08-31     0.064166313
## 2012-09-28     0.024368643
## 2012-10-31    -0.084263949
## 2012-11-30     0.082270617
## 2012-12-28    -0.027256536
AMZN.mon<-monthlyReturn(AMZN.ad, subset=NULL, type='arithmetic',
                         leading=TRUE, from = "2010-01-01", to = "2012-12-31")
monthlyReturn(GOOG.ad, subset=NULL, type='arithmetic',
              leading=TRUE, from = "2010-01-01", to = "2012-12-31")
##            monthly.returns
## 2010-01-29    -0.154463558
## 2010-02-26    -0.005925163
## 2010-03-31     0.076537582
## 2010-04-30    -0.073035690
## 2010-05-28    -0.076222178
## 2010-06-30    -0.083767454
## 2010-07-30     0.089672959
## 2010-08-31    -0.071836634
## 2010-09-30     0.168370277
## 2010-10-29     0.167196018
## 2010-11-30    -0.094492369
## 2010-12-31     0.068848844
## 2011-01-31     0.010758096
## 2011-02-28     0.021720326
## 2011-03-31    -0.043430133
## 2011-04-29    -0.072704252
## 2011-05-31    -0.027715590
## 2011-06-30    -0.042796081
## 2011-07-29     0.192167941
## 2011-08-31    -0.103910962
## 2011-09-30    -0.047914759
## 2011-10-31     0.150667893
## 2011-11-30     0.011389677
## 2011-12-30     0.077595591
## 2012-01-31    -0.101857877
## 2012-02-29     0.065746177
## 2012-03-30     0.037185593
## 2012-04-30    -0.056749420
## 2012-05-31    -0.039662701
## 2012-06-29    -0.001360082
## 2012-07-31     0.091195899
## 2012-08-31     0.082341979
## 2012-09-28     0.101315085
## 2012-10-31    -0.098343278
## 2012-11-30     0.026561833
## 2012-12-28     0.002348316
GOOG.mon<-monthlyReturn(GOOG.ad, subset=NULL, type='arithmetic',
                         leading=TRUE, from = "2010-01-01", to = "2012-12-31")
monthlyReturn(MSFT.ad, subset=NULL, type='arithmetic',
              leading=TRUE, from = "2010-01-01", to = "2012-12-31")
##            monthly.returns
## 2010-01-29    -0.089499302
## 2010-02-26     0.022145833
## 2010-03-31     0.021625382
## 2010-04-30     0.042676679
## 2010-05-28    -0.151394439
## 2010-06-30    -0.108139445
## 2010-07-30     0.121686183
## 2010-08-31    -0.085811761
## 2010-09-30     0.043459932
## 2010-10-29     0.089015645
## 2010-11-30    -0.047048680
## 2010-12-31     0.104908952
## 2011-01-31    -0.006449389
## 2011-02-28    -0.035805808
## 2011-03-31    -0.044770583
## 2011-04-29     0.020874489
## 2011-05-31    -0.028783720
## 2011-06-30     0.039584365
## 2011-07-29     0.053846074
## 2011-08-31    -0.023069627
## 2011-09-30    -0.064285623
## 2011-10-31     0.069907567
## 2011-11-30    -0.032196137
## 2011-12-30     0.014855278
## 2012-01-31     0.137519215
## 2012-02-29     0.081915525
## 2012-03-30     0.016382866
## 2012-04-30    -0.007439554
## 2012-05-31    -0.082400419
## 2012-06-29     0.047961569
## 2012-07-31    -0.036613366
## 2012-08-31     0.052737686
## 2012-09-28    -0.034393495
## 2012-10-31    -0.040994613
## 2012-11-30    -0.059609218
## 2012-12-28    -0.002629852
MSFT.mon<-monthlyReturn(MSFT.ad, subset=NULL, type='arithmetic',
                         leading=TRUE, from = "2010-01-01", to = "2012-12-31")
firm3.mon<-merge(AMZN.mon, GOOG.mon, MSFT.mon)
colnames(firm3.mon)<-c("AMZN", "GOOG", "MSFG")

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
Sigma = cov(firm3.mon)
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]
## AMZN 0.2596928
## GOOG 0.1693817
## MSFG 0.5709256
mvp.ret<-sum(mvp.w)*colMeans(firm3.mon)
mvp.ret
##          AMZN          GOOG          MSFG 
##  2.036326e-02  6.817553e-03 -6.438638e-06