Download some stock market data. Neat and tidy? Yes or No?

Using quantmod

library(quantmod)

This report examines the price of three stocks.

getSymbols(params$symbol1, src="yahoo") # from yahoo finance 
## '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] "GM"
stock01 <- getSymbols(params$symbol1, auto.assign = FALSE, src="yahoo") 
barChart(stock01)

stock01 %>% head()
##            GM.Open GM.High GM.Low GM.Close GM.Volume GM.Adjusted
## 2010-11-18   35.00   35.99  33.89    34.19 457044300    26.15552
## 2010-11-19   34.15   34.50  33.11    34.26 107842000    26.20907
## 2010-11-22   34.20   34.48  33.81    34.08  36650600    26.07136
## 2010-11-23   33.95   33.99  33.19    33.25  31170200    25.43641
## 2010-11-24   33.73   33.80  33.22    33.48  26138000    25.61237
## 2010-11-26   33.41   33.81  33.21    33.80  12301200    25.85717

We will use the BatchGetSymbols R package to download stock market data.

library(BatchGetSymbols)
# set dates
first.date <- Sys.Date() - 30
last.date <- Sys.Date()

# set tickers
tickers <- params

l.out <- BatchGetSymbols(tickers = tickers, 
                         first.date = first.date,
                         last.date = last.date, 
                         cache.folder = file.path(tempdir(), 
                                                  'BGS_Cache') ) # cache in tempdir()
## 
## Running BatchGetSymbols for:
##    tickers =GM, F, TWTR
##    Downloading data for benchmark ticker
## ^GSPC | yahoo (1|1) | Not Cached | Saving cache
## GM | yahoo (1|3) | Not Cached | Saving cache - Got 100% of valid prices | Well done!
## F | yahoo (2|3) | Not Cached | Saving cache - Got 100% of valid prices | You got it!
## TWTR | yahoo (3|3) | Not Cached | Saving cache - Got 100% of valid prices | Good stuff!
print(l.out$df.control)
## # A tibble: 3 x 6
##   ticker src   download.status total.obs perc.benchmark.dates threshold.decision
##   <chr>  <chr> <chr>               <int>                <dbl> <chr>             
## 1 GM     yahoo OK                     21                    1 KEEP              
## 2 F      yahoo OK                     21                    1 KEEP              
## 3 TWTR   yahoo OK                     21                    1 KEEP

Is the data in a tidy format?

