Come ottenere un elenco completo dei simboli ticker da Yahoo Finance? [chiuso]


100

Ho cercato continuamente su Google un metodo per ottenere un elenco completo (e aggiornato quotidianamente) di tutti i simboli di ticker di Yahoo disponibili tramite http://finance.yahoo.com

Yahoo ha informazioni per azioni, futures ecc. Per molte borse in tutto il mondo e vorrei un elenco combinato di tutti i simboli ticker disponibili attraverso di essi. Ho provato YQL ma hanno una restrizione della clausola "where symbol = (o in)", quindi non posso selezionare * dai simboli.

Quindi, in pratica, ottenere informazioni dettagliate per un singolo simbolo o più simboli contemporaneamente è facile, ma non riesco a scoprire come ottenere un elenco di tutti i ticker disponibili.

Qualcuno può aiutare, per favore?


8
Hai provato gioia? Ho trovato questo: eoddata.com/symbols.aspx
Codek

Grazie Codek :-) No, non l'ho trovato e il compito era trovare l'elenco dei simboli Yahoos, non chiunque altro, quindi sfortunatamente non posso usare Eoddatas. Grazie ancora e buon fine settimana :-)
rassom

2
ok nessun problema. Volevo solo i simboli LSE, quindi quanto sopra mi ha aiutato - credo che i simboli all'interno dello scambio siano coerenti ad es. Yahoo / lse / google finance ecc. - tranne che per yahoo ha .L alla fine e in google ha LON. È ridicolo come tutti i dati sui prezzi siano disponibili volontariamente, ma non l'elenco dei simboli che non capisco!
Codek

Ora puoi usare i metadati di quandl che contengono 98k simboli. Nota che devi decodificare il simbolo quandl nel simbolo yahoo originale. INDEX_ ottiene ^ e _ ottiene. quandl.com/data/YAHOO/metadata
KIC

3
Un programma Python che può farlo per te: github.com/Benny-/Yahoo-ticker-symbol-downloader
André Pena

Risposte:


13

C'è un bel wrapper C # per l'API Yahoo.Finance su http://code.google.com/p/yahoo-finance-managed/ che ti porterà lì. Sfortunatamente non esiste un modo diretto per scaricare l'elenco ticker, ma quanto segue crea l'elenco iterando attraverso i gruppi alfabetici:

        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);
                }

            }
        }

Mi ha fornito un elenco di circa 75.000 titoli in circa 4 minuti.


24
Potresti eseguire questo codice e mettere una copia dell'output su pastebin, per quelli di noi che non usano C #?
Jeroen

1
Sembra che il risultato alfabetico non sia completo. Molti simboli persi.
liang

Ho provato a eseguire questo codice ma sfortunatamente non ha prodotto risultati. Qualche idea?
Lionheart

3
Non credo che funzioni più. L'API wrapper menzionata fa una richiesta a biz.yahoo.com/i che sembra essere cambiata (reindirizza a finance.yahoo.com/q) e non contiene più la tabella suggerita da XPath.
richardr

45

ho avuto un problema simile. yahoo non lo offre, ma puoi ottenerne uno guardando le dichiarazioni document.write nell'elenco di nyse.com e trovando il file .js in cui memorizzano l'elenco delle aziende che iniziano con la lettera data come array js letterale. puoi anche ottenere bei file csv ordinati da nasdaq.com qui: http://www.nasdaq.com/screening/competies-by-name.aspx?letter=0&exchange=nasdaq&render=download (sostituisci exchange = nasdaq con exchange = nyse per i simboli nyse).


2
Grazie Ian. Ho bisogno della lista per Yahoo anche se hanno ticker anche al di fuori degli Stati Uniti, quindi il Nasdaq purtroppo non è sufficiente.
rassom

5
È eccellente, grazie. Puoi anche sostituire lo scambio con "all" per ottenere i ticker per tutti e tre gli indici.
Darin Peterson

il link rimanda a un sito con tale elenco ma non vedo l'opzione per scaricare un csv
hipoglucido

45

Sono riuscito a fare qualcosa di simile utilizzando questo URL:

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

