web-dev-qa-db-fra.com

Comment obtenir une liste complète des symboles boursiers de Yahoo Finance?

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

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

Donc, en gros, obtenir des informations détaillées sur un ou plusieurs symboles à la fois est facile, mais je n'arrive pas à trouver comment obtenir une liste de tous les tickers disponibles.

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

92
rassom

Il existe un wrapper Nice C # pour l’API Yahoo.Finance à l’adresse http://code.google.com/p/yahoo-finance-managed/ qui vous y conduira. Malheureusement, il n’existe aucun moyen direct de télécharger la liste des téléspectateurs, mais la liste suivante le crée en parcourant 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);
                }

            }
        }

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

13
jm1102

j'avais un problème similaire. yahoo ne l’offre pas, mais vous pouvez en obtenir un en consultant les instructions document.write figurant sur la liste de nyse.com et en recherchant le fichier .js où elles se trouvent juste pour stocker la liste des entreprises commençant par la lettre donnée sous forme de tableau js littéral. vous pouvez également obtenir de beaux fichiers csv rangés auprès de nasdaq.com ici: http://www.nasdaq.com/screening/companies-by-name.aspx?letter=0&exchange=nasdaq&render=download (remplacer exchange = nasdaq avec exchange = nyse pour les symboles nyse).

44
Ian Ooi

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

http://query.yahooapis.com/v1/public/yql?q=select%2 *% 20de% 20yahoo.finance.industry% 20where% 20id% 20in% 20 (sélectionnez% 20industry. id% 20de% 20yahoo.finance.sectors) & env = magasin% 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, le symbole boursier et l'ID de secteur. Ce qu'il ne semble pas avoir, ce sont des modificateurs de symboles boursiers. 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'aimerai l'entendre. En outre, il serait bien de trouver un moyen de télécharger une sorte de relation entre le symbole boursier et la bourse sur laquelle elle est négociée, car certaines sont négociées sur plusieurs bourses, ou peut-être que je veux seulement regarder des choses à la TSX ou quelque chose de ce genre. .

44
John

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.

20
tr4nc3

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

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

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

la dernière partie de l'URL est la date (au format AAAAMMJJ) pour laquelle vous souhaitez utiliser le calendrier des résultats. Vous pouvez parcourir plusieurs jours en boucle et effacer les symboles de tous les stocks ayant déclaré des gains ces jours-là.

Rien ne garantit que Yahoo possède des données pour tous les titres déclarant des bénéfices, d’autant plus que certains titres n’existent plus (faillite, acquisition, etc.), mais il s’agit probablement d’un bon point de départ.

Si vous connaissez R, vous pouvez utiliser le package qmao pour le faire. (Voir this post ) si vous avez du mal à 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'inclut pas les ETF, les contrats à terme standardisés, les options, les obligations, les devises ou les 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 "Tout afficher" lien au bas de cette page. Vous pouvez parcourir la page pour connaître le nombre de FNB, 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 de la table 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 offrent en grattant ces pages (il s’agit uniquement de contrats à terme américains).

http://finance.yahoo.com/indices?f=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 index 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?f=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 = autre , http://finance.yahoo.com/indices?e=treasury , http://finance.yahoo.com/indices?e=commodities

14
GSee

Je fais des recherches à ce sujet depuis quelques jours, après des pistes sans fin qui se sont rapprochées, mais pas tout à fait, de ce que je cherchais.

Mon besoin est une simple liste de "symbole, secteur, industrie". Je travaille dans Java et ne souhaite utiliser aucun code natif de la plate-forme.

Il semble que la plupart des autres données, telles que les citations, etc., sont 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, style csv, avec une ligne d'en-tête, classées par symbole. Vous pouvez continuer à ajouter des tickers. En code, vous pouvez lire le flux. Ou vous pouvez laisser le navigateur vous demander si vous souhaitez ouvrir ou sauvegarder le fichier.

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

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

Vous pouvez utiliser de nombreuses autres options, une pour chaque élément de sélection sur le site.

Jusqu'à présent, il s'agit du moyen de programmation le plus puissant et le plus pratique pour obtenir les quelques données que je n'aurais pas pu obtenir autrement. Et, il semble que ce site pourrait bien être une source unique pour la plupart des choses dont vous pourriez avoir besoin, autres que des citations en temps réel ou quasi réel.

8
Higgs

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

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

5
Pravin

J'ai eu le même problème, mais je pense avoir une solution simple (le code provient de mon application RoR): Extrayez les identifiants d'industrie de yahoo.finance.sectors et ajoutez-les à la base de données:

    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 enfer:

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 avais besoin très vite. Il existe des variabels d’aides et d’autres choses pour mon application, désolé pour cela. Mais j'ai une question: avez-vous beaucoup de symboles? J'ai 5500.

1
quatermain

Une solution de contournement que j’avais pour cela consistait à parcourir les secteurs (ce que vous pouviez faire à ce moment-là ... je n’ai pas testé cela récemment).

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

Utilisez l’API CSV autant que possible pour éviter cela.

1
RobotHumans