Cum să obțineți o listă completă a simbolurilor ticker din Yahoo Finance? [închis] (Programare, Yahoo Finance, Stocuri)

rassom a intrebat.

Am căutat pe Google la nesfârșit o metodă de a obține o listă completă (și actualizată zilnic) a tuturor simbolurilor ticker Yahoo disponibile prin intermediul http://finance.yahoo.com

Yahoo are informații pentru acțiuni, contracte futures etc. pentru o mulțime de burse din întreaga lume și aș dori o listă combinată a tuturor simbolurilor ticker disponibile prin intermediul lor. Am încercat YQL, dar au o restricție de clauză „where symbol = (sau în)”, astfel încât nu pot selecta * din simboluri.

Deci, în principiu, obținerea de informații detaliate pentru un singur simbol sau mai multe simboluri la un moment dat este ușoară, dar nu reușesc să aflu cum să obțin o listă a tuturor ticker-elor disponibile.

Mă poate ajuta cineva, vă rog?

Comentarii

  • Ați obținut vreo bucurie? Am găsit asta: eoddata.com/symbols.aspx –  > Por Codek.
  • Mulțumesc Codek 🙂 Nu, nu am găsit-o, iar sarcina era să găsesc lista de simboluri Yahoos, nu a altcuiva, așa că, din păcate, nu pot folosi Eoddatas. Mulțumesc încă o dată și vă doresc un weekend plăcut 🙂 –  > Por rassom.
  • ok, fără probleme. Am vrut doar simbolurile LSE, așa că cele de mai sus mi-au fost de ajutor – cred că simbolurile din cadrul bursei sunt consecvente în cadrul, de exemplu, yahoo/lse/google finance etc. – cu excepția yahoo care are .L la sfârșit, iar în google are LON. Este ridicol cum toate datele privind prețurile sunt disponibile de bunăvoie, dar nu și lista de simboluri, pur și simplu nu înțeleg! –  > Por Codek.
  • Un program python care poate face asta pentru tine: github.com/Benny-/Yahoo-ticker-symbol-downloader. –  > Por André Pena.
  • Următorul pachet oferă o colecție bună: github.com/portfolioplus/pytickersymbols –  > Por SlashGordon.
9 răspunsuri
jm1102

Există un wrapper C# frumos pentru API-ul Yahoo.Finance la http://code.google.com/p/yahoo-finance-managed/ care vă va duce acolo. Din păcate, nu există o modalitate directă de a descărca lista de ticker, dar următoarele creează lista prin iterația prin grupurile alfabetice:

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

            }
        }

Am obținut o listă de aproximativ 75.000 de titluri de valoare în aproximativ 4 minute.

Comentarii

    24

  • Ați putea să rulați acest cod și să puneți o copie a rezultatului pe pastebin, pentru cei dintre noi care nu folosesc C# ? –  > Por Jeroen.
  • Se pare că rezultatul alfabetic nu este complet. Multe simboluri au fost omise. –  > Por liang.
  • Am încercat să execut acest cod, dar, din păcate, nu a dat niciun rezultat. Aveți vreo idee? –  > Por lionheart.
  • Nu cred că acest lucru mai funcționează. API-ul wrapper menționat face o cerere către biz.yahoo.com/i care pare să se fi schimbat (redirecționează către finance.yahoo.com/q) și nu mai conține tabelul pe care îl sugerează XPath-ul. –  > Por richardr.
Ian Ooi

am avut o problemă similară. yahoo nu o oferă, dar puteți obține una uitându-vă prin declarațiile document.write de pe lista nyse.com și găsind fișierul .js în care se întâmplă să stocheze lista companiilor care încep cu litera dată ca un literal de matrice js. puteți obține, de asemenea, fișiere csv frumos ordonate de la nasdaq.com aici:http://www.nasdaq.com/screening/companies-by-name.aspx?letter=0&exchange=nasdaq&render=download (înlocuiți exchange=nasdaq cu exchange=nyse pentru simbolurile nyse).

Comentarii

  • Mulțumesc, Ian. Totuși, am nevoie de lista pentru Yahoo, deoarece și ei au tickeri în afara SUA, așa că, din păcate, Nasdaq nu este suficient. –  > Por rassom.
  • Acest lucru este excelent, mulțumesc. De asemenea, puteți înlocui bursa cu „all” pentru a obține tickerii pentru toți cei trei indici. –  > Por Darin Peterson.
  • linkul duce la un site web cu o astfel de listă, dar nu văd opțiunea de a descărca un csv –  > Por hipoglucido.
John

Am reușit să fac ceva similar folosind această adresă URL:

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

