Wie erhalte ich eine vollständige Liste der Tickersymbole von Yahoo Finance? [geschlossen]


100

Ich habe endlos nach einer Methode gegoogelt, um eine vollständige (und täglich aktualisierte) Liste aller Yahoo-Tickersymbole zu erhalten, die über http://finance.yahoo.com verfügbar sind

Yahoo hat Informationen zu Aktien, Futures usw. für viele Börsen weltweit, und ich möchte eine kombinierte Liste aller über sie verfügbaren Tickersymbole. Ich habe YQL ausprobiert, aber sie haben eine "where symbol = (oder in)" - Klauselbeschränkung, sodass ich nicht * aus Symbolen auswählen kann.

Grundsätzlich ist es einfach, detaillierte Informationen für ein einzelnes Symbol oder mehrere Symbole gleichzeitig zu erhalten, aber ich kann einfach nicht herausfinden, wie ich eine Liste aller verfügbaren Ticker erhalten kann.

Kann mir bitte jemand helfen?


8
Hast du irgendwelche Freude bekommen? Ich fand dieses: eoddata.com/symbols.aspx
Codek

Danke Codek :-) Nein, ich habe es nicht gefunden und die Aufgabe war es, die Yahoos-Symbolliste zu finden, sonst niemand, also kann ich Eoddatas leider nicht verwenden.
Nochmals vielen

2
ok keine probs. Ich wollte nur die LSE-Symbole, daher hat mir das oben Gesagte geholfen - ich glaube, die Symbole innerhalb des Austauschs sind konsistent, z. B. Yahoo / Lse / Google Finance usw. - außer Yahoo hat es .L am Ende und in Google hat es LON. Es ist lächerlich, wie bereitwillig alle Preisdaten verfügbar sind, aber nicht die Liste der Symbole, die ich einfach nicht verstehe!
Codek

Jetzt können Sie die Metadaten von quandl verwenden, die 98.000 Symbole enthalten. Beachten Sie, dass Sie das Quandl-Symbol wieder in das ursprüngliche Yahoo-Symbol dekodieren müssen. INDEX_ bekommt ^ und _ bekommt. quandl.com/data/YAHOO/metadata
KIC

3
Ein Python-Programm, das das für Sie tun kann: github.com/Benny-/Yahoo-ticker-symbol-downloader
André Pena

Antworten:


13

Unter http://code.google.com/p/yahoo-finance-managed/ gibt es einen netten C # -Wrapper für die Yahoo.Finance-API , der Sie dorthin bringt. Leider gibt es keine direkte Möglichkeit, die Tickerliste herunterzuladen, aber im Folgenden wird die Liste durch Durchlaufen der alphabetischen Gruppen erstellt:

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

            }
        }

Es gab mir eine Liste von ungefähr 75.000 Wertpapieren in ungefähr 4 Minuten.


24
Könnten Sie diesen Code ausführen und eine Kopie der Ausgabe auf Pastebin ablegen, für diejenigen von uns, die kein C # verwenden?
Jeroen

1
Es scheint, dass das alphabetische Ergebnis nicht vollständig ist. Viele Symbole wurden verpasst.
Liang

Ich habe versucht, diesen Code auszuführen, aber leider wurden keine Ergebnisse zurückgegeben. Irgendwelche Ideen?
Löwenherz

3
Ich denke nicht, dass das mehr funktioniert. Die erwähnte Wrapper-API sendet eine Anfrage an biz.yahoo.com/i, die sich anscheinend geändert hat (leitet zu Finance.yahoo.com/q weiter) und die vom XPath vorgeschlagene Tabelle nicht mehr enthält.
Richard

45

Ich hatte ein ähnliches Problem. Yahoo bietet es nicht an, aber Sie können eine erhalten, indem Sie die document.write-Anweisungen in der Liste von nyse.com durchsehen und die .js-Datei suchen, in der die Liste der Unternehmen, die mit dem angegebenen Buchstaben beginnen, zufällig als js-Array gespeichert wird wörtlich. Sie können auch ordentliche CSV-Dateien von nasdaq.com hier erhalten: http://www.nasdaq.com/screening/companies-by-name.aspx?letter=0&exchange=nasdaq&render=download (ersetzen Sie exchange = nasdaq durch exchange = nyse für nyse Symbole).


2
Danke Ian. Ich brauche die Liste für Yahoo, da sie auch Ticker außerhalb der USA haben, so dass Nasdaq leider nicht ausreicht.
Rassom

5
Das ist ausgezeichnet, danke. Sie können den Austausch auch durch "alle" ersetzen, um die Ticker für alle drei Indizes zu erhalten.
Darin Peterson

Der Link führt zu einer Website mit einer solchen Liste, aber ich sehe keine Möglichkeit, eine
CSV

45

Mit dieser URL konnte ich etwas Ähnliches tun:

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

