Search code examples
rsymbolsquantmodstock

Calling a list of tickers in quantmod using R


I want to get some data from a list of Chinese stocks using quantmod.

The list is like below:

002705.SZ -- 002730.SZ (in this sequence, there are some tickers matched with Null stock, for example, there is no stock called 002720.SZ)

300357.SZ -- 300402.SZ
603188.SS
603609.SS
603288.SS
603306.SS
603369.SS

I want to write a loop to run all these stocks to get the data from each of them and save them into one data frame.


Solution

  • This should get you started.

    library(quantmod)
    library(stringr)   # for str_pad
    stocks <- paste(str_pad(2705:2730,width=6,side="left",pad="0"),"SZ",sep=".")
    get.stock <- function(s) {
      s <- try(Cl(getSymbols(s,auto.assign=FALSE)),silent=T)
      if (class(s)=="xts") return(s)
      return (NULL)
    }
    result <- do.call(cbind,lapply(stocks,get.stock))
    head(result)
    #            X002705.SZ.Close X002706.SZ.Close X002707.SZ.Close X002708.SZ.Close X002709.SZ.Close X002711.SZ.Close X002712.SZ.Close X002713.SZ.Close
    # 2014-01-21            15.25            27.79               NA            17.26               NA               NA               NA               NA
    # 2014-01-22            14.28            28.41               NA            16.56               NA               NA               NA               NA
    # 2014-01-23            13.65            27.78            33.62            15.95            19.83               NA            36.58               NA
    # 2014-01-24            15.02            30.56            36.98            17.55            21.81               NA            40.24               NA
    # 2014-01-27            14.43            31.26            40.68            18.70            23.99            26.34            44.26               NA
    # 2014-01-28            14.18            30.01            44.75            17.66            25.57            28.97            48.69               NA
    

    This takes advantage of the fact that getSymbols(...) returns either an xts object, or a character string with an error message if the fetch fails.

    Note that cbind(...) for xts objects aligns according to the index, so it acts like merge(...).

    This produces an xts object, not a data frame. To convert this to a data.frame, use:

    result.df <- data.frame(date=index(result),result)