Scaricare Storici Intraday da Yahoo (1 Viewer)

tdazio

Nuovo forumer

Già da un po’ sembra possibile scaricare da yahoo.finance gli storici intraday ( a 5 min) dei vari titoli attraverso una semplice chiamata html del tipo:

http://chartapi.finance.yahoo.com/instrument/1.0/F.MI/chartdata;type=quote;range=3d/csv

In questo caso si tratta di 3 gg di dati titolo Fiat
La logica sembra essere:

http://chartapi.finance.yahoo.com/instrument/1.0/[TIKER]/chartdata;type=quote;range=[NDAYS]d/csv

dove:
[TIKER] il tiker secondo la sintassi yahoo
[NDAYS] il num. di giorni dello storico (il max sembra essere 3 settimane)

Lanciando il primo link, ciò che esce sembra a prima vista un po’ complicato:

uri:/instrument/1.0/F.MI/chartdata;type=quote;range=3d/csv
ticker:f.mi
Company-Name:FIAT
Exchange-Name:MIL
unit:MIN
timezone:CET
currency:EUR
gmtoffset:3600
previous_close:7.5950
range:20140224,1393228800,1393259400
range:20140225,1393315200,1393345800
range:20140226,1393401600,1393432200
Timestamp:1393228800,1393432200
labels:1393228800,1393315200,1393401600
values:Timestamp,close,high,low,open,volume
close:7.5350,7.7550
high:7.5350,7.7600
low:7.5350,7.7500
open:7.5350,7.7600
volume:0,1000700
1393229091,7.5950,7.6100,7.5800,7.5950,234900
1393229394,7.5700,7.5950,7.5700,7.5850,418700
1393229684,7.5850,7.5900,7.5650,7.5750,165400
. . . .
. . . . etc.

In pratica, dopo una serie di linee che identificano la struttura del file, iniziano i dati veri e propri con logica OHLC-V preceduti dalla data in un formato strano. Sembra essere ISO C99, in pratica la data espressa in secondi da una precisa origine.
Dopo qualche ricerca ho scritto una semplice function R per il download e la conversione dei dati in formato xts:


#-----------------------------------------------------
# Function lettura storico intraday da yahoo.finance
#
# input:
# tiker, tiker con logica yahoo tra "" (es. "F.MI")
# nDays, num. giorni di storico tra "" (es. "15")
#-----------------------------------------------------
#
getYahoo.intraday <- function(tiker,nDays){
url <- paste("http://chartapi.finance.yahoo.com/instrument/1.0/",tiker,"/chartdata;type=quote;range=",nDays,"d/csv",sep="")
nskip <- as.numeric(nDays)+17
data <- read.csv(url, skip=nskip, header=F, stringsAsFactors=F)
data.xts <- xts(data[,-1],as.POSIXct(data$V1,origin="1970-01-01",tz="GMT"))
indexTZ(data.xts) <- "Europe/Rome" # "America/New_York"
colnames(data.xts) <- c("Open", "High", "Low", "Close", "Volume")
options(warn=-1)
data.xts
}
#------------------------------------------------------

es. di utilizzo scaricando 15 gg di dati intraday del titolo Eni

library(quantmod)
p <- getYahoo.intraday("ENI.MI","15")
tail(p)
Sys.time()

Se lanciate lo script a mercato aperto, noterete che l’ultimo prezzo ha un delay di circa 15 min, tipico ritardo con cui vengono fornite le quote yahoo.finance.
A questo punto, non avendo di meglio, diventa facile creare uno script di aggiornamento giornaliero a mercati chiusi, di un proprio database intraday.

-tdazio

PS. Esiste anche la possibilità di scaricare dati intraday da google.finance, in questo caso con qualche vantaggio: dati probabilmente di miglior qualità, scelta del time-frame da 1 min in su e dati realtime per alcuni mercati, tra cui USA e ITALIA.
Ci sto lavorando, stay in tune

 

tdazio

Nuovo forumer
indovina cos'è questo:


f <- getYahoo.intraday("F.MI","15")
g <- getYahoo.intraday("G.MI","15")
rf <- na.omit(ROC(f[,4]))
rg <- na.omit(ROC(g[,4]))
mm <- na.omit(merge(rf,rg))
z <- apply.daily(mm, function(x) cor(x[,1],x[,2]))
zx <- na.omit(z)
plot(zx,type="l")
zx

:)
 

Cren

Forumer storico
indovina cos'è questo:


f <- getYahoo.intraday("F.MI","15")
g <- getYahoo.intraday("G.MI","15")
rf <- na.omit(ROC(f[,4]))
rg <- na.omit(ROC(g[,4]))
mm <- na.omit(merge(rf,rg))
z <- apply.daily(mm, function(x) cor(x[,1],x[,2]))
zx <- na.omit(z)
plot(zx,type="l")
zx

:)
Pearson 15' diviso per giorni?
 

Users who are viewing this thread

Alto