Revision 2fbf492259e0eb59dd7f7008ec1a6261b79f88a5 authored by Jeffrey A. Ryan on 08 June 2009, 00:00:00 UTC, committed by Gabor Csardi on 08 June 2009, 00:00:00 UTC
1 parent c3f7fba
Raw File
getSplits.R
`getSplits` <-
function(Symbol,from='1970-01-01',to=Sys.Date(),env=.GlobalEnv,src='yahoo',
         auto.assign=FALSE,auto.update=FALSE,verbose=FALSE,...) {

  # Function written by Joshua Ulrich, using
  # getSymbols.yahoo as a guide.
  Symbol.name <- ifelse(!is.character(Symbol),
                        deparse(substitute(Symbol)),
                        as.character(Symbol))

  yahoo.URL <- 'http://ichart.finance.yahoo.com/x?s='
  from.y <- as.numeric(strsplit(as.character(from), "-", )[[1]][1])
  from.m <- as.numeric(strsplit(as.character(from), "-", )[[1]][2])-1
  from.d <- as.numeric(strsplit(as.character(from), "-", )[[1]][3])
  to.y <- as.numeric(strsplit(as.character(to), "-", )[[1]][1])
  to.m <- as.numeric(strsplit(as.character(to), "-", )[[1]][2])
  to.d <- as.numeric(strsplit(as.character(to), "-", )[[1]][3])

  tmp <- tempfile()
  download.file(paste(yahoo.URL,Symbol.name, "&a=", 
            from.m, "&b=", sprintf("%.2d", from.d), "&c=", from.y, 
            "&d=", to.m, "&e=", sprintf("%.2d", to.d), "&f=", 
            to.y, "&g=v&y=0&z=30000", 
            sep = ""), destfile = tmp, quiet = !verbose)
  fr <- read.table(tmp, skip=1, fill=TRUE, as.is=TRUE, sep=",")
  fr <- fr[order(fr[,"V2"]),]
  unlink(tmp)

  spl <- data.frame( split=fr[fr[,"V1"]=="SPLIT","V3"],
    row.names=as.Date(as.character(fr[fr[,"V1"]=="SPLIT","V2"]),"%Y%m%d"),
    stringsAsFactors=FALSE )

  if(NROW(spl)==0) {
    spl <- NA
  } else {
    colnames(spl) <- paste(Symbol.name,'spl',sep='.')
    spl[,1] <- sub(":","/", spl[,1])
    spl[,1] <- 1 / sapply( parse( text=spl[,1] ), eval )
    spl <- as.xts(spl)
  }

  if(is.xts(Symbol)) {
    if(auto.update) {
      xtsAttributes(Symbol) <- list(dividends=spl)
      assign(Symbol.name,Symbol,envir=env)
    }
  } else if(auto.assign) {
      assign(paste(Symbol.name,'spl',sep='.'),spl,envir=env)
  } else spl
}
back to top