print(l.out$df.tickers)
##    price.open price.high price.low price.close   volume price.adjusted
## 1       28.60      30.78     28.43       30.01 33827800          30.01
## 2       30.55      31.12     29.79       29.84 23102800          29.84
## 3       29.65      30.03     29.08       29.22 14504200          29.22
## 4       28.70      29.17     28.64       28.83  9680200          28.83
## 5       28.74      28.95     28.43       28.56  9841200          28.56
## 6       29.28      30.76     28.99       30.31 20137900          30.31
## 7       30.40      30.73     29.48       29.69 13006700          29.69
## 8       29.78      29.83     29.12       29.48  9740000          29.48
## 9       29.60      30.24     29.52       29.69  8745400          29.69
## 10      29.86      30.23     29.64       30.02  9180200          30.02
## 11      30.02      30.19     29.61       29.63  9585200          29.63
## 12      29.53      29.85     29.34       29.79  9012000          29.79
## 13      29.85      31.09     29.80       30.96 16246200          30.96
## 14      30.93      31.52     29.13       29.48 22358100          29.48
## 15      29.93      30.37     29.36       30.00 13822000          30.00
## 16      31.72      33.33     31.05       32.38 52000000          32.38
## 17      32.11      32.75     31.73       31.95 22375200          31.95
## 18      31.82      31.88     30.14       30.17 24845100          30.17
## 19      30.30      30.57     29.87       30.46 13638700          30.46
## 20      30.72      31.56     30.54       31.18 11972100          31.18
## 21      31.36      33.14     30.83       31.58 21090900          31.58
## 22       7.05       7.06      6.87        6.98 64555200           6.98
## 23       6.98       7.01      6.89        6.89 40444200           6.89
## 24       6.89       7.02      6.86        6.87 44158100           6.87
## 25       6.77       6.89      6.73        6.84 41824500           6.84
## 26       6.78       6.85      6.65        6.66 39158900           6.66
## 27       6.73       7.00      6.69        6.98 64974700           6.98
## 28       7.01       7.10      6.86        6.94 49550000           6.94
## 29       6.94       6.97      6.77        6.82 48600100           6.82
## 30       6.83       6.98      6.83        6.91 45740900           6.91
## 31       6.93       6.95      6.86        6.94 39936900           6.94
## 32       6.90       6.93      6.79        6.82 50089500           6.82
## 33       6.77       6.87      6.72        6.83 48214200           6.83
## 34       6.81       6.97      6.77        6.95 59008900           6.95
## 35       6.92       7.09      6.76        6.82 78130900           6.82
## 36       6.86       6.95      6.75        6.90 70017500           6.90
## 37       6.83       7.17      6.81        7.03 84749300           7.03
## 38       7.07       7.10      6.93        6.97 56501400           6.97
## 39       6.99       7.04      6.87        6.91 69228600           6.91
## 40       6.94       7.00      6.85        7.00 55080600           7.00
## 41       7.01       7.18      6.98        7.12 58704300           7.12
## 42       7.16       7.18      7.00        7.04 65183500           7.04
## 43      37.95      38.09     37.27       37.97 10188500          37.97
## 44      38.28      38.46     37.74       38.01  8572500          38.01
## 45      38.09      39.52     38.06       38.89 17077200          38.89
## 46      38.62      39.00     38.30       38.96  7745400          38.96
## 47      38.99      39.39     38.70       39.26  9758600          39.26
## 48      39.68      40.80     39.64       40.49 20496600          40.49
## 49      40.44      40.70     39.32       40.55 12470500          40.55
## 50      40.55      41.33     40.00       41.08 12532500          41.08
## 51      40.97      41.25     40.07       40.39 13055000          40.39
## 52      40.50      41.17     40.42       41.07  8033800          41.07
## 53      40.99      41.07     40.57       40.58  7468300          40.58
## 54      40.61      41.25     40.14       41.15 10478800          41.15
## 55      41.52      44.09     41.36       43.67 26800000          43.67
## 56      42.74      43.00     40.96       41.63 18760800          41.63
## 57      41.20      41.49     38.43       39.87 17825000          39.87
## 58      38.52      39.18     38.10       38.19 16117300          38.19
## 59      38.85      39.81     38.33       39.56 10744000          39.56
## 60      39.79      40.40     38.82       38.95 10412300          38.95
## 61      39.24      39.49     38.51       38.93  9885500          38.93
## 62      39.41      39.59     38.55       38.77  9418400          38.77
## 63      39.19      39.30     38.23       39.09 14099800          39.09
##      ref.date ticker ret.adjusted.prices ret.closing.prices
## 1  2020-08-17     GM                  NA                 NA
## 2  2020-08-18     GM       -0.0056647784      -0.0056647784
## 3  2020-08-19     GM       -0.0207775134      -0.0207775134
## 4  2020-08-20     GM       -0.0133469888      -0.0133469888
## 5  2020-08-21     GM       -0.0093652792      -0.0093652792
## 6  2020-08-24     GM        0.0612745119       0.0612745119
## 7  2020-08-25     GM       -0.0204552300      -0.0204552300
## 8  2020-08-26     GM       -0.0070731220      -0.0070731220
## 9  2020-08-27     GM        0.0071235075       0.0071235075
## 10 2020-08-28     GM        0.0111148194       0.0111148194
## 11 2020-08-31     GM       -0.0129913724      -0.0129913724
## 12 2020-09-01     GM        0.0054000002       0.0054000002
## 13 2020-09-02     GM        0.0392748560       0.0392748560
## 14 2020-09-03     GM       -0.0478035868      -0.0478035868
## 15 2020-09-04     GM        0.0176390773       0.0176390773
## 16 2020-09-08     GM        0.0793333667       0.0793333667
## 17 2020-09-09     GM       -0.0132798019      -0.0132798019
## 18 2020-09-10     GM       -0.0557120796      -0.0557120796
## 19 2020-09-11     GM        0.0096121644       0.0096121644
## 20 2020-09-14     GM        0.0236375911       0.0236375911
## 21 2020-09-15     GM        0.0128287364       0.0128287364
## 22 2020-08-17      F                  NA                 NA
## 23 2020-08-18      F       -0.0128939828      -0.0128939828
## 24 2020-08-19      F       -0.0029027576      -0.0029027576
## 25 2020-08-20      F       -0.0043668122      -0.0043668122
## 26 2020-08-21      F       -0.0263157895      -0.0263157895
## 27 2020-08-24      F        0.0480480480       0.0480480480
## 28 2020-08-25      F       -0.0057306590      -0.0057306590
## 29 2020-08-26      F       -0.0172910663      -0.0172910663
## 30 2020-08-27      F        0.0131964809       0.0131964809
## 31 2020-08-28      F        0.0043415340       0.0043415340
## 32 2020-08-31      F       -0.0172910663      -0.0172910663
## 33 2020-09-01      F        0.0014662757       0.0014662757
## 34 2020-09-02      F        0.0175695461       0.0175695461
## 35 2020-09-03      F       -0.0187050360      -0.0187050360
## 36 2020-09-04      F        0.0117302053       0.0117302053
## 37 2020-09-08      F        0.0188405797       0.0188405797
## 38 2020-09-09      F       -0.0085348506      -0.0085348506
## 39 2020-09-10      F       -0.0086083214      -0.0086083214
## 40 2020-09-11      F        0.0130246020       0.0130246020
## 41 2020-09-14      F        0.0171428571       0.0171428571
## 42 2020-09-15      F       -0.0112359551      -0.0112359551
## 43 2020-08-17   TWTR                  NA                 NA
## 44 2020-08-18   TWTR        0.0010533842       0.0010533842
## 45 2020-08-19   TWTR        0.0231518297       0.0231518297
## 46 2020-08-20   TWTR        0.0017999486       0.0017999486
## 47 2020-08-21   TWTR        0.0077001799       0.0077001799
## 48 2020-08-24   TWTR        0.0313297010       0.0313297010
## 49 2020-08-25   TWTR        0.0014817732       0.0014817732
## 50 2020-08-26   TWTR        0.0130703579       0.0130703579
## 51 2020-08-27   TWTR       -0.0167965669      -0.0167965669
## 52 2020-08-28   TWTR        0.0168358756       0.0168358756
## 53 2020-08-31   TWTR       -0.0119308011      -0.0119308011
## 54 2020-09-01   TWTR        0.0140463275       0.0140463275
## 55 2020-09-02   TWTR        0.0612392680       0.0612392680
## 56 2020-09-03   TWTR       -0.0467139247      -0.0467139247
## 57 2020-09-04   TWTR       -0.0422772510      -0.0422772510
## 58 2020-09-08   TWTR       -0.0421369461      -0.0421369461
## 59 2020-09-09   TWTR        0.0358733186       0.0358733186
## 60 2020-09-10   TWTR       -0.0154196154      -0.0154196154
## 61 2020-09-11   TWTR       -0.0005135045      -0.0005135045
## 62 2020-09-14   TWTR       -0.0041099409      -0.0041099409
## 63 2020-09-15   TWTR        0.0082538045       0.0082538045
l.out$df.tickers %>% ggplot(aes(x = ref.date, y = price.close)) +
   geom_line() +
   facet_wrap(~ticker, scales = 'free_y')