Mithilfe der Yahoo YQL-API wird eine vollständige Liste der Aktiensymbole heruntergeladen, einschließlich des Aktiennamens, des Aktiensymbols und der Branchen-ID. Was es nicht zu haben scheint, sind irgendwelche Modifikatoren für Aktiensymbole. Zum Beispiel für Rogers Communications Inc werden nur RCI heruntergeladen, nicht RCI-A.TO, RCI-B.TO usw. Ich habe noch keine Quelle für diese Informationen gefunden - wenn jemand eine Möglichkeit kennt, das Herunterladen zu automatisieren, ich Ich würde es gerne hören. Es wäre auch schön, einen Weg zu finden, um eine Beziehung zwischen dem Aktiensymbol und der Börse, an der es gehandelt wird, herunterzuladen, da einige an mehreren Börsen gehandelt werden, oder vielleicht möchte ich nur Dinge an der TSX oder so betrachten .


9
ODER wenn json mehr dein Ding ist: json
Andrew Luhring

1
Schön. Die rohe YQL: Wählen Sie * aus yahoo.finance.industry wo id in (wählen Sie industrial.id aus yahoo.finance.sectors aus)
David Gilbertson

1
Ich glaube, die von der obigen Abfrage zurückgegebenen Daten stammen letztendlich von Links, die über diese URL erreichbar sind. Biz.yahoo.com/ic/ind_index.html (diese zusätzlichen URLs können auch nützlich sein: biz.yahoo.com/p/s_conameu.html , biz .yahoo.com / p / sum_conameu.html )
richardr