Descarcă o listă completă a simbolurilor bursiere utilizând API Yahoo YQL, inclusiv numele acțiunii, simbolul bursier și ID-ul sectorului. Ceea ce nu pare să aibă este nici un fel de modificatori de simboluri bursiere. De exemplu, pentru Rogers Communications Inc, descarcă doar RCI, nu și RCI-A.TO, RCI-B.TO etc. Nu am găsit încă o sursă pentru aceste informații – dacă cineva cunoaște o modalitate de a automatiza descărcarea acestor informații, aș dori să o aud. De asemenea, ar fi frumos să găsesc o modalitate de a descărca un fel de relație între simbolul acțiunilor și bursa pe care se tranzacționează, deoarece unele sunt tranzacționate pe mai multe burse, sau poate că vreau să mă uit doar la chestii de pe TSX sau ceva de genul acesta.

Comentarii

  • SAU dacă json este mai mult pentru tine:json –  > Por Andrew Luhring.
  • Frumos. YQL brut: select * from yahoo.finance.industry where id in (select industry.id from yahoo.finance.sectors) –  > Por David Gilbertson.
  • Cred că datele returnate de interogarea de mai sus provin, în cele din urmă, din link-uri accesibile din acest URL biz.yahoo.com/ic/ind_index.html (aceste URL-uri suplimentare pot fi, de asemenea, utile: biz.yahoo.com/p/s/s_conameu.html, , biz.yahoo.com/p/sum_conameu.html) –  > Por richardr.
  • Se pare că nu mai merge 🙁 –  > Por André Pena.
  • Cred că tabelul „yahoo.finance.sectors” a fost eliminat. Dar există încă o sursă pentru date – doar o pagină web. (Într-adevăr, dacă faceți „select * from yahoo.finance.sectors” în consola YQL la adresa developer.yahoo.com/yql/console , încorporat în retur este linkul către pagina web – biz.yahoo.com/ic/ind_index.html.) Deci, ceea ce trebuie să faceți este să scrieți un cod pentru a obține acea pagină și apoi să analizați datele din ea. Aceasta vă va oferi lista sectoarelor, industriile din acele sectoare și ID-ul industriei (și puteți crea un ID de sector din prima cifră a ID-ului industriei). –  > Por Steve Greene.
tr4nc3

Listele de acțiuni NASDAQftp://ftp.nasdaqtrader.com/symboldirectory

Cele 2 fișiere nasdaqlisted.txt și otherlisted.txt sunt | separate prin pipe. Aceasta ar trebui să vă ofere o listă bună a tuturor acțiunilor.

Comentarii

  • pentru cei leneși ca mine: ftp.nasdaqtrader.com/SymbolDirectory ftp.nasdaqtrader.com/SymbolDirectory/nasdaqlisted.txt ftp.nasdaqtrader.com/SymbolDirectory/otherlisted.txt –  > Por 1mike12.
  • nasdaqtraded.txt este ceea ce aveți nevoie, este vorba de ambele liste combinate. –  > Por thistleknot.
GSee

S-ar putea să vă pot ajuta cu o listă de simboluri ticker pentru acțiuni (americane și non-americane) și pentru ETF-uri.

Yahoo oferă un calendar al câștigurilor care enumeră toate acțiunile care anunță câștigurile pentru o anumită zi. Acesta include acțiuni din afara SUA.

De exemplu, iată-l pe cel de astăzi: http://biz.yahoo.com/research/earncal/20120710.html

ultima parte a URL-ului este data (în format AAAALLZZ) pentru care doriți să obțineți calendarul de câștiguri. Puteți trece în buclă prin mai multe zile și să extrageți simbolurile tuturor acțiunilor care au raportat câștiguri în acele zile.

Nu există nicio garanție că yahoo are date pentru toate acțiunile care raportează câștiguri,mai ales că unele acțiuni nu mai există (faliment, achiziție etc.),dar acesta este probabil un punct de plecare decent.

Dacă sunteți familiarizat cu R, , puteți folosi aplicația pachetul qmao pentru a face acest lucru. (Consultați acest post)dacă aveți probleme în instalarea acestuia.

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"   

Acest lucru nu va include ETF-uri, contracte futures, opțiuni, obligațiuni, forex sau fonduri mutuale.

Puteți obține o listă de ETF-uri de la yahoo aici: http://finance.yahoo.com/etf/browser/mktAceasta arată doar primele 20. Aveți nevoie de URL-ul linkului „Show All” din partea de jos a acelei pagini. Poți să faci scraping pe pagină pentru a afla câte ETF-uri există, apoi să construiești 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

Acum, puteți extrage Tickers din tabelul de pe acea pagină

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"

Acesta este cam tot ajutorul pe care vi-l pot oferi, dar ați putea face ceva similar pentru a obține unele dintre contractele futures pe care le oferă prin răzuirea acestor pagini (Acestea sunt doar contractele futures din SUA)

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,

Și, pentru indicii din SUA și din afara SUA, puteți extrage aceste pagini

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