Scarica un elenco completo di simboli azionari utilizzando l'API Yahoo YQL, inclusi il nome del titolo, il simbolo dell'azione e l'ID del settore. Quello che sembra non avere è alcun tipo di modificatore del simbolo di borsa. Ad esempio, per Rogers Communications Inc, scarica solo RCI, non RCI-A.TO, RCI-B.TO, ecc. Non ho ancora trovato una fonte per queste informazioni - se qualcuno conosce un modo per automatizzare il download, io mi piacerebbe sentirlo. Inoltre, sarebbe bello trovare un modo per scaricare una sorta di relazione tra il simbolo di borsa e l'exchange su cui viene scambiato, dal momento che alcuni sono scambiati su più borse, o forse voglio solo guardare cose su TSX o qualcosa del genere .


9
O se json è più la tua passione
Andrew Luhring

1
Ben fatto. Il grezzo YQL: seleziona * da yahoo.finance.industry dove id in (seleziona industry.id da yahoo.finance.sectors)
David Gilbertson

1
Credo che i dati restituiti dalla query di cui sopra provengano alla fine da link raggiungibili da questo URL biz.yahoo.com/ic/ind_index.html (anche questi URL aggiuntivi possono essere utili: biz.yahoo.com/p/s_conameu.html , biz .yahoo.com / p / sum_conameu.html )
richardr

13
Questo sembra non funzionare più :(
André Pena

1
Penso che la tabella "yahoo.finance.sectors" sia stata rimossa. Ma c'è ancora una fonte per i dati: solo una pagina web. (In effetti, se 'selezioni * da yahoo.finance.sectors' sulla console YQL all'indirizzo developer.yahoo.com/yql/console , incorporato nel reso c'è il link alla pagina web - biz.yahoo.com/ic /ind_index.html. ) Quindi quello che devi fare è scrivere del codice per ottenere quella pagina e poi analizzare i dati da essa. Ti fornirà l'elenco dei settori, le industrie in quei settori e l'ID del settore (e puoi creare un ID del settore dalla prima cifra dell'ID del settore).
Steve Greene

24

Elenchi di azioni NASDAQ ftp://ftp.nasdaqtrader.com/symboldirectory

I 2 file nasdaqlisted.txt e otherlisted.txt sono | tubo separato. Questo dovrebbe darti un buon elenco di tutte le azioni.


per i pigri come me: ftp.nasdaqtrader.com/SymbolDirectory ftp.nasdaqtrader.com/SymbolDirectory/nasdaqlisted.txt ftp.nasdaqtrader.com/SymbolDirectory/otherlisted.txt
1mike12

nasdaqtraded.txt è ciò di cui hai bisogno, sono entrambe le liste combinate.
thistleknot

14

Potrei essere in grado di aiutarti con un elenco di simboli ticker per azioni (statunitensi e non statunitensi) e per ETF.

Yahoo fornisce un calendario dei guadagni che elenca tutte le azioni che annunciano i guadagni per un determinato giorno. Ciò include azioni non statunitensi.

Ad esempio, ecco oggi: http://biz.yahoo.com/research/earncal/20120710.html

l'ultima parte dell'URL è la data (in formato AAAAMMGG) per la quale desideri il calendario dei guadagni. Puoi scorrere diversi giorni e raschiare i simboli di tutte le azioni che hanno riportato guadagni in quei giorni.

Non vi è alcuna garanzia che yahoo disponga di dati per tutte le azioni che riportano i guadagni, soprattutto perché alcune azioni non esistono più (fallimento, acquisizione, ecc.), Ma questo è probabilmente un buon punto di partenza.

Se hai familiarità R, puoi usare il pacchetto qmao per farlo. (Vedi questo post ) se hai problemi con l'installazione.

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"   

Questo non includerà ETF, futures, opzioni, obbligazioni, forex o fondi comuni di investimento.

Puoi ottenere un elenco di ETF da yahoo qui: http://finance.yahoo.com/etf/browser/mkt Questo mostra solo i primi 20. Hai bisogno dell'URL del link "Mostra tutto" in fondo a quella pagina . Puoi raschiare la pagina per scoprire quanti ETF ci sono, quindi costruire un 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

Ora puoi estrarre i ticker dalla tabella in quella pagina

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"

Questo è tutto l'aiuto che posso offrire, ma potresti fare qualcosa di simile per ottenere alcuni dei futuri che offrono raschiando queste pagine (questi sono solo futures statunitensi)

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 ,

E, per gli indici statunitensi e non statunitensi, potresti raschiare queste pagine

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


