7.1 Downloading data

Use getSymbols to get data from yahoo or Google (default is yahoo)

getSymbols("AAPL")

Let see what is inside the data.

head(AAPL)
##            AAPL.Open AAPL.High AAPL.Low AAPL.Close AAPL.Volume
## 2019-03-05    175.94    176.00   174.54     175.53    19737400
## 2019-03-06    174.67    175.49   173.94     174.52    20810400
## 2019-03-07    173.87    174.44   172.02     172.50    24760900
## 2019-03-08    170.32    173.07   169.50     172.91    23999400
## 2019-03-11    175.49    179.12   175.35     178.90    32011000
## 2019-03-12    180.00    182.67   179.37     180.91    32467600
##            AAPL.Adjusted
## 2019-03-05        175.53
## 2019-03-06        174.52
## 2019-03-07        172.50
## 2019-03-08        172.91
## 2019-03-11        178.90
## 2019-03-12        180.91

To extract columns, we use Op, Hi, Lo, Cl, Vo and Ad

Open <- Op(AAPL)   #Open Price
High <- Hi(AAPL)    # High price
Low <- Lo(AAPL)  # Low price
Close<- Cl(AAPL)   #Close Price
Volume <- Vo(AAPL)   #Volume
AdjClose <- Ad(AAPL) # Adjusted close

If you wish to only import at a certain date e.g.,. 2000-01-01 to 2015-09-25, we can restrict the set the data to download.

getSymbols("AAPL", from='2000-01-01',to='2015-09-25')
## [1] "AAPL"

Alternatively, we can load the whole series and restrict using xts function last()

getSymbols("AAPL")
## [1] "AAPL"
AAPL <- last(AAPL,'1 year')
head(AAPL)
##            AAPL.Open AAPL.High AAPL.Low AAPL.Close AAPL.Volume
## 2019-01-02    154.89    158.85   154.23     157.92    37039700
## 2019-01-03    143.98    145.72   142.00     142.19    91244100
## 2019-01-04    144.53    148.55   143.80     148.26    58607100
## 2019-01-07    148.70    148.83   145.90     147.93    54777800
## 2019-01-08    149.56    151.82   148.52     150.75    41025300
## 2019-01-09    151.29    154.53   149.63     153.31    45099100
##            AAPL.Adjusted
## 2019-01-02      157.2456
## 2019-01-03      141.5828
## 2019-01-04      147.6268
## 2019-01-07      147.2983
## 2019-01-08      150.1062
## 2019-01-09      152.6553

Alternatively, we can take the first 3 years by using first():

getSymbols("AAPL")
## [1] "AAPL"
AAPL <- first(AAPL,'3 years')
head(AAPL)
##            AAPL.Open AAPL.High AAPL.Low AAPL.Close AAPL.Volume
## 2007-01-03  12.32714  12.36857 11.70000   11.97143   309579900
## 2007-01-04  12.00714  12.27857 11.97429   12.23714   211815100
## 2007-01-05  12.25286  12.31428 12.05714   12.15000   208685400
## 2007-01-08  12.28000  12.36143 12.18286   12.21000   199276700
## 2007-01-09  12.35000  13.28286 12.16429   13.22429   837324600
## 2007-01-10  13.53571  13.97143 13.35000   13.85714   738220000
##            AAPL.Adjusted
## 2007-01-03      7.982585
## 2007-01-04      8.159763
## 2007-01-05      8.101658
## 2007-01-08      8.141665
## 2007-01-09      8.817995
## 2007-01-10      9.239983

We can also import three stocks at the same time by using a vector.

getSymbols(c("AAPL","GOOG"))
## [1] "AAPL" "GOOG"

Alternatively, we can assign a vector of stocks and import based on the vector.

stocklist <- c("AAPL","GOOG")
getSymbols(stocklist)

The package can also import non-US stocks.

getSymbols("0941.hk")
#If error, try instead the following:
#getSymbols("0941.HK",src="yahoo", auto.assign=FALSE)
head(`0941.HK`)
##            0941.HK.Open 0941.HK.High 0941.HK.Low 0941.HK.Close
## 2007-01-02        67.25        70.00       67.10          69.6
## 2007-01-03        69.90        71.80       69.50          70.7
## 2007-01-04        70.60        70.95       67.30          68.2
## 2007-01-05        67.50        69.50       66.30          69.5
## 2007-01-08        67.50        68.40       67.45          67.7
## 2007-01-09        68.00        68.60       65.55          66.3
##            0941.HK.Volume 0941.HK.Adjusted
## 2007-01-02       35293388         46.17351
## 2007-01-03       41163203         46.90325
## 2007-01-04       37286533         45.24471
## 2007-01-05       24502496         46.10715
## 2007-01-08       15584163         44.91301
## 2007-01-09       17861491         43.98424

Besides prices, very often we are interested in the trading volume. Moreover, we would like to find volume over time: weekly, monthly, quarterly and yearly. We can use apply and sum to calculate the rolling sum of volume to each distinct period.

WeekVoYa<- apply.weekly(Vo(AAPL),sum)
# sum from Monday to Friday
MonthVoYa <- apply.monthly(Vo(AAPL),sum)
# sum to month
QuarterVoYa <- apply.quarterly(Vo(AAPL),sum)
# sum to quarter
YearVoYa <- apply.yearly(Vo(AAPL),sum)
# sum to year

In some case, we are interested in average than the sum. Then we can use apply and mean.

WeekAveVoClYa<- apply.weekly(Vo(AAPL),mean)
# weekly average volume