rm(list=ls())
#install.packages("quantmod")
library(quantmod)
## Warning: package 'quantmod' was built under R version 3.5.3
## Loading required package: xts
## Warning: package 'xts' was built under R version 3.5.3
## Loading required package: zoo
## Warning: package 'zoo' was built under R version 3.5.3
## 
## Attaching package: 'zoo'
## The following objects are masked from 'package:base':
## 
##     as.Date, as.Date.numeric
## Loading required package: TTR
## Warning: package 'TTR' was built under R version 3.5.3
## Version 0.4-0 included new data defaults. See ?getSymbols.
tickers = c("SPY", "QQQ", "EEM", "IWM","EFA", "TLT", "IYR", "GLD")
getSymbols(tickers, from = "2010-01-01", 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.
## pausing 1 second between requests for more than 5 symbols
## pausing 1 second between requests for more than 5 symbols
## pausing 1 second between requests for more than 5 symbols
## pausing 1 second between requests for more than 5 symbols
## [1] "SPY" "QQQ" "EEM" "IWM" "EFA" "TLT" "IYR" "GLD"
#
firm8<-merge(Cl(SPY), Cl(QQQ), Cl(EEM), Cl(IWM), Cl(EFA), Cl(TLT), Cl(IYR), Cl(GLD))
head(firm8)
##            SPY.Close QQQ.Close EEM.Close IWM.Close EFA.Close TLT.Close
## 2010-01-04    113.33     46.42     42.71     63.98     56.73     89.81
## 2010-01-05    113.63     46.42     43.02     63.76     56.78     90.39
## 2010-01-06    113.71     46.14     43.11     63.70     57.02     89.18
## 2010-01-07    114.19     46.17     42.86     64.17     56.80     89.33
## 2010-01-08    114.57     46.55     43.20     64.52     57.25     89.29
## 2010-01-11    114.73     46.36     43.11     64.26     57.72     88.80
##            IYR.Close GLD.Close
## 2010-01-04     45.81    109.80
## 2010-01-05     45.92    109.70
## 2010-01-06     45.90    111.51
## 2010-01-07     46.31    110.82
## 2010-01-08     46.00    111.37
## 2010-01-11     46.22    112.85
colnames(firm8)<-c("SPY", "QQQ", "EEM", "IWM","EFA", "TLT", "IYR", "GLD")
head(firm8)
##               SPY   QQQ   EEM   IWM   EFA   TLT   IYR    GLD
## 2010-01-04 113.33 46.42 42.71 63.98 56.73 89.81 45.81 109.80
## 2010-01-05 113.63 46.42 43.02 63.76 56.78 90.39 45.92 109.70
## 2010-01-06 113.71 46.14 43.11 63.70 57.02 89.18 45.90 111.51
## 2010-01-07 114.19 46.17 42.86 64.17 56.80 89.33 46.31 110.82
## 2010-01-08 114.57 46.55 43.20 64.52 57.25 89.29 46.00 111.37
## 2010-01-11 114.73 46.36 43.11 64.26 57.72 88.80 46.22 112.85
firm8_2010=firm8['2010']
#
library(magrittr)
## Warning: package 'magrittr' was built under R version 3.5.3
simple_returns02<-function(x) {
  na.omit(x/lag(x) - 1)
}
head(simple_returns02(firm8_2010))
##                     SPY           QQQ          EEM           IWM
## 2010-01-05  0.002647093  0.0000000000  0.007258277 -0.0034386058
## 2010-01-06  0.000704057 -0.0060318615  0.002092073 -0.0009409818
## 2010-01-07  0.004221291  0.0006501734 -0.005799118  0.0073782887
## 2010-01-08  0.003327769  0.0082304747  0.007932804  0.0054542467
## 2010-01-11  0.001396552 -0.0040815898 -0.002083333 -0.0040296809
## 2010-01-12 -0.009326235 -0.0125108280 -0.016005636 -0.0108932614
##                      EFA           TLT          IYR           GLD
## 2010-01-05  0.0008813503  0.0064580894  0.002401157 -0.0009108014
## 2010-01-06  0.0042268581 -0.0133864256 -0.000435453  0.0164995902
## 2010-01-07 -0.0038583129  0.0016820139  0.008932440 -0.0061878037
## 2010-01-08  0.0079225530 -0.0004477891 -0.006694040  0.0049630301
## 2010-01-11  0.0082096245 -0.0054877141  0.004782630  0.0132889913
## 2010-01-12 -0.0117810116  0.0171170828 -0.016875854 -0.0209127164
#=================================
# 2 Daily
#=================================
#install.packages("PerformanceAnalytics")
library(PerformanceAnalytics)
## Warning: package 'PerformanceAnalytics' was built under R version 3.5.3
## 
## Attaching package: 'PerformanceAnalytics'
## The following object is masked from 'package:graphics':
## 
##     legend
head(na.omit(Return.calculate(firm8_2010)))
##                     SPY           QQQ          EEM           IWM
## 2010-01-05  0.002647093  0.0000000000  0.007258277 -0.0034386058
## 2010-01-06  0.000704057 -0.0060318615  0.002092073 -0.0009409818
## 2010-01-07  0.004221291  0.0006501734 -0.005799118  0.0073782887
## 2010-01-08  0.003327769  0.0082304747  0.007932804  0.0054542467
## 2010-01-11  0.001396552 -0.0040815898 -0.002083333 -0.0040296809
## 2010-01-12 -0.009326235 -0.0125108280 -0.016005636 -0.0108932614
##                      EFA           TLT          IYR           GLD
## 2010-01-05  0.0008813503  0.0064580894  0.002401157 -0.0009108014
## 2010-01-06  0.0042268581 -0.0133864256 -0.000435453  0.0164995902
## 2010-01-07 -0.0038583129  0.0016820139  0.008932440 -0.0061878037
## 2010-01-08  0.0079225530 -0.0004477891 -0.006694040  0.0049630301
## 2010-01-11  0.0082096245 -0.0054877141  0.004782630  0.0132889913
## 2010-01-12 -0.0117810116  0.0171170828 -0.016875854 -0.0209127164
firm8_2010.day<-firm8_2010 %>% to.daily(indexAt = "lastof", OHLC=FALSE) %>% 
  Return.calculate()
head(firm8_2010.day)
##                    SPY           QQQ          EEM           IWM
## 2010-01-31          NA            NA           NA            NA
## 2010-01-31 0.002647093  0.0000000000  0.007258277 -0.0034386058
## 2010-01-31 0.000704057 -0.0060318615  0.002092073 -0.0009409818
## 2010-01-31 0.004221291  0.0006501734 -0.005799118  0.0073782887
## 2010-01-31 0.003327769  0.0082304747  0.007932804  0.0054542467
## 2010-01-31 0.001396552 -0.0040815898 -0.002083333 -0.0040296809
##                      EFA           TLT          IYR           GLD
## 2010-01-31            NA            NA           NA            NA
## 2010-01-31  0.0008813503  0.0064580894  0.002401157 -0.0009108014
## 2010-01-31  0.0042268581 -0.0133864256 -0.000435453  0.0164995902
## 2010-01-31 -0.0038583129  0.0016820139  0.008932440 -0.0061878037
## 2010-01-31  0.0079225530 -0.0004477891 -0.006694040  0.0049630301
## 2010-01-31  0.0082096245 -0.0054877141  0.004782630  0.0132889913
firm8_2010.day<-na.omit(firm8_2010.day)
head(firm8_2010.day)
##                     SPY           QQQ          EEM           IWM
## 2010-01-31  0.002647093  0.0000000000  0.007258277 -0.0034386058
## 2010-01-31  0.000704057 -0.0060318615  0.002092073 -0.0009409818
## 2010-01-31  0.004221291  0.0006501734 -0.005799118  0.0073782887
## 2010-01-31  0.003327769  0.0082304747  0.007932804  0.0054542467
## 2010-01-31  0.001396552 -0.0040815898 -0.002083333 -0.0040296809
## 2010-01-31 -0.009326235 -0.0125108280 -0.016005636 -0.0108932614
##                      EFA           TLT          IYR           GLD
## 2010-01-31  0.0008813503  0.0064580894  0.002401157 -0.0009108014
## 2010-01-31  0.0042268581 -0.0133864256 -0.000435453  0.0164995902
## 2010-01-31 -0.0038583129  0.0016820139  0.008932440 -0.0061878037
## 2010-01-31  0.0079225530 -0.0004477891 -0.006694040  0.0049630301
## 2010-01-31  0.0082096245 -0.0054877141  0.004782630  0.0132889913
## 2010-01-31 -0.0117810116  0.0171170828 -0.016875854 -0.0209127164
str(firm8_2010.day)
## An 'xts' object on 2010-01-31/2010-12-31 containing:
##   Data: num [1:251, 1:8] 0.002647 0.000704 0.004221 0.003328 0.001397 ...
##  - attr(*, "dimnames")=List of 2
##   ..$ : NULL
##   ..$ : chr [1:8] "SPY" "QQQ" "EEM" "IWM" ...
##   Indexed by objects of class: [Date] TZ: UTC
##   xts Attributes:  
## List of 4
##  $ src      : chr "yahoo"
##  $ updated  : POSIXct[1:1], format: "2019-04-18 12:51:41"
##  $ ret_type : chr "discrete"
##  $ na.action: 'omit' int 1
##   ..- attr(*, "index")= num 1.26e+09
# Minimum variance portfolio
#install.packages("PerformanceAnalytics")
library(fBasics)
## Warning: package 'fBasics' was built under R version 3.5.3
## Loading required package: timeDate
## 
## Attaching package: 'timeDate'
## The following objects are masked from 'package:PerformanceAnalytics':
## 
##     kurtosis, skewness
## Loading required package: timeSeries
## Warning: package 'timeSeries' was built under R version 3.5.3
## 
## Attaching package: 'timeSeries'
## The following object is masked from 'package:zoo':
## 
##     time<-
## 
## Attaching package: 'fBasics'
## The following object is masked from 'package:TTR':
## 
##     volatility
Sigma = cov(firm8_2010.day[,2:4])
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]
## QQQ  1.55749919
## EEM -0.04365386
## IWM -0.51384533
mvp.ret<-sum((mvp.w)*colMeans(firm8_2010.day[,2:4]))
mvp.ret
## [1] 0.00060795
#=================================
# 3 Weekly
#=================================
library(magrittr)
simple_returns02<-function(x) {
  na.omit(x/lag(x) - 1)
}
head(simple_returns02(firm8_2010))
##                     SPY           QQQ          EEM           IWM
## 2010-01-05  0.002647093  0.0000000000  0.007258277 -0.0034386058
## 2010-01-06  0.000704057 -0.0060318615  0.002092073 -0.0009409818
## 2010-01-07  0.004221291  0.0006501734 -0.005799118  0.0073782887
## 2010-01-08  0.003327769  0.0082304747  0.007932804  0.0054542467
## 2010-01-11  0.001396552 -0.0040815898 -0.002083333 -0.0040296809
## 2010-01-12 -0.009326235 -0.0125108280 -0.016005636 -0.0108932614
##                      EFA           TLT          IYR           GLD
## 2010-01-05  0.0008813503  0.0064580894  0.002401157 -0.0009108014
## 2010-01-06  0.0042268581 -0.0133864256 -0.000435453  0.0164995902
## 2010-01-07 -0.0038583129  0.0016820139  0.008932440 -0.0061878037
## 2010-01-08  0.0079225530 -0.0004477891 -0.006694040  0.0049630301
## 2010-01-11  0.0082096245 -0.0054877141  0.004782630  0.0132889913
## 2010-01-12 -0.0117810116  0.0171170828 -0.016875854 -0.0209127164
#install.packages("PerformanceAnalytics")
library(PerformanceAnalytics)
head(na.omit(Return.calculate(firm8_2010)))
##                     SPY           QQQ          EEM           IWM
## 2010-01-05  0.002647093  0.0000000000  0.007258277 -0.0034386058
## 2010-01-06  0.000704057 -0.0060318615  0.002092073 -0.0009409818
## 2010-01-07  0.004221291  0.0006501734 -0.005799118  0.0073782887
## 2010-01-08  0.003327769  0.0082304747  0.007932804  0.0054542467
## 2010-01-11  0.001396552 -0.0040815898 -0.002083333 -0.0040296809
## 2010-01-12 -0.009326235 -0.0125108280 -0.016005636 -0.0108932614
##                      EFA           TLT          IYR           GLD
## 2010-01-05  0.0008813503  0.0064580894  0.002401157 -0.0009108014
## 2010-01-06  0.0042268581 -0.0133864256 -0.000435453  0.0164995902
## 2010-01-07 -0.0038583129  0.0016820139  0.008932440 -0.0061878037
## 2010-01-08  0.0079225530 -0.0004477891 -0.006694040  0.0049630301
## 2010-01-11  0.0082096245 -0.0054877141  0.004782630  0.0132889913
## 2010-01-12 -0.0117810116  0.0171170828 -0.016875854 -0.0209127164
firm8_2010.week<-firm8_2010 %>% to.weekly(indexAt = "lastof", OHLC=FALSE) %>% 
  Return.calculate()
