#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.
data = new.env()
tickers = c("F", "SBUX", "AAPL")
getSymbols(tickers, from = "2007-01-01", to = "2018-12-31", 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] "F"    "SBUX" "AAPL"
ls(data)
## character(0)
names(data)
## character(0)
head(data$AAPL)
## NULL
firm3<-merge(Ad(AAPL), Ad(SBUX), Ad(F))
head(firm3)
##            AAPL.Adjusted SBUX.Adjusted F.Adjusted
## 2007-01-03      7.982585      14.13297   5.529016
## 2007-01-04      8.159763      14.14900   5.668897
## 2007-01-05      8.101658      14.08886   5.609998
## 2007-01-08      8.141665      14.03674   5.690983
## 2007-01-09      8.817995      13.97660   5.735155
## 2007-01-10      9.239983      13.93249   5.690983
colnames(firm3)<-c("AAPL", "SBUX", "F")
head(firm3)
##                AAPL     SBUX        F
## 2007-01-03 7.982585 14.13297 5.529016
## 2007-01-04 8.159763 14.14900 5.668897
## 2007-01-05 8.101658 14.08886 5.609998
## 2007-01-08 8.141665 14.03674 5.690983
## 2007-01-09 8.817995 13.97660 5.735155
## 2007-01-10 9.239983 13.93249 5.690983
#install.packages("magrittr")
library(magrittr)
simple_returns01<-function(x) {
  na.omit(x/lag(x) - 1)
}
head(simple_returns01(firm3))
##                    AAPL         SBUX            F
## 2007-01-04  0.022195567  0.001134723  0.025299438
## 2007-01-05 -0.007120918 -0.004250406 -0.010389852
## 2007-01-08  0.004938125 -0.003699447  0.014435834
## 2007-01-09  0.083070232 -0.004284470  0.007761752
## 2007-01-10  0.047855323 -0.003155989 -0.007701971
## 2007-01-11 -0.012371127  0.030503588  0.005174677
#install.packages("PerformanceAnalytics")
library(PerformanceAnalytics)
## 
## Attaching package: 'PerformanceAnalytics'
## The following object is masked from 'package:graphics':
## 
##     legend
head(na.omit(Return.calculate(firm3)))
##                    AAPL         SBUX            F
## 2007-01-04  0.022195567  0.001134723  0.025299438
## 2007-01-05 -0.007120918 -0.004250406 -0.010389852
## 2007-01-08  0.004938125 -0.003699447  0.014435834
## 2007-01-09  0.083070232 -0.004284470  0.007761752
## 2007-01-10  0.047855323 -0.003155989 -0.007701971
## 2007-01-11 -0.012371127  0.030503588  0.005174677
firm3.mon<-firm3 %>% to.monthly(indexAt = "lastof", OHLC=FALSE) %>% 
  Return.calculate()
head(firm3.mon)
##                    AAPL        SBUX            F
## 2007-01-31           NA          NA           NA
## 2007-02-28 -0.013064215 -0.11562681 -0.027060188
## 2007-03-31  0.098097433  0.01488688 -0.002528718
## 2007-04-30  0.074157590 -0.01084200  0.019011400
## 2007-05-31  0.214328834 -0.07124424  0.037313588
## 2007-06-30  0.007013698 -0.08920529  0.129496075
head(na.omit(Return.calculate(firm3)))
##                    AAPL         SBUX            F
## 2007-01-04  0.022195567  0.001134723  0.025299438
## 2007-01-05 -0.007120918 -0.004250406 -0.010389852
## 2007-01-08  0.004938125 -0.003699447  0.014435834
## 2007-01-09  0.083070232 -0.004284470  0.007761752
## 2007-01-10  0.047855323 -0.003155989 -0.007701971
## 2007-01-11 -0.012371127  0.030503588  0.005174677
firm3.year<-firm3 %>% to.yearly(indexAt = "lastof", OHLC=FALSE) %>% 
  Return.calculate()
