Importer le cours des actions de Yahoo Finance dans R?
26
Je voudrais importer le prix de l'action "Last Trade" de Yahoo Finance dans R. L'intention est de travailler avec des données (presque) en temps réel. Y a-t-il des solutions?
Ce n'est vraiment pas une question de statistiques (peut-être que cela pourrait être déplacé vers SO?), Mais il y a une belle fonction dans quantmod qui fait ce que Dirk a fait à la main. Voir getQuote()et yahooQF(). La saisie yahooQF()fera apparaître un menu de tous les formats de devis possibles que vous pouvez utiliser.
Merci pour votre réponse. Je suis assez nouveau ici à stackexchange. Comment puis-je déplacer ma question vers SO?
Steven
@Steven: Je vous en prie. Je ne sais pas comment déplacer les questions; Je pense que les modérateurs peuvent le faire.
Joshua Ulrich
15
C'est assez facile étant donné que R peut lire directement une URL donnée. La clé est simplement de savoir comment former l'URL. Voici un exemple rapide et sale basé sur le code écrit par Dj Padzensky à la fin des années 1990 et que je maintiens dans le module Perl Yahoo-FinanceQuote (qui est bien sûr également sur CPAN ici ) depuis presque aussi longtemps.
Si vous connaissez un petit R, le code devrait être explicite. Obtenir de la documentation pour la chaîne de format est un peu plus compliqué mais par exemple le module Perl en a.
La troisième colonne est votre dernier échange. Pendant les heures d'ouverture du marché, vous obtiendrez moins de NA et plus de variabilité des données. Mais notez cependant que la plupart des prix sont retardés de 15 ou 20 minutes --- mais certains indices sont en temps réel. Les données en temps réel sont une grande entreprise et des revenus importants pour les échanges, ils ont donc tendance à ne pas les divulguer. De plus, et si je me souviens bien, les affichages plus récents et plus en temps réel sur les pages Finance de Google et Yahoo utilisent quelque chose de plus AJAXy qui est plus difficile à traire de l'extérieur.
cela n'a pas fonctionné pour moi aujourd'hui, je n'ai pas pu télécharger l'index composite Nasdaq datant d'avant 2001, à partir de mes sources de données habituelles (Quandl et quantmod) pour une raison quelconque, et je cherchais des alternatives.
PatrickT
4
Voici une petite fonction que j'ai écrite pour rassembler et tracer des données "pseudo-temps réel" 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)})}
Il produit des graphiques comme celui-ci:
Vous pouvez également utiliser les données à d'autres fins.
Merci pour ce script, mais je reçois un problème idiot avec un "}" Je ne peux pas l'exécuter :(
@acabahe Cela fonctionne toujours bien pour moi. Assurez-vous de tout saisir de require(quantmod)la fin }à la dernière ligne. Vous devrez attendre au moins 5 minutes avant de voir apparaître un graphique.
Réponses:
Ce n'est vraiment pas une question de statistiques (peut-être que cela pourrait être déplacé vers SO?), Mais il y a une belle fonction dans quantmod qui fait ce que Dirk a fait à la main. Voir
getQuote()
etyahooQF()
. La saisieyahooQF()
fera apparaître un menu de tous les formats de devis possibles que vous pouvez utiliser.la source
C'est assez facile étant donné que R peut lire directement une URL donnée. La clé est simplement de savoir comment former l'URL. Voici un exemple rapide et sale basé sur le code écrit par Dj Padzensky à la fin des années 1990 et que je maintiens dans le module Perl Yahoo-FinanceQuote (qui est bien sûr également sur CPAN ici ) depuis presque aussi longtemps.
Si vous connaissez un petit R, le code devrait être explicite. Obtenir de la documentation pour la chaîne de format est un peu plus compliqué mais par exemple le module Perl en a.
La troisième colonne est votre dernier échange. Pendant les heures d'ouverture du marché, vous obtiendrez moins de NA et plus de variabilité des données. Mais notez cependant que la plupart des prix sont retardés de 15 ou 20 minutes --- mais certains indices sont en temps réel. Les données en temps réel sont une grande entreprise et des revenus importants pour les échanges, ils ont donc tendance à ne pas les divulguer. De plus, et si je me souviens bien, les affichages plus récents et plus en temps réel sur les pages Finance de Google et Yahoo utilisent quelque chose de plus AJAXy qui est plus difficile à traire de l'extérieur.
la source
Voici une petite fonction que j'ai écrite pour rassembler et tracer des données "pseudo-temps réel" de yahoo:
Il produit des graphiques comme celui-ci:
Vous pouvez également utiliser les données à d'autres fins.
la source
require(quantmod)
la fin}
à la dernière ligne. Vous devrez attendre au moins 5 minutes avant de voir apparaître un graphique.la source