source des données historiques de stock

J’essaie de faire un simulateur de bourse (peut-être éventuellement de devenir une IA prédictive), mais j’ai du mal à trouver des données à utiliser. Je cherche une source (si tout va bien, gratuite) de données historiques sur les marchés boursiers.

Idéalement, ce serait un dataset très fines (deuxième ou minute) avec le prix et le volume de chaque symbole sur NASDAQ et NYSE (et peut-être d’autres si je deviens aventureux). Est-ce que quelqu’un connaît une source pour une telle information?

J’ai trouvé cette question qui indique que Yahoo offre des données historiques au format CSV, mais je n’ai pas été en mesure de savoir comment l’obtenir lors d’un examen rapide du site lié.

Je n’aime pas non plus l’idée de télécharger les données au coup par coup dans des fichiers CSV … J’imagine que Yahoo se fâcherait et me ferait taire après quelques milliers de demandes.

J’ai aussi découvert une autre question qui m’a fait penser que je gagnerais le gros lot, mais malheureusement, ce site d’OpenTick semble avoir fermé ses portes … tant pis, car je pense qu’ils étaient exactement ce que je voulais.

Je serais également en mesure d’utiliser des données qui ne font qu’ouvrir / fermer le prix et le volume de chaque symbole chaque jour, mais je préférerais toutes les données si je peux les obtenir. D’autres suggestions?

Permettez-moi d’append mes 2 ¢, mon travail consiste à obtenir de bonnes données pour un fonds spéculatif, j’ai vu beaucoup de stream de données et de fournisseurs de données historiques. Cela concerne principalement les données boursières américaines.

Pour commencer, si vous avez de l’argent, ne vous préoccupez pas du téléchargement des données de Yahoo, obtenez les données de fin de journée directement à partir des données CSI , c’est là que Yahoo obtient également ses données EOD AFAIK. Ils ont une API où vous pouvez extraire les données au format de votre choix. Je pense que l’abonnement annuel pour les données est de quelques dollars de 100 dollars.

Le principal problème avec le téléchargement de données à partir d’un service gratuit est que vous n’obtenez que des stocks qui existent encore, ce que l’on appelle le biais de survie et vous donne de mauvais résultats si vous examinez de nombreuses valeurs. loin et pas ceux qui ont été retirés de la liste.

Pour jouer avec certaines données intraday, je me penche sur IQFeed , qui fournit plusieurs API pour extraire des données historiques, même si elles constituent principalement une panoplie de stream en temps réel. Mais ici, il y a pas mal d’options, certains courtiers proposent même des téléchargements de données historiques via leurs API, choisissez simplement votre poison.

MAIS généralement toutes ces données ne sont pas très propres, une fois que vous avez vraiment testé, vous verrez que certaines actions sont manquantes ou apparaissent comme deux symboles différents, ou que les fractionnements d’actions ne sont pas correctement pris en compte, etc. les données sur les dividendes sont également nécessaires et vous commencez à tourner en rond, en corrigeant les données à partir de 100 sources de données différentes, etc. Donc, pour commencer avec un “discount” de stream de données fera l’affaire, mais dès que vous exécuterez des backtests plus complets, vous pourriez rencontrer des problèmes en fonction de ce que vous faites. Si vous examinez, disons, les titres S & P 500, ce ne sera pas vraiment un problème et un stream intraday “bon marché” fera l’affaire.

Ce que vous ne trouverez pas, ce sont des données intraday gratuites. Je veux dire que vous pourriez trouver des exemples, je suis sûr qu’il y a quelque part 5 ans de données de tics MSFT qui circulent, mais cela ne vous mènera pas très loin.

Ensuite, si vous avez besoin de choses réelles (carnet de commandes de niveau II, tous les ticks se sont produits à tous les échanges), une option «abordable», mais excellente, est Nanex . Ils vous enverront un disque contenant des téraoctets de données. Si je me souviens bien, il y a environ 3 000 à 4 000 dollars par an de données. Mais croyez-moi, une fois que vous aurez compris à quel point il est difficile d’obtenir de bonnes données intraday, vous ne penserez pas que cela représente beaucoup d’argent.

Ne pas vous décourager, mais obtenir de bonnes données, c’est difficile, en fait, beaucoup de fonds spéculatifs et de banques dépensent des centaines de milliers de dollars par mois pour obtenir des données fiables. Encore une fois, vous pouvez commencer quelque part et ensuite partir de là, mais il est bon de le voir un peu en contexte.


Edit: La réponse ci-dessus est de ma propre expérience. Cet article de Caltech sur les sources de données disponibles donnera plus d’idées, et recommande particulièrement QuantQuote .

CETTE REPONSE N’EST PLUS EXACTE A CE QUE LA ALIMENTATION DE YAHOO A CESSÉ D’EXISTER

