yHist

Une fonction pour télécharger des séries de prix via l’API de finance.yahoo.com.

Arguments :

  • sym, le symbole identifiant la série, i.e. YHOO pour les cours de l’actions de Yahoo! ;
  • from, date de début : un objet Date ou une chaine de caractère au format ISO 8601 (yyyy-mm-dd) ;
  • to, date de fin : un objet Date ou une chaine de caractère qui respecte la norme ISO 8601 (Sys.Date() par défaut) ;
  • freq, la fréquence des données : d pour des donnés quotidiennes, w pour des données hebdomadaires ou m pour des données mensuelles ;
  • flds, les champs à retourner en plus de Sym et Date symbolisés par une lettre : o pour l’ouverture, h pour le plus haut, l pour le plus bas, c pour la clôture, v pour le volume et a pour la clôture ajustée (tous par défaut).

yHist renvoie un dataframe. Utilisée avec plusieurs symboles, les données sont empilées les unes au-dessus des autres.

yHist = function(sym, from, to = Sys.Date(), freq = "d", flds = "ohlcva") {
      f <- as.Date(from[1])
      t <- as.Date(to[1])
      q <- tolower(substr(freq[1], 1, 1))
      if(! q %in% c("d", "w", "m")) stop("! freq %in% c('d', 'w', 'm')")
      tmp <- strsplit(flds[1], "")[[1]]
      o <- c(o = "Open", h = "High", l = "Low", c = "Close", v = "Volume",
            a="Adj.Close")
      if(any(! tmp %in% names(o))) stop("flds must be in 'ohlcva'")
      cn <- c("Sym", "Date", unname(o[tmp]))
      if(length(sym) > 1) {
            k <- lapply(sym, yHist, from = from, to = to, freq = freq,
                 flds = flds)
            res <- do.call(rbind, k)
      } else {
            url <- paste(c(
                 "http://ichart.yahoo.com/table.csv?",
                  "s=", sym,
                  "&a=", as.integer(format(f, "%m")) - 1,
                  "&b=", as.integer(format(f, "%d")),
                  "&c=", as.integer(format(f, "%Y")),
                  "&d=", as.integer(format(t, "%m")) - 1,
                  "&e=", as.integer(format(t, "%d")),
                  "&f=", as.integer(format(t, "%Y")),
                  "&g=", q,
                  "&ignore=.csv"), collapse = "")
            ans <- try(read.csv(url), silent = TRUE)
            if(class(ans) == "try-error") {
                  res <- NULL
            } else {
                  ans <- ans[order(ans$Date), ]
                  res <- subset(cbind(Sym = sym, ans), select = cn)
                  rownames(res) <- NULL
            }
      }
      return(res)
}

Exemple :

> yHist(c("GOOG", "AAPL", "YHOO", "MSFT"), from = "2014-01-01")
     Sym       Date    Open    High     Low   Close   Volume Adj.Close
1   GOOG 2014-01-02 1115.46 1117.75 1108.26 1113.12  1821400   1113.12
2   GOOG 2014-01-03 1115.00 1116.93 1104.93 1105.00  1666700   1105.00
3   GOOG 2014-01-06 1113.01 1118.86 1106.44 1117.32  1769300   1117.32
4   GOOG 2014-01-07 1125.00 1139.69 1121.16 1138.86  2552600   1138.86
5   GOOG 2014-01-08 1146.00 1147.32 1133.29 1141.23  2242500   1141.23
6   GOOG 2014-01-09 1143.44 1144.22 1125.56 1130.24  2084500   1130.24
...

Aucun commentaire:

Enregistrer un commentaire