Comment obtenir une liste complète des symboles boursiers de Yahoo Finance? [fermé]

100

J'ai cherché à l'infini sur Google une méthode permettant d'obtenir une liste complète (et mise à jour quotidiennement) de tous les symboles boursiers Yahoo disponibles sur http://finance.yahoo.com

Yahoo a des informations sur les actions, les contrats à terme, etc. pour de nombreuses bourses dans le monde entier, et j'aimerais une liste combinée de tous les symboles boursiers disponibles à travers eux. J'ai essayé YQL mais ils ont une restriction de clause "where symbol = (or in)" donc je ne peux pas sélectionner * parmi les symboles.

Donc, fondamentalement, obtenir des informations détaillées pour un seul symbole ou plusieurs symboles à la fois est facile, mais je n'arrive tout simplement pas à trouver comment obtenir une liste de tous les tickers disponibles.

Quelqu'un peut-il aider s'il vous plaît?

rassom
la source
9
Avez-vous eu de la joie? J'ai trouvé ceci: eoddata.com/symbols.aspx
Codek
Merci Codek :-) Non, je ne l'ai pas trouvé et la tâche était de trouver la liste des symboles Yahoos, pas n'importe qui d'autre, donc je ne peux malheureusement pas utiliser Eoddatas. Merci encore et bon week-end :-)
rassom
2
ok pas de problèmes. Je ne voulais que les symboles LSE, donc ce qui précède m'a aidé - je crois que les symboles dans l'échange sont cohérents, par exemple, yahoo / lse / google finance, etc. - sauf pour yahoo, il a .L à la fin et dans google, il a LON. Il est ridicule de voir comment toutes les données sur les prix sont volontairement disponibles, mais pas la liste des symboles, je ne comprends tout simplement pas!
Codek
Vous pouvez maintenant utiliser les métadonnées de quandl contenant 98k symboles. Notez que vous devez décoder le symbole quandl pour revenir au symbole Yahoo d'origine. INDEX_ obtient ^ et _ obtient. quandl.com/data/YAHOO/metadata
KIC
3
Un programme python qui peut le faire pour vous: github.com/Benny-/Yahoo-ticker-symbol-downloader
André Pena

Réponses:

13

Il existe un joli wrapper C # pour l'API Yahoo.Finance à l' adresse http://code.google.com/p/yahoo-finance-managed/ qui vous y mènera. Malheureusement, il n'y a pas de moyen direct de télécharger la liste des tickers, mais ce qui suit crée la liste en itérant dans les groupes alphabétiques:

        AlphabeticIDIndexDownload dl1 = new AlphabeticIDIndexDownload();
        dl1.Settings.TopIndex = null;
        Response<AlphabeticIDIndexResult> resp1 = dl1.Download();

        writeStream.WriteLine("Id|Isin|Name|Exchange|Type|Industry");

        foreach (var alphabeticalIndex in resp1.Result.Items)
        {
            AlphabeticalTopIndex topIndex = (AlphabeticalTopIndex) alphabeticalIndex;
            dl1.Settings.TopIndex = topIndex;
            Response<AlphabeticIDIndexResult> resp2 = dl1.Download();

            foreach (var index in resp2.Result.Items)
            {
                IDSearchDownload dl2 = new IDSearchDownload();
                Response<IDSearchResult> resp3 = dl2.Download(index);


                int i = 0;
                foreach (var item in resp3.Result.Items)
                {
                    writeStream.WriteLine(item.ID + "|" + item.ISIN + "|" + item.Name + "|" + item.Exchange + "|" + item.Type + "|" + item.Industry);
                }

            }
        }

Cela m'a donné une liste d'environ 75 000 titres en environ 4 minutes.