Comentarii

  • După cum ai scris, s-ar putea să nu primesc toate tickerele în acest mod și pentru proiectul meu este fie toate (lista completă) sau nu contează. Dar îți mulțumesc foarte mult pentru răspunsul amănunțit, GSee. Apreciez asta! Să ai o zi bună 🙂 –  > Por rassom.
Higgs

M-am documentat de câteva zile, urmărind piste nesfârșite care se apropiau, dar nu chiar, de ceea ce căutam.

Nevoia mea este o listă simplă de „simbol, sector, industrie”. Lucrez în Java și nu vreau să folosesc niciun cod nativ de platformă.

Se pare că majoritatea celorlalte date, cum ar fi cotațiile etc., sunt ușor de obținut.

În cele din urmă, a urmat o sugestie de a mă uita la ‘finviz.com’. Se pare că este exact ceea ce trebuie. Încercați să utilizați următoarele:

http://finviz.com/export.ashx?v=111&t=aapl,cat&o=tickerAceasta se întoarce sub formă de linii, în stil csv, cu un rând de antet, ordonate după simbolul ticker. Puteți continua să adăugați tickeri. În cod, puteți citi fluxul. Sau puteți lăsa browserul să vă întrebe dacă doriți să deschideți sau să salvați fișierul.

http://finviz.com/export.ashx?v=111&&o=tickerAcelași stil csv, dar extrage toate simbolurile disponibile (multe, pe toate bursele globale)

Înlocuiți „export” cu „screener” și datele vor apărea în browser.

Există mult mai multe opțiuni pe care le puteți folosi, câte una pentru fiecare element screener de pe site.

Până în prezent, aceasta este cea mai puternică și mai convenabilă modalitate programatică de a obține cele câteva date pe care altfel nu le-aș putea obține cu ușurință. Și se pare că acest site ar putea fi o sursă unică pentru majoritatea lucrurilor de care ați putea avea nevoie, în afară de cotațiile în timp real sau aproape real.

Comentarii

  • Fiecare url pe care îl încarc este redirecționat către finviz.com/elite.ashx –  > Por PUG.
  • A trebuit să mă abonez la serviciul Elite trader, dar merită. Mulțumesc. –  > Por vlmercado.
Pravin

Lista completă a simbolurilor yahoo/tickers/stocks este disponibilă pentru descărcare (format excel) la site-ul de mai jos. http://www.myinvestorshub.com/yahoo_stock_list.php

Listă actualizată până în ianuarie 2016:http://investexcel.net/all-yahoo-finance-stock-tickers/

Comentarii

  • Cât de actualizată este această listă? –  > Por Jeroen.
  • Această listă pare a fi incompletă, de exemplu, GOOG nu se află pe ea. –  > Por user592419.
  • Această listă se întrerupe la 3000 de simboluri. Este în ordine alfabetică, astfel încât pentru SUA se ajunge la FDEF. Alte piețe cu mai puțin de 3000 de simboluri par să se descurce mai bine, cum ar fi Hong Kong. Acestea fiind spuse, nu am nici o idee despre cât de completă / actualizată este. –  > Por fantabolous.
  • Pare incompletă și neactualizată. –  > Por Jens A. Koch.
  • Linkul nu mai funcționează –  > Por toshiro92.
RobotHumans

O soluție pe care am avut-o pentru asta a fost să iterăm peste sectoare(ceea ce la vremea respectivă puteai face…nu am mai testat asta recent).

Totuși, ajungi să te blochezi în cele din urmă când faci așa, deoarece YQL este restricționat pe zi.

Folosiți API CSV ori de câte ori este posibil pentru a evita acest lucru.

quatermain

Am avut aceeași problemă, dar cred că am o soluție simplă (codul este din aplicația mea RoR): Extrageți id-urile industriei din yahoo.finance.sectors și adăugați-le la 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

Extrageți toate companiile cu simbolurile lor cu id-urile de 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

Conexiune 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

Scuze pentru dezordine, dar aceasta este prima versiune de testare pentru proiectul meu și aveam nevoie de ea foarte repede. Există câteva variabile de ajutor și alte lucruri pentru aplicația mea, îmi pare rău pentru asta. Dar am o întrebare: Câte simboluri aveți? Eu am 5500.

Comentarii

  • 5500 ar fi, probabil, doar simbolurile bursiere din SUA (Yahoo finance acoperă mult mai mult – la nivel mondial – după cum puteți vedea în răspunsul acceptat, el a primit în jur de 75.000 de simboluri! 🙂 … Nu am convertit încă modul .NET al răspunsului acceptat în Ruby (folosesc și eu RoR), așa că, dacă reușești să faci să funcționeze, adică să găsești mai multe simboluri, te rog să mă anunți. Mulțumesc! 🙂 –  > Por rassom.