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