jm1102
la source
24
Pourriez-vous exécuter ce code et mettre une copie de la sortie sur pastebin, pour ceux d'entre nous qui n'utilisent pas C #?
Jeroen
1
Il semble que le résultat alphabétique ne soit pas complet. De nombreux symboles ont manqué.
liang
J'ai essayé d'exécuter ce code mais malheureusement, il n'a renvoyé aucun résultat. Des idées?
Lionheart
3
Je ne pense plus que cela fonctionne. L'API wrapper mentionnée fait une demande à biz.yahoo.com/i qui semble avoir changé (redirige vers finance.yahoo.com/q) et ne contient plus la table suggérée par XPath.
richardr
45

J'avais un problème similaire. yahoo ne le propose pas, mais vous pouvez en obtenir un en parcourant les instructions document.write sur la liste de nyse.com et en trouvant le fichier .js où elles stockent simplement la liste des entreprises commençant par la lettre donnée sous forme de tableau js littéral. vous pouvez également obtenir de jolis fichiers csv sur nasdaq.com ici: http://www.nasdaq.com/screening/companies-by-name.aspx?letter=0&exchange=nasdaq&render=download (remplacez exchange = nasdaq par exchange = nyse pour les symboles nyse).

Ian Ooi
la source
2
Merci Ian. J'ai besoin de la liste pour Yahoo car ils ont également des tickers en dehors des États-Unis, donc Nasdaq n'est malheureusement pas suffisant.
rassom
5
C'est excellent, merci. Vous pouvez également remplacer l'échange par «tous» pour obtenir les symboles des trois index.
Darin Peterson
le lien mène à un site Web avec une telle liste mais je ne vois pas l'option de télécharger un csv
hipoglucido
45

J'ai réussi à faire quelque chose de similaire en utilisant cette URL:

http://query.yahooapis.com/v1/public/yql?q=select%20 *% 20from% 20yahoo.finance.industry% 20where% 20id% 20in% 20 (sélectionnez% 20industry.id% 20from% 20yahoo.finance .sectors) & env = store% 3A% 2F% 2Fdatatables.org% 2Falltableswithkeys

Il télécharge une liste complète des symboles boursiers à l'aide de l'API Yahoo YQL, y compris le nom boursier, le symbole boursier et l'ID de l'industrie. Ce qu'il ne semble pas avoir, ce sont des modificateurs de symbole boursier. Par exemple, pour Rogers Communications Inc, il ne télécharge que RCI, pas RCI-A.TO, RCI-B.TO, etc. Je n'ai pas encore trouvé de source pour cette information - si quelqu'un connaît un moyen d'automatiser le téléchargement, je J'aimerais l'entendre. De plus, ce serait bien de trouver un moyen de télécharger une sorte de relation entre le symbole boursier et la bourse sur laquelle il est négocié, car certains sont négociés sur plusieurs bourses, ou peut-être que je veux seulement regarder des choses à la TSX ou quelque chose. .