head(firm3.year)
##                  AAPL       SBUX          F
## 2007-12-31         NA         NA         NA
## 2008-12-31 -0.5691136 -0.5378603 -0.6597326
## 2009-12-31  1.4690102  1.4376328  3.3668129
## 2010-12-31  0.5306794  0.4318587  0.6790003
## 2011-12-31  0.2555798  0.4757278 -0.3591425
## 2012-12-31  0.3990632  0.2002676  0.2260050
tickers<-c("AAPL", "SBUX", "F")
getSymbols(tickers, from = '2010-01-01', to = '2012-12-31', auto.assign = TRUE)
## [1] "AAPL" "SBUX" "F"
data <- new.env()
getSymbols(tickers, from = '2010-01-01', to = '2012-12-31', env = data, auto.assign = TRUE)
## [1] "AAPL" "SBUX" "F"
firm36<-merge((AAPL),(SBUX),(F))
head(firm36)
##            AAPL.Open AAPL.High AAPL.Low AAPL.Close AAPL.Volume
## 2010-01-04  30.49000  30.64286 30.34000   30.57286   123432400
## 2010-01-05  30.65714  30.79857 30.46429   30.62571   150476200
## 2010-01-06  30.62571  30.74714 30.10714   30.13857   138040000
## 2010-01-07  30.25000  30.28571 29.86429   30.08286   119282800
## 2010-01-08  30.04286  30.28571 29.86572   30.28286   111902700
## 2010-01-11  30.40000  30.42857 29.77857   30.01572   115557400
##            AAPL.Adjusted SBUX.Open SBUX.High SBUX.Low SBUX.Close
## 2010-01-04      20.38607    11.660    11.665   11.455     11.525
## 2010-01-05      20.42132    11.480    12.000   11.445     11.795
## 2010-01-06      20.09649    11.740    11.810   11.630     11.710
## 2010-01-07      20.05934    11.640    11.765   11.595     11.680
## 2010-01-08      20.19270    11.600    11.800   11.595     11.640
## 2010-01-11      20.01457    11.685    11.685   11.435     11.605
##            SBUX.Volume SBUX.Adjusted F.Open F.High F.Low F.Close  F.Volume
## 2010-01-04    16370000      9.241555  10.17  10.28 10.05   10.28  60855800
## 2010-01-05    30058800      9.458060  10.45  11.24 10.40   10.96 215620200
## 2010-01-06    14209600      9.389901  11.21  11.46 11.13   11.37 200070600
## 2010-01-07    10256000      9.365845  11.46  11.69 11.32   11.66 130201700
## 2010-01-08    10274800      9.333771  11.67  11.74 11.46   11.69 130463000
## 2010-01-11    11387000      9.305705  11.90  12.14 11.78   12.11 170626200
##            F.Adjusted
## 2010-01-04   7.568344
## 2010-01-05   8.068974
## 2010-01-06   8.370827
## 2010-01-07   8.584332
## 2010-01-08   8.606414
## 2010-01-11   8.915629
str(firm36)
## An 'xts' object on 2010-01-04/2012-12-28 containing:
##   Data: num [1:753, 1:18] 30.5 30.7 30.6 30.2 30 ...
##  - attr(*, "dimnames")=List of 2
##   ..$ : NULL
##   ..$ : chr [1:18] "AAPL.Open" "AAPL.High" "AAPL.Low" "AAPL.Close" ...
##   Indexed by objects of class: [Date] TZ: UTC
##   xts Attributes:  
## List of 2
##  $ src    : chr "yahoo"
##  $ updated: POSIXct[1:1], format: "2019-04-04 00:42:28"
firm36$date
## NULL
#install.packages("PerformanceAnalytics")
library(PerformanceAnalytics)
head(na.omit(Return.calculate(firm36)))
##               AAPL.Open    AAPL.High      AAPL.Low   AAPL.Close
## 2010-01-05  0.005481896  0.005081576  0.0040964074  0.001728854
## 2010-01-06 -0.001025210 -0.001669818 -0.0117233016 -0.015906307
## 2010-01-07 -0.012267894 -0.015007183 -0.0080664246 -0.001848595
## 2010-01-08 -0.006847736  0.000000000  0.0000478498  0.006648338
## 2010-01-11  0.011887818  0.004716976 -0.0029178273 -0.008821591
## 2010-01-12 -0.016964309 -0.015164366 -0.0097385798 -0.011375008
##            AAPL.Volume AAPL.Adjusted    SBUX.Open    SBUX.High
## 2010-01-05  0.21909807   0.001729122 -0.015437393  0.028718388
## 2010-01-06 -0.08264563  -0.015906463  0.022648084 -0.015833333
## 2010-01-07 -0.13588235  -0.001848731 -0.008517888 -0.003810330
## 2010-01-08 -0.06187061   0.006648425 -0.003436426  0.002974926
## 2010-01-11  0.03265962  -0.008821653  0.007327586 -0.009745763
## 2010-01-12  0.28606995  -0.011374964 -0.020111254 -0.007702182
##                 SBUX.Low   SBUX.Close  SBUX.Volume SBUX.Adjusted
## 2010-01-05 -0.0008729812  0.023427332  0.836212584   0.023427334
## 2010-01-06  0.0161642639 -0.007206443 -0.527273211  -0.007206446
## 2010-01-07 -0.0030094583 -0.002561913 -0.278234433  -0.002561901
## 2010-01-08  0.0000000000 -0.003424658  0.001833073  -0.003424571
## 2010-01-11 -0.0137990513 -0.003006873  0.108245416  -0.003006930
## 2010-01-12 -0.0161783997 -0.016803102  0.355018881  -0.016802918
##                 F.Open       F.High        F.Low      F.Close     F.Volume
## 2010-01-05 0.027531957  0.093385214  0.034825871  0.066147860  2.543133111
## 2010-01-06 0.072727273  0.019572954  0.070192308  0.037408759 -0.072115692
## 2010-01-07 0.022301517  0.020069808  0.017070979  0.025505717 -0.349221225
## 2010-01-08 0.018324607  0.004277160  0.012367491  0.002572899  0.002006886
## 2010-01-11 0.019708655  0.034071550  0.027923211  0.035928144  0.307851268
## 2010-01-12 0.006722689 -0.009060956 -0.005093379 -0.019818332 -0.044719392
##              F.Adjusted
## 2010-01-05  0.066147892
## 2010-01-06  0.037409093
## 2010-01-07  0.025505843
## 2010-01-08  0.002572361
## 2010-01-11  0.035928437
## 2010-01-12 -0.019818344
firm36.month<-firm36 %>% to.monthly(indexAt = "lastof", OHLC=FALSE) %>% 
  Return.calculate()
