Introduction: load the libraries
library(tidyverse)
library(TTR)
library(quantmod)
library(PerformanceAnalytics)
library(RColorBrewer)
library(tseries)
library(lubridate)
library(Quandl)
Quandl.api_key("zrcB2Ejv9UmvhPCUsy2_")
options("getSymbols.yahoo.warning"=FALSE)
Capture some data for a stock
MSFT <- getSymbols("MSFT", auto.assign = FALSE)
## '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.
head(MSFT)
## MSFT.Open MSFT.High MSFT.Low MSFT.Close MSFT.Volume MSFT.Adjusted
## 2007-01-03 29.91 30.25 29.40 29.86 76935100 22.12369
## 2007-01-04 29.70 29.97 29.44 29.81 45774500 22.08664
## 2007-01-05 29.63 29.75 29.45 29.64 44607200 21.96068
## 2007-01-08 29.65 30.10 29.53 29.93 50220200 22.17555
## 2007-01-09 30.00 30.18 29.73 29.96 44636600 22.19778
## 2007-01-10 29.80 29.89 29.43 29.66 55017400 21.97551
dim(MSFT)
## [1] 3423 6
Download daily returns for a new Stock.
new <- MSFT[1:30,1:3]
MSFT["2007-01-03", "MSFT.Open"]
## MSFT.Open
## 2007-01-03 29.91
Look at the Head and Tail of the Df
head(MSFT)
## MSFT.Open MSFT.High MSFT.Low MSFT.Close MSFT.Volume MSFT.Adjusted
## 2007-01-03 29.91 30.25 29.40 29.86 76935100 22.12369
## 2007-01-04 29.70 29.97 29.44 29.81 45774500 22.08664
## 2007-01-05 29.63 29.75 29.45 29.64 44607200 21.96068
## 2007-01-08 29.65 30.10 29.53 29.93 50220200 22.17555
## 2007-01-09 30.00 30.18 29.73 29.96 44636600 22.19778
## 2007-01-10 29.80 29.89 29.43 29.66 55017400 21.97551
tail(MSFT)
## MSFT.Open MSFT.High MSFT.Low MSFT.Close MSFT.Volume MSFT.Adjusted
## 2020-07-30 201.00 204.46 199.57 203.90 25079600 203.90
## 2020-07-31 204.40 205.10 199.01 205.01 51248000 205.01
## 2020-08-03 211.52 217.64 210.44 216.54 78983000 216.54
## 2020-08-04 214.17 214.77 210.31 213.29 49280100 213.29
## 2020-08-05 214.90 215.00 211.57 212.94 28858600 212.94
## 2020-08-06 212.34 216.37 211.55 216.35 32619400 216.35
dim(MSFT)
## [1] 3423 6
str(MSFT)
## An 'xts' object on 2007-01-03/2020-08-06 containing:
## Data: num [1:3423, 1:6] 29.9 29.7 29.6 29.6 30 ...
## - attr(*, "dimnames")=List of 2
## ..$ : NULL
## ..$ : chr [1:6] "MSFT.Open" "MSFT.High" "MSFT.Low" "MSFT.Close" ...
## Indexed by objects of class: [Date] TZ: UTC
## xts Attributes:
## List of 2
## $ src : chr "yahoo"
## $ updated: POSIXct[1:1], format: "2020-08-07 12:04:22"
Subsetting by row/column reference or by row/column name
df <- as.data.frame(MSFT)
class(df)
## [1] "data.frame"
head(df)
## MSFT.Open MSFT.High MSFT.Low MSFT.Close MSFT.Volume MSFT.Adjusted
## 2007-01-03 29.91 30.25 29.40 29.86 76935100 22.12369
## 2007-01-04 29.70 29.97 29.44 29.81 45774500 22.08664
## 2007-01-05 29.63 29.75 29.45 29.64 44607200 21.96068
## 2007-01-08 29.65 30.10 29.53 29.93 50220200 22.17555
## 2007-01-09 30.00 30.18 29.73 29.96 44636600 22.19778
## 2007-01-10 29.80 29.89 29.43 29.66 55017400 21.97551
df <- as.xts(df)
class(df)
## [1] "xts" "zoo"
write.csv(df, "newdatamsft.csv")
Create a Daily Return and then Chart the data for one stock.
options(scipen=9999)
tsla <- getSymbols("TSLA", auto.assign=F)
head(tsla, 20)
## TSLA.Open TSLA.High TSLA.Low TSLA.Close TSLA.Volume TSLA.Adjusted
## 2010-06-29 19.00 25.00 17.54 23.89 18766300 23.89
## 2010-06-30 25.79 30.42 23.30 23.83 17187100 23.83
## 2010-07-01 25.00 25.92 20.27 21.96 8218800 21.96
## 2010-07-02 23.00 23.10 18.71 19.20 5139800 19.20
## 2010-07-06 20.00 20.00 15.83 16.11 6866900 16.11
## 2010-07-07 16.40 16.63 14.98 15.80 6921700 15.80
## 2010-07-08 16.14 17.52 15.57 17.46 7711400 17.46
## 2010-07-09 17.58 17.90 16.55 17.40 4050600 17.40
## 2010-07-12 17.95 18.07 17.00 17.05 2202500 17.05
## 2010-07-13 17.39 18.64 16.90 18.14 2680100 18.14
## 2010-07-14 17.94 20.15 17.76 19.84 4195200 19.84
## 2010-07-15 19.94 21.50 19.00 19.89 3739800 19.89
## 2010-07-16 20.70 21.30 20.05 20.64 2621300 20.64
## 2010-07-19 21.37 22.25 20.92 21.91 2486500 21.91
## 2010-07-20 21.85 21.85 20.05 20.30 1825300 20.30
## 2010-07-21 20.66 20.90 19.50 20.22 1252500 20.22
## 2010-07-22 20.50 21.25 20.37 21.00 957800 21.00
## 2010-07-23 21.19 21.56 21.06 21.29 653600 21.29
## 2010-07-26 21.50 21.50 20.30 20.95 922200 20.95
## 2010-07-27 20.91 21.18 20.26 20.55 619700 20.55
head(dailyReturn(tsla$TSLA.Adjusted))
## daily.returns
## 2010-06-29 0.000000000
## 2010-06-30 -0.002511469
## 2010-07-01 -0.078472556
## 2010-07-02 -0.125682975
## 2010-07-06 -0.160937492
## 2010-07-07 -0.019242767
plot(dailyReturn(tsla$TSLA.Adjusted), type = "l")