En utilisant l’approche CSV de Yahoo ci-dessus, vous pouvez également obtenir des données historiques! Vous pouvez procéder au reverse engineering de l’exemple suivant:

http://ichart.finance.yahoo.com/table.csv?s=YHOO&d=0&e=28&f=2010&g=d&a=3&b=12&c=1996&ignore=.csv

Essentiellement:

sn = TICKER a = fromMonth-1 b = fromDay (two digits) c = fromYear d = toMonth-1 e = toDay (two digits) f = toYear g = d for day, m for month, y for yearly 

La liste complète des parameters:

 a Ask a2 Average Daily Volume a5 Ask Size b Bid b2 Ask (Real-time) b3 Bid (Real-time) b4 Book Value b6 Bid Size c Change & Percent Change c1 Change c3 Commission c6 Change (Real-time) c8 After Hours Change (Real-time) d Dividend/Share d1 Last Trade Date d2 Trade Date e Earnings/Share e1 Error Indication (returned for symbol changed / invalid) e7 EPS Estimate Current Year e8 EPS Estimate Next Year e9 EPS Estimate Next Quarter f6 Float Shares g Day's Low h Day's High j 52-week Low k 52-week High g1 Holdings Gain Percent g3 Annualized Gain g4 Holdings Gain g5 Holdings Gain Percent (Real-time) g6 Holdings Gain (Real-time) i More Info i5 Order Book (Real-time) j1 Market Capitalization j3 Market Cap (Real-time) j4 EBITDA j5 Change From 52-week Low j6 Percent Change From 52-week Low k1 Last Trade (Real-time) With Time k2 Change Percent (Real-time) k3 Last Trade Size k4 Change From 52-week High k5 Percent Change From 52-week High l Last Trade (With Time) l1 Last Trade (Price Only) l2 High Limit l3 Low Limit m Day's Range m2 Day's Range (Real-time) m3 50-day Moving Average m4 200-day Moving Average m5 Change From 200-day Moving Average m6 Percent Change From 200-day Moving Average m7 Change From 50-day Moving Average m8 Percent Change From 50-day Moving Average n Name n4 Notes o Open p Previous Close p1 Price Paid p2 Change in Percent p5 Price/Sales p6 Price/Book q Ex-Dividend Date r P/E Ratio r1 Dividend Pay Date r2 P/E Ratio (Real-time) r5 PEG Ratio r6 Price/EPS Estimate Current Year r7 Price/EPS Estimate Next Year s Symbol s1 Shares Owned s7 Short Ratio t1 Last Trade Time t6 Trade Links t7 Ticker Trend t8 1 yr Target Price v Volume v1 Holdings Value v7 Holdings Value (Real-time) w 52-week Range w1 Day's Value Change w4 Day's Value Change (Real-time) x Stock Exchange y Dividend Yield 

Je sais que vous vouliez “gratuit”, mais j’envisagerais sérieusement d’obtenir les données de csidata.com pour environ 300 $ / an, si j’étais vous.

C’est ce que Yahoo utilise pour fournir ses données.

Il est livré avec une API décente, et les données sont (pour autant que je sache) très propres.

Vous obtenez 10 ans d’histoire lorsque vous vous abonnez, puis des mises à jour nocturnes par la suite.

Ils prennent également soin de toutes sortes de choses désagréables comme les divisions et les dividendes pour vous. Si vous n’avez pas encore découvert le plaisir que représente le nettoyage des données, vous ne vous rendrez pas compte de ce dont vous avez besoin jusqu’à ce que votre ATS (Automated Trading System) pense que certains stocks ne sont vraiment pas chers. : 1 et vous ne l’avez pas remarqué.

Introduction:
De Yahoo, vous pouvez obtenir les prix historiques de fin de journée, ou les prix en temps réel. Les prix EOD sont incroyablement simples à télécharger. Voir mon blog pour des explications sur la façon d’obtenir les données et des exemples de code C #.

Je suis en train d’écrire un “moteur” de stream de données en temps réel qui télécharge et stocke les prix en temps réel dans une firebase database. Le moteur pourra initialement télécharger les prix historiques de Yahoo et Interactive Brokers et il pourra stocker les données dans une firebase database de votre choix: MS SQL, MySQL, SQLite, etc. informations sur mon blog quand je me rapproche de le publier (dans quelques jours).

Une autre option est eclipse trader … il vous permet d’enregistrer les données historiques avec une granularité aussi faible que 1 minute et stocke les prix localement dans un fichier texte. Il télécharge essentiellement les données en temps réel de Yahoo avec un délai de 15 minutes. Comme je voulais une solution plus robuste et que je travaillais sur un projet de grande école pour lequel nous avons besoin de données, j’ai décidé d’écrire mon propre moteur de données (que j’ai mentionné ci-dessus).

