# To clean up the memory of your current R session run the following line
rm(list=ls(all=TRUE))
library(quantmod)
library(xts)
#Importing Price Data
data.AMZN <- getSymbols("AMZN", from = "2013-12-31", to = "2017-10-01", auto.assign = FALSE)
data.MSFT <- getSymbols("MSFT", from = "2013-12-31", to = "2017-10-01", auto.assign = FALSE)
data.AAPL <- getSymbols("AAPL", from = "2013-12-31", to = "2017-10-01", auto.assign = FALSE)
data.TSLA <- getSymbols("TSLA", from = "2013-12-31", to = "2017-10-01", auto.assign = FALSE)
data.IBM <- getSymbols("IBM", from = "2013-12-31", to = "2017-10-01", auto.assign = FALSE)
data.FB <- getSymbols("FB", from = "2013-12-31", to = "2017-10-01", auto.assign = FALSE)
#to = "2013-12-31" in the book was replaced by to = "2014-01-01"
#B/c that code doesn't produce the output that includes stock price of 2013-12-31the date.
multi <- data.AMZN[, 6] # Need to create a new data object before cbinding
multi <- cbind(multi, data.MSFT[, 6], data.AAPL[, 6], data.TSLA[, 6], data.IBM[, 6], data.FB[, 6])
Step 1: Find First and Last Adjusted Closing Price for Each Security Over the Investmet Period
period.ret <- multi[c(1, nrow(multi)), ]
period.ret
## AMZN.Adjusted MSFT.Adjusted AAPL.Adjusted TSLA.Adjusted
## 2013-12-31 398.79 33.91713 74.57128 150.43
## 2017-09-29 961.35 74.49000 154.11999 341.10
## IBM.Adjusted FB.Adjusted
## 2013-12-31 166.089 54.65
## 2017-09-29 145.080 170.87
Step 2: Calculate Returns for Each Security Over the Investment Period
rets <- lapply(period.ret, Delt) # lapply returns output in a list
rets
## $AMZN.Adjusted
## Delt.1.arithmetic
## 2013-12-31 NA
## 2017-09-29 1.410667
##
## $MSFT.Adjusted
## Delt.1.arithmetic
## 2013-12-31 NA
## 2017-09-29 1.196236
##
## $AAPL.Adjusted
## Delt.1.arithmetic
## 2013-12-31 NA
## 2017-09-29 1.066747
##
## $TSLA.Adjusted
## Delt.1.arithmetic
## 2013-12-31 NA
## 2017-09-29 1.2675
##
## $IBM.Adjusted
## Delt.1.arithmetic
## 2013-12-31 NA
## 2017-09-29 -0.1264924
##
## $FB.Adjusted
## Delt.1.arithmetic
## 2013-12-31 NA
## 2017-09-29 2.126624
#rets <- mapply(Delt, data.frame(period.ret)) #mapply does the same but returns output in DF
Step 3: Convert to a data.frame and Clean up Data
rets <- data.frame(rets)
rets
## Delt.1.arithmetic Delt.1.arithmetic.1 Delt.1.arithmetic.2
## 2013-12-31 NA NA NA
## 2017-09-29 1.410667 1.196236 1.066747
## Delt.1.arithmetic.3 Delt.1.arithmetic.4 Delt.1.arithmetic.5
## 2013-12-31 NA NA NA
## 2017-09-29 1.2675 -0.1264924 2.126624
rets <- rets[2, ] * 100
names(rets) <- paste(c("AMZN", "MSFT", "AAPL", "TSLA", "IBM", "FB"))
rets
## AMZN MSFT AAPL TSLA IBM FB
## 2017-09-29 141.0667 119.6236 106.6747 126.75 -12.64924 212.6624
Step 4: Calculate Weight of Each Security in the Portfolio
i.AMZN <- 40000
i.MSFT <- 10
i.AAPL <- 10
i.TSLA <- 20
i.IBM <- 10
i.FB <- 10
w.AMZN <- i.AMZN / (i.AMZN + i.MSFT + i.AAPL + i.TSLA + i.IBM + i.FB)
w.MSFT <- i.MSFT / (i.AMZN + i.MSFT + i.AAPL + i.TSLA + i.IBM + i.FB)
w.AAPL <- i.AAPL / (i.AMZN + i.MSFT + i.AAPL + i.TSLA + i.IBM + i.FB)
w.TSLA <- i.TSLA / (i.AMZN + i.MSFT + i.AAPL + i.TSLA + i.IBM + i.FB)
w.IBM <- i.IBM / (i.AMZN + i.MSFT + i.AAPL + i.TSLA + i.IBM + i.FB)
w.FB <- i.FB / (i.AMZN + i.MSFT + i.AAPL + i.TSLA + i.IBM + i.FB)
w.AMZN
## [1] 0.9985022
w.MSFT
## [1] 0.0002496256
w.AAPL
## [1] 0.0002496256
w.TSLA
## [1] 0.0004992511
w.IBM
## [1] 0.0002496256
w.FB
## [1] 0.0002496256
Step 5: Calculate Portfolio Return
port.ret.6asset <- w.AMZN * rets$AMZN + w.MSFT * rets$MSFT + w.AAPL * rets$AAPL + w.TSLA * rets$TSLA + w.IBM * rets$IBM + w.FB * rets$FB
port.ret.6asset
## [1] 141.0251
Interpretation The portfolio return over the period is 141%. The stock that performed the best over the period was Facebook.
data.AMZN <- getSymbols("AMZN", from = "2013-12-31", to = "2017-10-01", auto.assign = FALSE)
data.MSFT <- getSymbols("MSFT", from = "2013-12-31", to = "2017-10-01", auto.assign = FALSE)
data.AAPL <- getSymbols("AAPL", from = "2013-12-31", to = "2017-10-01", auto.assign = FALSE)
data.TSLA <- getSymbols("TSLA", from = "2013-12-31", to = "2017-10-01", auto.assign = FALSE)
data.IBM <- getSymbols("IBM", from = "2013-12-31", to = "2017-10-01", auto.assign = FALSE)
data.FB <- getSymbols("FB", from = "2013-12-31", to = "2017-10-01", auto.assign = FALSE)
multi <- data.AMZN[, 6] # Need to create a new data object before cbinding
multi <- cbind(multi, data.MSFT[, 6], data.AAPL[, 6], data.TSLA[, 6], data.IBM[, 6], data.FB[, 6])
Step 1: Find First and Last Adjusted Closing Price for Each Security Over the Investmet Period
period.ret <- multi[c(1, nrow(multi)), ]
period.ret
## AMZN.Adjusted MSFT.Adjusted AAPL.Adjusted TSLA.Adjusted
## 2013-12-31 398.79 33.91713 74.57128 150.43
## 2017-09-29 961.35 74.49000 154.11999 341.10
## IBM.Adjusted FB.Adjusted
## 2013-12-31 166.089 54.65
## 2017-09-29 145.080 170.87
Step 2: Calculate Returns for Each Security Over the Investment Period
rets <- lapply(period.ret, Delt) # lapply returns output in a list
rets
## $AMZN.Adjusted
## Delt.1.arithmetic
## 2013-12-31 NA
## 2017-09-29 1.410667
##
## $MSFT.Adjusted
## Delt.1.arithmetic
## 2013-12-31 NA
## 2017-09-29 1.196236
##
## $AAPL.Adjusted
## Delt.1.arithmetic
## 2013-12-31 NA
## 2017-09-29 1.066747
##
## $TSLA.Adjusted
## Delt.1.arithmetic
## 2013-12-31 NA
## 2017-09-29 1.2675
##
## $IBM.Adjusted
## Delt.1.arithmetic
## 2013-12-31 NA
## 2017-09-29 -0.1264924
##
## $FB.Adjusted
## Delt.1.arithmetic
## 2013-12-31 NA
## 2017-09-29 2.126624
#rets <- mapply(Delt, data.frame(period.ret)) #mapply does the same but returns output in DF
Step 3: Convert to a data.frame and Clean up Data
rets <- data.frame(rets)
rets
## Delt.1.arithmetic Delt.1.arithmetic.1 Delt.1.arithmetic.2
## 2013-12-31 NA NA NA
## 2017-09-29 1.410667 1.196236 1.066747
## Delt.1.arithmetic.3 Delt.1.arithmetic.4 Delt.1.arithmetic.5
## 2013-12-31 NA NA NA
## 2017-09-29 1.2675 -0.1264924 2.126624
rets <- rets[2, ] * 100
names(rets) <- paste(c("AMZN", "MSFT", "AAPL", "TSLA", "IBM", "FB"))
rets
## AMZN MSFT AAPL TSLA IBM FB
## 2017-09-29 141.0667 119.6236 106.6747 126.75 -12.64924 212.6624
Step 4: Calculate Weight of Each Security in the Portfolio
i.AMZN <- 10000
i.MSFT <- 10
i.AAPL <- 10
i.TSLA <- 30
i.IBM <- 30
i.FB <- 10
w.AMZN <- i.AMZN / (i.AMZN + i.MSFT + i.AAPL + i.TSLA + i.IBM + i.FB)
w.MSFT <- i.MSFT / (i.AMZN + i.MSFT + i.AAPL + i.TSLA + i.IBM + i.FB)
w.AAPL <- i.AAPL / (i.AMZN + i.MSFT + i.AAPL + i.TSLA + i.IBM + i.FB)
w.TSLA <- i.TSLA / (i.AMZN + i.MSFT + i.AAPL + i.TSLA + i.IBM + i.FB)
w.IBM <- i.IBM / (i.AMZN + i.MSFT + i.AAPL + i.TSLA + i.IBM + i.FB)
w.FB <- i.FB / (i.AMZN + i.MSFT + i.AAPL + i.TSLA + i.IBM + i.FB)
w.AMZN
## [1] 0.9910803
w.MSFT
## [1] 0.0009910803
w.AAPL
## [1] 0.0009910803
w.TSLA
## [1] 0.002973241
w.IBM
## [1] 0.002973241
w.FB
## [1] 0.0009910803
Step 5: Calculate Portfolio Return
port.ret.6asset <- w.AMZN * rets$AMZN + w.MSFT * rets$MSFT + w.AAPL * rets$AAPL + w.TSLA * rets$TSLA + w.IBM * rets$IBM + w.FB * rets$FB
port.ret.6asset
## [1] 140.5827
Interpretation The portfolio return is 140% The two stocks that performed the best were facebook and amazon.