head(firm8_2010.week)
##                     SPY          QQQ         EEM         IWM          EFA
## 2010-01-08           NA           NA          NA          NA           NA
## 2010-01-15 -0.008117317 -0.015037616 -0.02893518 -0.01301917 -0.003493467
## 2010-01-22 -0.038982753 -0.036859282 -0.05578069 -0.03062186 -0.055740579
## 2010-01-29 -0.016665141 -0.031023528 -0.03357743 -0.02624330 -0.025802841
## 2010-02-05 -0.006797607  0.004440266 -0.02821311 -0.01397440 -0.019054878
## 2010-02-12  0.012938280  0.018147929  0.03333328  0.02952590  0.005244755
##                     TLT          IYR          GLD
## 2010-01-08           NA           NA           NA
## 2010-01-15  0.020047049 -0.006304370 -0.004579348
## 2010-01-22  0.010100988 -0.041785168 -0.033285251
## 2010-01-29  0.003369543 -0.008447466 -0.011290464
## 2010-02-05 -0.003574857  0.003223578 -0.012080021
## 2010-02-12 -0.019460763 -0.007573973  0.022544908
firm8_2010.week<-na.omit(firm8_2010.week)
head(firm8_2010.week)
##                     SPY          QQQ         EEM         IWM          EFA
## 2010-01-15 -0.008117317 -0.015037616 -0.02893518 -0.01301917 -0.003493467
## 2010-01-22 -0.038982753 -0.036859282 -0.05578069 -0.03062186 -0.055740579
## 2010-01-29 -0.016665141 -0.031023528 -0.03357743 -0.02624330 -0.025802841
## 2010-02-05 -0.006797607  0.004440266 -0.02821311 -0.01397440 -0.019054878
## 2010-02-12  0.012938280  0.018147929  0.03333328  0.02952590  0.005244755
## 2010-02-19  0.028693058  0.024451646  0.02445375  0.03343168  0.022995150
##                     TLT          IYR          GLD
## 2010-01-15  0.020047049 -0.006304370 -0.004579348
## 2010-01-22  0.010100988 -0.041785168 -0.033285251
## 2010-01-29  0.003369543 -0.008447466 -0.011290464
## 2010-02-05 -0.003574857  0.003223578 -0.012080021
## 2010-02-12 -0.019460763 -0.007573973  0.022544908
## 2010-02-19 -0.008204956  0.050184965  0.022701794
str(firm8_2010.week)
## An 'xts' object on 2010-01-15/2010-12-31 containing:
##   Data: num [1:51, 1:8] -0.00812 -0.03898 -0.01667 -0.0068 0.01294 ...
##  - attr(*, "dimnames")=List of 2
##   ..$ : NULL
##   ..$ : chr [1:8] "SPY" "QQQ" "EEM" "IWM" ...
##   Indexed by objects of class: [Date] TZ: UTC
##   xts Attributes:  
## List of 4
##  $ src      : chr "yahoo"
##  $ updated  : POSIXct[1:1], format: "2019-04-18 12:51:41"
##  $ ret_type : chr "discrete"
##  $ na.action: 'omit' int 1
##   ..- attr(*, "index")= num 1.26e+09
# Minimum variance portfolio
#install.packages("PerformanceAnalytics")
library(fBasics)
Sigma = cov(firm8_2010.week[,2:4])
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]
## QQQ  1.4612788
## EEM  0.1839378
## IWM -0.6452166
mvp.ret<-sum((mvp.w)*colMeans(firm8_2010.week[,2:4]))
mvp.ret
## [1] 0.002683429
#=================================
# 4 Monthly
#=================================