Exemple de code:
Voici un exemple de code C # qui montre comment télécharger des données en temps réel:

 public void Start() { ssortingng url = "http://finance.yahoo.com/d/quotes.csv?s=MSFT+GOOG&f=snl1d1t1ohgdr"; //Get page showing the table with the chosen indices HttpWebRequest request = null; IDatabase database = DatabaseFactory.CreateDatabase( DatabaseFactory.DatabaseType.SQLite); //csv content try { while (true) { using (Stream file = File.Create("quotes.csv")) { request = (HttpWebRequest)WebRequest.CreateDefault(new Uri(url)); request.Timeout = 30000; using (var response = (HttpWebResponse)request.GetResponse()) using (Stream input = response.GetResponseStream()) { CopyStream(input, file); } } Console.WriteLine("------------------------------------------------"); database.InsertData(Directory.GetCurrentDirectory() + "/quotes.csv"); File.Delete("quotes.csv"); Thread.Sleep(10000); // 10 seconds } } catch (Exception exc) { Console.WriteLine(exc.ToSsortingng()); Console.ReadKey(); } } 

Base de données:
Du côté de la firebase database, j’utilise une connexion OleDb au fichier CSV pour remplir un DataSet , puis je mets à jour ma firebase database actuelle via le DataSet , ce qui permet de faire correspondre directement toutes les colonnes du fichier CSV renvoyées par Yahoo. (si votre firebase database ne prend pas en charge les insertions par lot de données CSV, comme SQLite). Sinon, l’insertion des données est une ligne simple, insérez simplement le fichier CSV par lots dans votre firebase database.

Vous pouvez en savoir plus sur le formatage de l’URL ici: http://www.gummy-stuff.org/Yahoo-data.htm

Un dataset de chaque symbole sur le NASDAQ et le NYSE sur un intervalle de seconde ou de minute sera massif .

Disons qu’il y a un total de 4000 entresockets cotées sur les deux bourses (ce qui est probablement très bas puisqu’il y a plus de 3200 sociétés cotées au NASDAQ). Pour les données à un second intervalle, en supposant qu’il y ait 6,5 heures de trading par jour, cela vous donnerait 23 400 points de données par jour et par entreprise, soit environ 93 600 000 points de données au total pour cette journée. En supposant 200 jours de trading par an, cela représente environ 18 720 000 000 de points de données pour une seule année.

Vous voulez peut-être commencer par un ensemble plus petit?

NASDAQ offre 10 ans de données EOD historiques pour chaque symbole.

http://www.nasdaq.com/aspx/historical_quotes.aspx?symbol=AAPL&selected=AAPL

Vous pouvez automatiser le processus de téléchargement de ces données.

Pour les données sans biais de survie, la seule source fiable que j’ai trouvée est QuantQuote ( http://quantquote.com )

Les données sont fournies en résolution minute, seconde ou tick, liées à leurs données de stock historiques .

Il y avait une suggestion pour kibot ci-dessus. Je ferais une recherche rapide sur Google avant d’acheter chez eux, vous trouverez beaucoup de messages comme celui-ci avec des avertissements sur les problèmes de qualité des données kibot. Il est également révélateur que leur soi-disant SP500 sans biais de survie ne compte que 570 symboles pendant 14 ans. C’est pratiquement impossible, sp500 change de 1 à 2 symboles par mois .

Malheureusement, il est difficile de trouver des données historiques qui sont gratuites. Maintenant que l’opentick est mort, je ne connais aucun autre fournisseur.

Au cours d’une vie antérieure, j’ai travaillé pour un fonds de couverture doté d’un système de négociation automatisé et nous avons utilisé abondamment les données historiques.

Nous avons utilisé TickData pour notre source. Leurs prix étaient raisonnables et les données avaient une seconde résolution.

Nous avons acheté 12 années de données intraday sur Kibot.com et nous sums très satisfaits de la qualité.

En ce qui concerne les exigences de stockage: 12 ans de données d’une minute pour toutes les actions américaines (plus de 8 000 symboles) sont d’environ 100 Go.

Avec des données de tick-by-tick, la situation est peu différente. Si vous enregistrez le temps et les ventes uniquement, cela équivaudrait à environ 30 Go de données par mois pour toutes les actions américaines. Si vous souhaitez stocker les modifications de l’offre et de la demande avec les transactions, vous pouvez vous attendre à environ 150 Go par mois.

J’espère que ça aide. S’il vous plaît laissez-moi savoir s’il y a autre chose que je peux vous aider.

Permettez-moi d’append une source que je viens de découvrir, trouvée ici .

Il a beaucoup de données historiques de stock au format csv et a été recueilli par Andy Pavlo, qui, selon sa page d’accueil, est un “professeur assistant au département d’informatique de l’Université Carnegie Mellon”.

Mathematica nowoadays offre également un access aux cours actuels et historiques, voir http://reference.wolfram.com/mathematica/ref/FinancialData.html , si vous en avez une copie.

Vous pouvez utiliser Yahoo pour obtenir des données quotidiennes (un dataset beaucoup plus facile à gérer), mais vous devez structurer les URL. Voir ce lien . Vous ne faites pas beaucoup de petites demandes, vous faites moins de demandes importantes. Beaucoup de logiciels gratuits l’utilisent donc ils ne devraient pas vous arrêter.

EDIT: Ce gars le fait, peut-être que vous pouvez regarder les appels de son logiciel.

Yahoo est l’option la plus simple pour obtenir des données préliminaires gratuites. Le lien décrit dans la réponse de eckesicle pourrait être facilement utilisé dans un code python, mais vous devez d’abord avoir tous les tickers. J’utiliserais le NYSE pour cet exemple, mais cela peut aussi être utilisé pour différents échanges.

J’ai utilisé cette page wiki pour télécharger tous les tickers de l’entreprise avec le script suivant (je ne suis pas un pythoniste très talentueux, désolé si ce code n’est pas très efficace):

 import ssortingng import urllib2 from bs4 import BeautifulSoup global f def download_page(url): aurl = urllib2.urlopen(url) soup = BeautifulSoup(aurl.read()) print url for row in soup('table')[1]('tr'): tds = row('td') if (len(tds) > 0): f.write(tds[1].ssortingng + '\n') f = open('stock_names.txt', 'w') url_part1 = 'http://en.wikipedia.org/wiki/Companies_listed_on_the_New_York_Stock_Exchange_' url = url_part1 + '(0-9)' download_page(url) for letter in ssortingng.uppercase[:26]: url_part2 = letter url = url_part1 + '(' + letter + ')' download_page(url) f.close() 

Pour télécharger chaque ticker, j’ai utilisé un autre script assez similaire:

 import ssortingng import urllib2 from bs4 import BeautifulSoup global f url_part1 = 'http://ichart.finance.yahoo.com/table.csv?s=' url_part2 = '&d=0&e=28&f=2010&g=d&a=3&b=12&c=1996&ignore=.csv' print "Starting" f = open('stock_names.txt', 'r') file_content = f.readlines() count = 1; print "About %d tickers will be downloaded" % len(file_content) for ticker in file_content: ticker = ticker.ssortingp() url = url_part1 + ticker + url_part2 try: # This will cause exception on a 404 response = urllib2.urlopen(url) print "Downloading ticker %s (%d out of %d)" % (ticker, count, len(file_content)) count = count + 1 history_file = open('C:\\Users\\Nitay\\Desktop\\Historical Data\\' + ticker + '.csv', 'w') history_file.write(response.read()) history_file.close() except Exception, e: pass f.close() 

Notez que l’inconvénient majeur de cette méthode réside dans le fait que différentes données sont disponibles pour différentes sociétés. Les entresockets qui ne disposent pas de données dans les dates demandées (nouvellement répertoriées) vous obtiendront une page 404.

N’oubliez pas que cette méthode n’est utile que pour les données préliminaires. Si vous voulez vraiment tester votre algorithme, vous devriez payer un peu et utiliser un fournisseur de données de confiance comme CSIData ou d’autres.

Pourquoi ne pas modéliser une fausse bourse avec Brownian Motion?

Beaucoup de ressources pour le faire. Facile à mettre en œuvre.

http://introcs.cs.princeton.edu/java/98simulation/

J’utilise le eodData.com. Son joli prix décemment. Pour 30 dollars par mois, vous obtenez 30 jours de barres de 1,5 et 60 minutes pour tous les échanges américains et 1 an de données EOD pour la plupart des autres.

Je crawl finance.google.com (pour les citations) – ou finance.yahoo.com.

Les deux renverront des pages HTML pour la plupart des échanges à travers le monde, y compris l’historique. Il suffit ensuite d’parsingr le code HTML pour extraire ce dont vous avez besoin.

Je l’ai fait par le passé, avec beaucoup de succès. Sinon, si vous ne craignez pas d’utiliser Perl – il existe plusieurs modules sur CPAN qui ont fait ce travail pour vous – c’est-à-dire extraire des devis de Google / Yahoo.

Pour plus d’informations, voir Historique des devis

Un de mes anciens projets allait utiliser des données librement téléchargeables d’ EODData .

Jetez un coup d’œil à l’API Mergent Historical Securities Data – http://www.mergent.com/servius