? Yahoo Finance
###############################################################################
# getSymbols interface to Yahoo today's delayed qoutes
# based on getQuote.yahoo from quantmod package
###############################################################################
getQuote.yahoo.today <- function(Symbols) {
require('data.table')
what = yahooQF(names = spl('Symbol,Last Trade Time,Last Trade Date,Open,Days High,Days Low,Last Trade (Price Only),Volume'))
names = spl('Symbol,Time,Date,Open,High,Low,Close,Volume')
all.symbols = lapply(seq(1, len(Symbols), 100), function(x) na.omit(Symbols[x:(x + 99)]))
out = c()
for(i in 1:len(all.symbols)) {
# download
url = paste('http://download.finance.yahoo.com/d/quotes.csv?s=',
join( trim(all.symbols[]), ','),
'&f=', what[[1]], sep = '')
txt = join(readLines(url),'\n')
data = fread(paste0(txt,'\n'), stringsAsFactors=F, sep=',')
setnames(data,names)
setkey(data,'Symbol')
out = rbind(out, data)
}
out
}
Next we can run the getQuote.yahoo.today function from 9:30 to 16:00 every minute and record market snap shoots. Please note that you will have to make some judgement calls in terms of how you want to deal with highs and lows.
Symbols = spl('IBM,AAPL')
prev = c()
while(T) {
out = getQuote.yahoo.today(Symbols)
if (is.null(prev))
for(i in 1:nrow(out)) {
cat(names(out), '\n', sep=',', file=paste0(out$Symbol,'.csv'), append=F)
cat(unlist(out), '\n', sep=',', file=paste0(out$Symbol,'.csv'), append=T)
}
else
for(i in 1:nrow(out)) {
s0 = prev[Symbol==out$Symbol]
s1 = out
s1$Volume = s1$Volume - s0$Volume
s1$Open = s0$Close
s1$High = iif(s1$High > s0$High, s1$High, max(s1$Close, s1$Open))
s1$Low = iif(s1$Low < s0$Low , s1$Low , min(s1$Close, s1$Open))
cat(unlist(s1), '\n', sep=',', file=paste0(out$Symbol,'.csv'), append=T)
}
# copy
prev = out
# sleep 1 minute
Sys.sleep(60)
}