library(magrittr)
simple_returns02<-function(x) {
  na.omit(x/lag(x) - 1)
}
head(simple_returns02(firm8_2010))
##                     SPY           QQQ          EEM           IWM
## 2010-01-05  0.002647093  0.0000000000  0.007258277 -0.0034386058
## 2010-01-06  0.000704057 -0.0060318615  0.002092073 -0.0009409818
## 2010-01-07  0.004221291  0.0006501734 -0.005799118  0.0073782887
## 2010-01-08  0.003327769  0.0082304747  0.007932804  0.0054542467
## 2010-01-11  0.001396552 -0.0040815898 -0.002083333 -0.0040296809
## 2010-01-12 -0.009326235 -0.0125108280 -0.016005636 -0.0108932614
##                      EFA           TLT          IYR           GLD
## 2010-01-05  0.0008813503  0.0064580894  0.002401157 -0.0009108014
## 2010-01-06  0.0042268581 -0.0133864256 -0.000435453  0.0164995902
## 2010-01-07 -0.0038583129  0.0016820139  0.008932440 -0.0061878037
## 2010-01-08  0.0079225530 -0.0004477891 -0.006694040  0.0049630301
## 2010-01-11  0.0082096245 -0.0054877141  0.004782630  0.0132889913
## 2010-01-12 -0.0117810116  0.0171170828 -0.016875854 -0.0209127164
#install.packages("PerformanceAnalytics")
library(PerformanceAnalytics)
head(na.omit(Return.calculate(firm8_2010)))
##                     SPY           QQQ          EEM           IWM
## 2010-01-05  0.002647093  0.0000000000  0.007258277 -0.0034386058
## 2010-01-06  0.000704057 -0.0060318615  0.002092073 -0.0009409818
## 2010-01-07  0.004221291  0.0006501734 -0.005799118  0.0073782887
## 2010-01-08  0.003327769  0.0082304747  0.007932804  0.0054542467
## 2010-01-11  0.001396552 -0.0040815898 -0.002083333 -0.0040296809
## 2010-01-12 -0.009326235 -0.0125108280 -0.016005636 -0.0108932614
##                      EFA           TLT          IYR           GLD
## 2010-01-05  0.0008813503  0.0064580894  0.002401157 -0.0009108014
## 2010-01-06  0.0042268581 -0.0133864256 -0.000435453  0.0164995902
## 2010-01-07 -0.0038583129  0.0016820139  0.008932440 -0.0061878037
## 2010-01-08  0.0079225530 -0.0004477891 -0.006694040  0.0049630301
## 2010-01-11  0.0082096245 -0.0054877141  0.004782630  0.0132889913
## 2010-01-12 -0.0117810116  0.0171170828 -0.016875854 -0.0209127164
firm8_2010.mon<-firm8_2010 %>% to.monthly(indexAt = "lastof", OHLC=FALSE) %>% 
  Return.calculate()