John
la source
9
OU si json est plus votre truc: json
Andrew Luhring
1
Joli. Le YQL brut: sélectionnez * de yahoo.finance.industry où id in (sélectionnez industry.id de yahoo.finance.sectors)
David Gilbertson
1
Je pense que les données renvoyées par la requête ci-dessus proviennent en fin de compte de liens accessibles depuis cette URL biz.yahoo.com/ic/ind_index.html (ces URL supplémentaires peuvent également être utiles: biz.yahoo.com/p/s_conameu.html , biz .yahoo.com / p / sum_conameu.html )
richardr
13
Cela ne semble plus fonctionner :(
André Pena
1
Je pense que le tableau "yahoo.finance.sectors" a été supprimé. Mais il existe toujours une source pour les données - une page Web uniquement. (En effet, si vous faites 'select * from yahoo.finance.sectors' sur la console YQL à developer.yahoo.com/yql/console , le lien vers la page Web est intégré dans le retour - biz.yahoo.com/ic /ind_index.html. ) Donc, ce que vous devez faire est d'écrire du code pour obtenir cette page, puis en analyser les données. Il vous donnera la liste des secteurs, les industries de ces secteurs et l'ID de l'industrie (et vous pouvez créer un ID de secteur à partir du premier chiffre de l'ID de l'industrie).
Steve Greene
24

Listes d'actions NASDAQ ftp://ftp.nasdaqtrader.com/symboldirectory

Les 2 fichiers nasdaqlisted.txt et otherlisted.txt sont | tuyau séparé. Cela devrait vous donner une bonne liste de tous les stocks.

tr4nc3
la source
pour les paresseux comme moi: ftp.nasdaqtrader.com/SymbolDirectory ftp.nasdaqtrader.com/SymbolDirectory/nasdaqlisted.txt ftp.nasdaqtrader.com/SymbolDirectory/otherlisted.txt
1mike12
nasdaqtraded.txt est ce dont vous avez besoin, ce sont ces deux listes combinées.
thistleknot
14

Je pourrais peut-être vous aider avec une liste de symboles boursiers pour les actions (américaines et non américaines) et pour les ETF.

Yahoo fournit un calendrier des gains qui répertorie toutes les actions qui annoncent des gains pour un jour donné. Cela comprend les actions non américaines.

Par exemple, voici aujourd'hui: http://biz.yahoo.com/research/earncal/20120710.html

la dernière partie de l'URL correspond à la date (au format AAAAMMJJ) pour laquelle vous voulez le calendrier des revenus. Vous pouvez parcourir plusieurs jours et gratter les symboles de toutes les actions qui ont déclaré des revenus ces jours-là.

Il n'y a aucune garantie que Yahoo dispose de données pour toutes les actions qui rapportent des bénéfices, d'autant plus que certaines actions n'existent plus (faillite, acquisition, etc.), mais c'est probablement un bon point de départ.

Si vous êtes familier avec R, vous pouvez utiliser le package qmao pour ce faire. (Voir cet article ) si vous avez des difficultés à l'installer.

ec <- getEarningsCalendar(from="2011-01-01", to="2012-07-01") #this may take a while
s <- unique(ec$Symbol)
length(s)
#[1] 12223
head(s, 20) #look at the first 20 Symbols
# [1] "CVGW"    "ANGO"    "CAMP"    "LNDC"    "MOS"     "NEOG"    "SONC"   
# [8] "TISI"    "SHLM"    "FDO"     "FC"      "JPST.PK" "RECN"    "RELL"   
#[15] "RT"      "UNF"     "WOR"     "WSCI"    "ZEP"     "AEHR"   

Cela n'inclura pas les FNB, contrats à terme, options, obligations, devises ou fonds communs de placement.

Vous pouvez obtenir une liste des ETF de yahoo ici: http://finance.yahoo.com/etf/browser/mkt Cela ne montre que les 20 premiers. Vous avez besoin de l'URL du lien "Afficher tout" au bas de cette page . Vous pouvez parcourir la page pour savoir combien d'ETF il y a, puis créer une URL.

L <- readLines("http://finance.yahoo.com/etf/browser/mkt")
# Sorry for the ugly regex
n <- gsub("^(\\w+)\\s?(.*)$", "\\1", 
          gsub("(.*)(Showing 1 - 20 of )(.*)", "\\3",  
               L[grep("Showing 1 - 20", L)]))
URL <- paste0("http://finance.yahoo.com/etf/browser/mkt?c=0&k=5&f=0&o=d&cs=1&ce=", n)
#http://finance.yahoo.com/etf/browser/mkt?c=0&k=5&f=0&o=d&cs=1&ce=1442

Maintenant, vous pouvez extraire les tickers du tableau sur cette page

library(XML)
tbl <- readHTMLTable(URL, stringsAsFactors=FALSE)
dat <- tbl[[tail(grep("Ticker", tbl), 1)]][-1, ]
colnames(dat) <- dat[1, ]
dat <- dat[-1, ]
etfs <- dat$Ticker # All ETF tickers from yahoo
length(etfs)
#[1] 1442
head(etfs)
#[1] "DGAZ" "TAGS" "GASX" "KOLD" "DWTI" "RTSA"

C'est à peu près toute l'aide que je peux offrir, mais vous pouvez faire quelque chose de similaire pour obtenir certains des contrats à terme qu'ils proposent en grattant ces pages (ce ne sont que des contrats à terme américains)

http://finance.yahoo.com/indices?e=futures , http://finance.yahoo.com/futures?t=energy , http://finance.yahoo.com/futures?t=metals , http: //finance.yahoo.com/futures?t=grains , http://finance.yahoo.com/futures?t=livestock , http://finance.yahoo.com/futures?t=softs , http: // finance.yahoo.com/futures?t=indices ,

Et, pour les indices américains et non américains, vous pouvez gratter ces pages

http://finance.yahoo.com/intlindices?e=americas , http://finance.yahoo.com/intlindices?e=asia , http://finance.yahoo.com/intlindices?e=europe , http: //finance.yahoo.com/intlindices?e=africa , http://finance.yahoo.com/indices?e=dow_jones , http://finance.yahoo.com/indices?e=new_york , http: // finance.yahoo.com/indices?e=nasdaq , http://finance.yahoo.com/indices?e=sp , http://finance.yahoo.com/indices?e=other , http: // finance. yahoo.com/indices?e=treasury , http://finance.yahoo.com/indices?e=commodities

GSee
la source
2
Comme vous l'avez écrit, je n'ai peut-être pas tous les tickers de cette façon et pour mon projet, c'est soit tout (liste complète), soit cela n'a pas d'importance. Mais merci beaucoup pour la réponse approfondie, GSee. Appréciez-le! Passez une bonne journée :-)
rassom
8

Je fais des recherches sur cela depuis quelques jours, suivant des pistes sans fin qui se rapprochent, mais pas tout à fait, de ce que je cherchais.

J'ai besoin d'une simple liste de «symbole, secteur, industrie». Je travaille en Java et je ne souhaite utiliser aucun code natif de plate-forme.

Il semble que la plupart des autres données, comme les citations, etc., soient facilement disponibles.

Enfin, a suivi une suggestion de regarder «finviz.com». On dirait juste le billet. Essayez d'utiliser ce qui suit:

http://finviz.com/export.ashx?v=111&t=aapl,cat&o=ticker Cela revient sous forme de lignes, de style csv, avec une ligne d'en-tête, triées par symbole. Vous pouvez continuer à ajouter des tickers. Dans le code, vous pouvez lire le flux. Vous pouvez également laisser le navigateur vous demander si vous souhaitez ouvrir ou enregistrer le fichier.

http://finviz.com/export.ashx?v=111&&o=ticker Même style csv, mais tire tous les symboles disponibles (beaucoup, sur les échanges mondiaux)

Remplacez «export» par «screener» et les données s'afficheront dans le navigateur.

Il existe de nombreuses autres options que vous pouvez utiliser, une pour chaque élément de filtrage sur le site.

Jusqu'à présent, c'est le moyen programmatique le plus puissant et le plus pratique pour obtenir les quelques éléments de données que je ne pourrais pas facilement obtenir autrement. Et, il semble que ce site pourrait bien être une source unique pour la plupart de ce dont vous pourriez avoir besoin autre que des citations en temps réel ou quasi-réel.

Higgs
la source
4
Chaque URL que je charge est redirigée vers finviz.com/elite.ashx
PUG
Je devais m'abonner au service de trader Elite, mais ça vaut le coup. Merci.
vlmercado
7

La liste complète des symboles / tickers / actions Yahoo est disponible pour téléchargement (format Excel) sur le site ci-dessous. http://www.myinvestorshub.com/yahoo_stock_list.php

Liste mise à jour en janvier 2016: http://investexcel.net/all-yahoo-finance-stock-tickers/

Pravin
la source
3
Dans quelle mesure cette liste est-elle à jour?
Jeroen
1
Cette liste semble incomplète, par exemple GOOG n'y figure pas.
user592419
Cette liste se coupe à 3000 symboles. C'est par ordre alphabétique donc pour les États-Unis qui finissent par être au FDEF. D'autres marchés avec moins de 3000 symboles semblent mieux s'en tirer, comme Hong Kong. Cela dit, je n'ai aucune idée à quel point il est complet / à jour.
fantastique
2
Semble incomplet et non entretenu.
Jens A. Koch
Le lien ne fonctionne plus
toshiro92
1

Une solution de contournement que j'avais pour cela était d'itérer sur les secteurs (ce que vous pouviez faire à l'époque ... je ne l'ai pas testé récemment).

Cependant, vous finissez par être bloqué lorsque vous le faites de cette façon, car YQL est étranglé par jour.

Utilisez l'API CSV chaque fois que possible pour éviter cela.

RobotHumains
la source
1

J'ai eu le même problème, mais je pense avoir une solution simple (le code provient de mon application RoR): extraire les identifiants de l'industrie de yahoo.finance.sectors et l'ajouter à db:

    select = "select * from yahoo.finance.sectors"
    generate_query select
    @data.each do |data|
      data["industry"].each do |ind|
        unless ind.kind_of?(Array)
          unless ind["id"].nil?
            id = ind["id"].to_i
            if id > 0
              Industry.where(id: id).first_or_create(name: ind["name"]).update_attribute(:name, ind["name"])
            end
          end
        end
      end
    end

Extrayez toutes les entreprises avec leurs symboles avec les identifiants de l'industrie:

    ids = Industry.all.map{|ind| "'#{ind.id.to_s}'" }.join(",")
    select = "select * from yahoo.finance.industry where id in"
    generate_query select, ids
    @data.each do |ts|
      unless ts.kind_of?(Array) || ts["company"].nil?
        if ts["company"].count == 2 && ts["company"].first[0] == "name"
          t = ts["company"]
          Ticket.find_or_create_by_symbol(symbol: t["symbol"], name: t["name"] ).update_attribute(:name, t["name"])
        else
          ts["company"].each do |t|
            Ticket.find_or_create_by_symbol(symbol: t["symbol"], name: t["name"] ).update_attribute(:name, t["name"])
          end
        end
      end
    end
  end

Connexion hellper:

def generate_query(select, ids = nil)
    if params[:form] || params[:action] == "sectors" || params[:controller] == "tickets"
      if params[:action] == "sectors" || params[:controller] == "tickets"
        if ids.nil?
          query= select
        else
          query= "#{select} (#{ids})"
        end
      else
        if params[:form][:ids]
          @conditions = params_parse params[:form][:ids]
          query = "#{select} (#{@conditions})"
        end
      end
      yql_execut(query)
    end
  end

  def yql_execut(query)
    # TODO: OAuth ACCESS (http://developer.yahoo.com/yql/guide/authorization.html)
    base_url = "http://query.yahooapis.com/v1/public/yql?&format=json&env=store%3A%2F%2Fdatatables.org%2Falltableswithkeys&q="
    dirty_data = JSON.parse(HTTParty.get(base_url +  URI.encode(query)).body)
    if dirty_data["query"]["results"] == nil
      @data, @count, @table_head = nil
    else
      @data = dirty_data["query"]["results"].to_a[0][1].to_a
      @count = dirty_data["query"]["count"]
      if @count == 1
        @table_head = @data.map{|h| h[0].capitalize}
      else
        @table_head = @data.to_a.first.to_a.map{|h| h[0].capitalize}
      end
    end
  end

Désolé pour le désordre, mais c'est la première version de test pour mon projet et j'en ai eu besoin très rapidement. Il y a quelques variables d'aide et d'autres choses pour mon application, désolé pour cela. Mais j'ai une question: avez-vous beaucoup de symboles? J'ai 5500.

quatermain
la source
5500 ne seraient probablement que des symboles boursiers américains (Yahoo Finance couvre bien plus - dans le monde entier - comme vous pouvez le voir dans la réponse acceptée, il a obtenu environ 75000 symboles! :) ... Je n'ai pas encore converti la réponse acceptée .NET en Ruby (J'utilise également RoR), donc si vous le faites fonctionner, c'est-à-dire trouvez plus de symboles, faites-le moi savoir. Merci! :-)
rassom