2
Come hai scritto, potrei non ottenere tutti i ticker in questo modo e per il mio progetto o è tutto ( lista completa) o non importa. Ma grazie mille per la risposta esauriente, GSee. Apprezzalo! Buona giornata :-)
rassom

8

Ho fatto ricerche su questo per alcuni giorni, seguendo infinite piste che si sono avvicinate, ma non del tutto, a ciò che stavo cercando.

Ho bisogno di un semplice elenco di "simboli, settori, industrie". Lavoro in Java e non voglio utilizzare alcun codice nativo della piattaforma.

Sembra che la maggior parte degli altri dati, come citazioni, ecc., Siano prontamente disponibili.

Infine, ho seguito un suggerimento per guardare "finviz.com". Sembra solo il biglietto. Prova a utilizzare quanto segue:

http://finviz.com/export.ashx?v=111&t=aapl,cat&o=ticker Questo torna come linee, in stile csv, con una riga di intestazione, ordinata per simbolo ticker. Puoi continuare ad aggiungere ticker. Nel codice puoi leggere lo stream. Oppure puoi lasciare che il browser ti chieda se aprire o salvare il file.

http://finviz.com/export.ashx?v=111&&o=ticker Stesso stile csv, ma richiama tutti i simboli disponibili (molti, negli scambi globali)

Sostituisci "export" con "screener" e i dati verranno visualizzati nel browser.

Ci sono molte altre opzioni che puoi usare, una per ogni elemento screener sul sito.

Finora, questo è il modo programmatico più potente e conveniente per ottenere i pochi dati che altrimenti non avrei potuto ottenere facilmente. E sembra che questo sito potrebbe essere una singola fonte per la maggior parte di ciò di cui potresti aver bisogno oltre alle citazioni in tempo reale o quasi.


4
Ogni URL che carico viene reindirizzato a finviz.com/elite.ashx
PUG

Ho dovuto iscrivermi al servizio trader Elite, ma ne vale la pena. Grazie.
vlmercado

7

L'elenco completo dei simboli / ticker / azioni di yahoo è disponibile per il download (formato Excel) dal sito Web sottostante. http://www.myinvestorshub.com/yahoo_stock_list.php

Elenco aggiornato a gennaio 2016: http://investexcel.net/all-yahoo-finance-stock-tickers/


3
Quanto è aggiornato questo elenco?
Jeroen

1
Questo elenco sembra essere incompleto, ad esempio GOOG non è presente.
user592419

Questo elenco si interrompe a 3000 simboli. È in ordine alfabetico, quindi per gli Stati Uniti finisce per essere FDEF. Altri mercati con meno di 3000 simboli sembrano andare meglio, come Hong Kong. Detto questo, non ho idea di quanto sia completo / aggiornato.
fantabolous

2
Sembra incompleto e non mantenuto.
Jens A. Koch

Il collegamento non funziona più
toshiro92

1

Una soluzione alternativa che ho avuto per questo è stata quella di iterare sui settori (cosa che al momento potresti fare ... non l'ho testata di recente).

Tuttavia, finisci per essere bloccato quando lo fai in questo modo, poiché YQL viene limitato ogni giorno.

Utilizzare l'API CSV ogni volta che è possibile per evitare ciò.


1

Ho avuto lo stesso problema, ma penso di avere una soluzione semplice (il codice proviene dalla mia app RoR): estrai gli ID di settore da yahoo.finance.sectors e aggiungilo a 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

Estrai tutte le società con i loro simboli con ID di settore:

    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

Hellper di connessione:

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

Ci scusiamo per il disordine, ma questa è la prima versione di test per il mio progetto e ne avevo bisogno molto velocemente. Ci sono alcuni variabili di aiuto e altre cose per la mia app, mi dispiace. Ma ho una domanda: hai molti simboli che hai? Ho 5500.


5500 sarebbero probabilmente solo simboli azionari statunitensi (Yahoo Finance copre molto di più - in tutto il mondo - come puoi vedere nella risposta accettata, ha ottenuto circa 75.000 simboli! :) ... Non ho ancora convertito la risposta accettata .NET way in Ruby (Sto anche usando RoR), quindi se lo fai funzionare, cioè trovi più simboli, fammelo sapere. Grazie! :-)
rassom
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.