¿Importar el precio de las acciones de Yahoo Finance a R?
26
Me gustaría importar el precio de la acción "Last Trade" de Yahoo Finance a R. La intención es trabajar con datos (casi) en tiempo real. ¿Hay alguna solución?
Gracias de antemano por cualquier comentario útil.
Esto realmente no es una pregunta estadística (¿tal vez esto podría moverse a SO?), Pero hay una buena función en quantmod que hace lo que Dirk ha hecho a mano. Ver getQuote()y yahooQF(). Al escribir yahooQF()aparecerá un menú con todos los posibles formatos de cotización que puede usar.
Gracias por su respuesta. Soy bastante nuevo aquí en stackexchange. ¿Cómo puedo mover mi pregunta a SO?
Steven
@ Steven: De nada. No estoy seguro de cómo mover las preguntas; Creo que los moderadores pueden hacerlo.
Joshua Ulrich
15
Eso es bastante fácil dado que R puede leer directamente de una URL determinada. La clave es simplemente saber cómo formar la URL. Aquí hay un ejemplo rápido y sucio basado en el código que Dj Padzensky escribió a fines de la década de 1990 y que he estado manteniendo en el módulo Perl Yahoo-FinanceQuote (que por supuesto también está en CPAN aquí ) durante casi el mismo tiempo.
Si conoce un poco de R, el código debe explicarse por sí mismo. Obtener documentación para la cadena de formato es un poco más complicado pero, por ejemplo, el módulo Perl tiene algo.
La columna tres es tu último intercambio. Durante las horas de mercado abierto obtendrá menos NA y más variabilidad de datos. Pero tenga en cuenta que la mayoría de los precios tienen un retraso de 15 o 20 minutos, pero algunos índices son en tiempo real. Los datos en tiempo real son un gran negocio y un gran ingreso para los intercambios, por lo que tienden a no revelarlos. Además, y si no recuerdo mal, las pantallas más nuevas y en tiempo real en las páginas de Finanzas en Google y Yahoo usan algo más AJAXy que es más difícil de extraer del exterior.
esto no funcionó para mí hoy, no he podido descargar el índice Nasdaq compuesto desde antes de 2001, desde mis fuentes de datos habituales (Quandl y quantmod) por alguna razón, y estaba buscando alternativas.
PatrickT
4
Aquí hay una pequeña función que escribí para recopilar y trazar datos "pseudo-en tiempo real" de yahoo:
require(quantmod)Times<- NULL
Prices<- NULL
while(1){
tryCatch({#Load current quoteYear<-1970
currentYear <-as.numeric(format(Sys.time(),'%Y'))while(Year!= currentYear){#Sometimes yahoo returns bad quotes
currentQuote <- getQuote('SPY')Year<-as.numeric(format(currentQuote['Trade Time'],'%Y'))}#Add current quote to the datasetif(is.null(Times)){Times<-Sys.time()-15*60#Quotes are delayed 15 minutesPrices<- currentQuote['Last']}else{Times<- c(Times,Sys.time())Prices<- rbind(Prices,currentQuote['Last'])}#Convert to 1-minute barsData<- xts(Prices,order.by=Times)Data<- na.omit(to.minutes(Data,indexAt='endof'))#Plot the data when we have enoughif(nrow(Data)>5){
chartSeries(Data,theme='white',TA='addRSI(n=5);addBBands(n=5)')}#Wait 1 second to avoid overwhelming the serverSys.sleep(1)#On errors, sleep 10 seconds and hope it goes away},error=function(e){print(e);Sys.sleep(10)})}
Gracias por este script, sin embargo, tengo un problema tonto con un "}" No puedo ejecutarlo :(
@acabahe Todavía funciona bien para mí. Asegúrate de agarrar todo, desde require(quantmod)el final }por sí solo en la última línea. Deberá esperar al menos 5 minutos antes de que aparezca un gráfico.
Respuestas:
Esto realmente no es una pregunta estadística (¿tal vez esto podría moverse a SO?), Pero hay una buena función en quantmod que hace lo que Dirk ha hecho a mano. Ver
getQuote()
yyahooQF()
. Al escribiryahooQF()
aparecerá un menú con todos los posibles formatos de cotización que puede usar.fuente
Eso es bastante fácil dado que R puede leer directamente de una URL determinada. La clave es simplemente saber cómo formar la URL. Aquí hay un ejemplo rápido y sucio basado en el código que Dj Padzensky escribió a fines de la década de 1990 y que he estado manteniendo en el módulo Perl Yahoo-FinanceQuote (que por supuesto también está en CPAN aquí ) durante casi el mismo tiempo.
Si conoce un poco de R, el código debe explicarse por sí mismo. Obtener documentación para la cadena de formato es un poco más complicado pero, por ejemplo, el módulo Perl tiene algo.
La columna tres es tu último intercambio. Durante las horas de mercado abierto obtendrá menos NA y más variabilidad de datos. Pero tenga en cuenta que la mayoría de los precios tienen un retraso de 15 o 20 minutos, pero algunos índices son en tiempo real. Los datos en tiempo real son un gran negocio y un gran ingreso para los intercambios, por lo que tienden a no revelarlos. Además, y si no recuerdo mal, las pantallas más nuevas y en tiempo real en las páginas de Finanzas en Google y Yahoo usan algo más AJAXy que es más difícil de extraer del exterior.
fuente
Aquí hay una pequeña función que escribí para recopilar y trazar datos "pseudo-en tiempo real" de yahoo:
Produce gráficos como este:
También puede usar los datos para otros fines.
fuente
require(quantmod)
el final}
por sí solo en la última línea. Deberá esperar al menos 5 minutos antes de que aparezca un gráfico.fuente