12
Dies scheint nicht mehr zu funktionieren :(
André Pena

1
Ich denke, die Tabelle "yahoo.finance.sectors" wurde entfernt. Es gibt jedoch noch eine Quelle für die Daten - nur eine Webseite. ( In der Tat, wenn Sie das tun ‚select * from yahoo.finance.sectors‘ an der YQL Konsole bei developer.yahoo.com/yql/console , in der Rück eingebettet ist der Link auf die Webseite - biz.yahoo.com/ic /ind_index.html. ) Sie müssen also Code schreiben, um diese Seite abzurufen , und dann die Daten daraus analysieren. Sie erhalten die Liste der Sektoren, die Branchen in diesen Sektoren und die Branchen-ID (und Sie können aus der ersten Ziffer der Branchen-ID eine Branchen-ID erstellen).
Steve Greene

24

NASDAQ Stock listet ftp://ftp.nasdaqtrader.com/symboldirectory auf

Die 2 Dateien nasdaqlisted.txt und otherlisted.txt sind | Rohr getrennt. Das sollte Ihnen eine gute Liste aller Aktien geben.


Für die Faulen wie mich: ftp.nasdaqtrader.com/SymbolDirectory ftp.nasdaqtrader.com/SymbolDirectory/nasdaqlisted.txt ftp.nasdaqtrader.com/SymbolDirectory/otherlisted.txt
1mike12

nasdaqtraded.txt ist das, was Sie brauchen, es sind beide Listen zusammen.
Distelknoten

14

Ich kann möglicherweise mit einer Liste von Tickersymbolen für (US- und Nicht-US-) Aktien und für ETFs helfen.

Yahoo bietet einen Gewinnkalender, in dem alle Aktien aufgelistet sind, die Gewinne für einen bestimmten Tag bekannt geben. Dies schließt Aktien außerhalb der USA ein.

Hier ist zum Beispiel das heutige: http://biz.yahoo.com/research/earncal/20120710.html

Der letzte Teil der URL ist das Datum (im Format JJJJMMTT), für das Sie den Verdienstkalender wünschen. Sie können mehrere Tage durchlaufen und die Symbole aller Aktien abkratzen, die an diesen Tagen Gewinne gemeldet haben.

Es gibt keine Garantie dafür, dass Yahoo Daten für alle Aktien hat, die Gewinne melden, zumal einige Aktien nicht mehr existieren (Insolvenz, Akquisition usw.), aber dies ist wahrscheinlich ein anständiger Ausgangspunkt.

Wenn Sie damit vertraut sind R, können Sie dazu das qmao-Paket verwenden. (Siehe diesen Beitrag ), wenn Sie Probleme bei der Installation haben.

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"   

Dies schließt keine ETFs, Futures, Optionen, Anleihen, Devisen oder Investmentfonds ein.

Eine Liste der ETFs von Yahoo erhalten Sie hier: http://finance.yahoo.com/etf/browser/mkt Das zeigt nur die ersten 20. Sie benötigen die URL des Links "Alle anzeigen" am Ende dieser Seite . Sie können die Seite durchsuchen, um herauszufinden, wie viele ETFs es gibt, und dann eine URL erstellen.

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

Jetzt können Sie die Ticker aus der Tabelle auf dieser Seite extrahieren

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"

Das ist ungefähr die ganze Hilfe, die ich anbieten kann, aber Sie könnten etwas Ähnliches tun, um einige der angebotenen Futures zu erhalten, indem Sie diese Seiten abkratzen (dies sind nur US-Futures).

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 ,

Und für US- und Nicht-US-Indizes können Sie diese Seiten kratzen

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


2
Wie Sie geschrieben haben, erhalte ich möglicherweise nicht alle Ticker auf diese Weise und für mein Projekt ist es entweder alles (vollständige Liste) oder es spielt keine Rolle. Aber vielen Dank für die gründliche Antwort, GSee. Bin dankbar! Ich
wünsche dir

8

Ich habe dies einige Tage lang erforscht und dabei endlosen Hinweisen gefolgt, die dem, was ich suchte, nahe kamen, aber nicht ganz.

Ich brauche eine einfache Liste mit Symbolen, Branchen und Branchen. Ich arbeite in Java und möchte keinen nativen Plattformcode verwenden.

Es scheint, dass die meisten anderen Daten wie Anführungszeichen usw. leicht verfügbar sind.

Schließlich folgte ein Vorschlag, sich 'finviz.com' anzusehen. Sieht aus wie nur das Ticket. Versuchen Sie Folgendes:

http://finviz.com/export.ashx?v=111&t=aapl,cat&o=ticker Dies wird als Zeilen im CSV-Stil mit einer Kopfzeile zurückgegeben, die nach Tickersymbol geordnet ist. Sie können weiterhin Ticker hinzufügen. Im Code können Sie den Stream lesen. Oder Sie können sich vom Browser fragen lassen, ob Sie die Datei öffnen oder speichern möchten.

http://finviz.com/export.ashx?v=111&&o=ticker Gleicher CSV-Stil, jedoch alle verfügbaren Symbole (häufig über den weltweiten Austausch hinweg)

Ersetzen Sie 'Export' durch 'Screener' und die Daten werden im Browser angezeigt.

Es gibt viele weitere Optionen, eine für jedes Screener-Element auf der Site.

Bisher ist dies die leistungsstärkste und bequemste programmatische Methode, um die wenigen Daten abzurufen, die ich sonst nicht so einfach zu erhalten hätte. Und es sieht so aus, als ob diese Site eine einzige Quelle für die meisten Dinge sein könnte, die Sie möglicherweise benötigen, außer Echtzeit- oder Echtzeit-Zitaten.


4
Jede URL, die ich lade, wird zu finviz.com/elite.ashx
PUG

Ich musste den Elite Trader Service abonnieren, aber es lohnt sich. Vielen Dank.
Vlmercado

7

Die vollständige Liste der Yahoo-Symbole / Ticker / Aktien steht auf der folgenden Website zum Download (Excel-Format) zur Verfügung. http://www.myinvestorshub.com/yahoo_stock_list.php

Liste aktualisiert auf Januar 2016: http://investexcel.net/all-yahoo-finance-stock-tickers/


3
Wie aktuell ist diese Liste?
Jeroen

1
Diese Liste scheint unvollständig zu sein, z. B. ist toget nicht darauf.
user592419

Diese Liste schneidet bei 3000 Symbolen ab. Es ist in alphabetischer Reihenfolge, also für die USA, die am Ende bei FDEF sind. Andere Märkte mit weniger als 3000 Symbolen scheinen besser abzuschneiden, wie beispielsweise Hongkong. Das heißt, ich habe keine Ahnung, wie vollständig / aktuell es ist.
fantastisch

2
Scheint unvollständig und nicht gepflegt.
Jens A. Koch

Der Link funktioniert nicht mehr
toshiro92

1

Eine Problemumgehung, die ich dafür hatte, bestand darin, die Sektoren zu durchlaufen (was zu dem Zeitpunkt, als Sie dies tun konnten ... ich habe das kürzlich nicht getestet).

Sie werden schließlich blockiert, wenn Sie dies auf diese Weise tun, da YQL pro Tag gedrosselt wird.

Verwenden Sie nach Möglichkeit die CSV-API, um dies zu vermeiden.


1

Ich hatte das gleiche Problem, aber ich glaube, ich habe eine einfache Lösung (Code stammt aus meiner RoR-App): Extrahieren Sie Branchen-IDs aus yahoo.finance.sectors und fügen Sie sie zu db hinzu:

    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

Extrahieren Sie alle Unternehmen mit ihren Symbolen mit Branchen-IDs:

    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

Verbindung 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

Entschuldigung für das Durcheinander, aber dies ist die erste Testversion für mein Projekt und ich brauchte sie sehr schnell. Es gibt einige Helfervariablen und andere Dinge für meine App, tut mir leid. Aber ich habe die Frage: Haben Sie viele Symbole? Ich habe 5500.


5500 wären wahrscheinlich nur US-Aktiensymbole (Yahoo Finance deckt weit mehr ab - weltweit - wie Sie in der akzeptierten Antwort sehen können, hat er ungefähr 75.000 Symbole! :) ... Die akzeptierte Antwort .NET-Methode wurde noch nicht in Ruby konvertiert (Ich verwende auch RoR) Wenn Sie es also zum Laufen bringen, dh mehr Symbole finden, lassen Sie es mich bitte wissen. Vielen Dank! :-)
rassom
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.