More data analytics and comparing multiple stocks against each other.
msft <- getSymbols("MSFT", auto.assign = F)
dim(msft)
## [1] 3423 6
msft_Ad <- Ad(msft)
head(msft_Ad)
## MSFT.Adjusted
## 2007-01-03 22.12369
## 2007-01-04 22.08664
## 2007-01-05 21.96068
## 2007-01-08 22.17555
## 2007-01-09 22.19778
## 2007-01-10 21.97551
msft_daily <- dailyReturn(msft_Ad)
head(msft_daily)
## daily.returns
## 2007-01-03 0.000000000
## 2007-01-04 -0.001674766
## 2007-01-05 -0.005702859
## 2007-01-08 0.009783985
## 2007-01-09 0.001002771
## 2007-01-10 -0.010013432
new_msft <- dailyReturn(Ad(getSymbols("MSFT", auto.assign = F)))
head(new_msft)
## daily.returns
## 2007-01-03 0.000000000
## 2007-01-04 -0.001674766
## 2007-01-05 -0.005702859
## 2007-01-08 0.009783985
## 2007-01-09 0.001002771
## 2007-01-10 -0.010013432
fb <- getSymbols("FB", auto.assign = F)
fb_ad <- Ad(fb)
fb_daily <- dailyReturn(fb_ad)
dim(fb_daily)
## [1] 2068 1
new_fb <- dailyReturn(Ad(getSymbols("FB", auto.assign = F)))
comb <- merge(new_msft, new_fb)
head(comb)
## daily.returns daily.returns.1
## 2007-01-03 0.000000000 NA
## 2007-01-04 -0.001674766 NA
## 2007-01-05 -0.005702859 NA
## 2007-01-08 0.009783985 NA
## 2007-01-09 0.001002771 NA
## 2007-01-10 -0.010013432 NA
comb_traded <- merge(new_msft, new_fb, all=F)
head(comb_traded)
## daily.returns daily.returns.1
## 2012-05-18 -0.0151410936 0.00000000
## 2012-05-21 0.0163992312 -0.10986139
## 2012-05-22 0.0003357195 -0.08903906
## 2012-05-23 -0.0218411670 0.03225806
## 2012-05-24 -0.0013741794 0.03218747
## 2012-05-25 -0.0003442763 -0.03390854
dim(comb_traded)
## [1] 2068 2
charts.PerformanceSummary(comb_traded, main="FB vs MSFT")

table.AnnualizedReturns(comb_traded, scale=252, Rf=.004/252)
## daily.returns daily.returns.1
## Annualized Return 0.3027 0.2662
## Annualized Std Dev 0.2596 0.3739
## Annualized Sharpe (Rf=0.4%) 1.1458 0.6986