head(firm8_2010.mon)
##                    SPY         QQQ          EEM         IWM          EFA
## 2010-01-31          NA          NA           NA          NA           NA
## 2010-02-28  0.03119470  0.04603872  0.017763846  0.04475126  0.002667664
## 2010-03-31  0.05652883  0.07596073  0.081108832  0.07961790  0.063854068
## 2010-04-30  0.01547007  0.02242529 -0.001661918  0.05678464 -0.028045731
## 2010-05-31 -0.07945455 -0.07392372 -0.093935817 -0.07536639 -0.111927954
## 2010-06-30 -0.05623116 -0.06337717 -0.020472390 -0.07743398 -0.037458651
##                    TLT         IYR          GLD
## 2010-01-31          NA          NA           NA
## 2010-02-28 -0.00693316  0.05457055  0.032748217
## 2010-03-31 -0.02367185  0.08689957 -0.004386393
## 2010-04-30  0.02938544  0.06388108  0.058834366
## 2010-05-31  0.04743301 -0.05683531  0.030513141
## 2010-06-30  0.05440415 -0.05485489  0.023553189
firm8_2010.mon<-na.omit(firm8_2010.mon)
head(firm8_2010.mon)
##                    SPY         QQQ          EEM         IWM          EFA
## 2010-02-28  0.03119470  0.04603872  0.017763846  0.04475126  0.002667664
## 2010-03-31  0.05652883  0.07596073  0.081108832  0.07961790  0.063854068
## 2010-04-30  0.01547007  0.02242529 -0.001661918  0.05678464 -0.028045731
## 2010-05-31 -0.07945455 -0.07392372 -0.093935817 -0.07536639 -0.111927954
## 2010-06-30 -0.05623116 -0.06337717 -0.020472390 -0.07743398 -0.037458651
## 2010-07-31  0.06830068  0.07258258  0.109324812  0.06380887  0.116104112
##                    TLT         IYR          GLD
## 2010-02-28 -0.00693316  0.05457055  0.032748217
## 2010-03-31 -0.02367185  0.08689957 -0.004386393
## 2010-04-30  0.02938544  0.06388108  0.058834366
## 2010-05-31  0.04743301 -0.05683531  0.030513141
## 2010-06-30  0.05440415 -0.05485489  0.023553189
## 2010-07-31 -0.01248154  0.09404794 -0.050871154
str(firm8_2010.mon)
## An 'xts' object on 2010-02-28/2010-12-31 containing:
##   Data: num [1:11, 1:8] 0.0312 0.0565 0.0155 -0.0795 -0.0562 ...
##  - attr(*, "dimnames")=List of 2
##   ..$ : NULL
##   ..$ : chr [1:8] "SPY" "QQQ" "EEM" "IWM" ...
##   Indexed by objects of class: [Date] TZ: UTC
##   xts Attributes:  
## List of 4
##  $ src      : chr "yahoo"
##  $ updated  : POSIXct[1:1], format: "2019-04-18 12:51:41"
##  $ ret_type : chr "discrete"
##  $ na.action: 'omit' int 1
##   ..- attr(*, "index")= num 1.26e+09
# Minimum variance portfolio
#install.packages("PerformanceAnalytics")
library(fBasics)
Sigma = cov(firm8_2010.mon[,2:4])
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]
## QQQ  0.62706604
## EEM  0.40728617
## IWM -0.03435222
mvp.ret<-sum((mvp.w)*colMeans(firm8_2010.mon[,2:4]))
mvp.ret
## [1] 0.02314848