head(firm36.month)
##               AAPL.Open    AAPL.High    AAPL.Low  AAPL.Close AAPL.Volume
## 2010-01-31           NA           NA          NA          NA          NA
## 2010-02-28  0.006465079  0.014688403  0.06176082  0.06539620 -0.59271253
## 2010-03-31  0.163603195  0.153238866  0.16069307  0.14847041 -0.15134410
## 2010-04-30  0.143615417  0.143527330  0.11319623  0.11102128  0.25961107
## 2010-05-31 -0.036834903 -0.041283233 -0.02931034 -0.01612472  0.50353830
## 2010-06-30 -0.010331983 -0.005512783 -0.01318332 -0.02082685 -0.09338085
##            AAPL.Adjusted   SBUX.Open   SBUX.High    SBUX.Low   SBUX.Close
## 2010-01-31            NA          NA          NA          NA           NA
## 2010-02-28    0.06539628  0.03616637  0.02041722  0.04275862  0.051399725
## 2010-03-31    0.14847012  0.06544503  0.06742062  0.06701940  0.059362724
## 2010-04-30    0.11102142  0.09500410  0.08964955  0.07355372  0.070457355
## 2010-05-31   -0.01612445 -0.02804787 -0.01533283 -0.01193226 -0.003464203
## 2010-06-30   -0.02082721 -0.03501347 -0.03873908 -0.05453837 -0.061413673
##             SBUX.Volume SBUX.Adjusted      F.Open      F.High       F.Low
## 2010-01-31           NA            NA          NA          NA          NA
## 2010-02-28 -0.354384317   0.051399682  0.01982759  0.02067183  0.08504673
## 2010-03-31  0.246991736   0.059362747  0.08368555  0.09282700  0.06976744
## 2010-04-30 -0.005447822   0.079363079  0.06396256  0.06023166  0.04347826
## 2010-05-31  0.101103529  -0.003464168 -0.11656891 -0.12017480 -0.10339506
## 2010-06-30  1.053426614  -0.061413911 -0.16182573 -0.12913907 -0.13597246
##                F.Close   F.Volume  F.Adjusted
## 2010-01-31          NA         NA          NA
## 2010-02-28  0.08302583 -0.5469647  0.08302553
## 2010-03-31  0.07069847  4.9923820  0.07069849
## 2010-04-30  0.03579952 -0.6625854  0.03579951
## 2010-05-31 -0.09907834 -0.4613051 -0.09907832
## 2010-06-30 -0.14066496  1.3195054 -0.14066479
#install.packages("xts")
library(xts)
firm36.month.xts = as.xts(firm36.month[,-1])
#install.packages("fbasics")
library(fBasics)
## Loading required package: timeDate
## 
## Attaching package: 'timeDate'
## The following objects are masked from 'package:PerformanceAnalytics':
## 
##     kurtosis, skewness
## Loading required package: timeSeries
## 
## 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(firm36[,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]
## AAPL.High  -12.687807
## AAPL.Low    11.822011
## AAPL.Close   1.865796
mvp.ret<-sum((mvp.w)*colMeans(firm36[,2:4]))
mvp.ret
## [1] 42.79961