Jak uzyskać pełną listę symboli giełdowych od Yahoo Finance? [Zamknięte]

100

Bez końca szukałem metody uzyskania pełnej (i codziennie aktualizowanej) listy wszystkich symboli giełdowych Yahoo dostępnych na stronie http://finance.yahoo.com

Yahoo ma informacje o akcjach, kontraktach terminowych itp. Dla wielu giełd na całym świecie i chciałbym uzyskać połączoną listę wszystkich symboli giełdowych dostępnych za ich pośrednictwem. Próbowałem YQL, ale mają one ograniczenie klauzuli „gdzie symbol = (lub in)”, więc nie mogę wybrać * spośród symboli.

Zasadniczo uzyskanie szczegółowych informacji na temat jednego symbolu lub kilku symboli jednocześnie jest łatwe, ale po prostu nie mogę się dowiedzieć, jak uzyskać listę wszystkich dostępnych symboli.

Czy ktoś może pomóc, proszę?

rassom
źródło
9
Czy dostałeś jakąś radość? Znalazłem to: eoddata.com/symbols.aspx
Codek
Dzięki Codek :-) Nie, nie znalazłem tego, a zadaniem było znalezienie listy symboli Yahoos, nie nikogo innego, więc niestety nie mogę korzystać z Eoddatas.
Jeszcze
2
ok nie ma problemu. Chciałem tylko symboli LSE, więc powyższe pomogło mi - uważam, że symbole na giełdzie są spójne np. W yahoo / lse / google finance itp. - z wyjątkiem yahoo ma .L na końcu, aw Google ma LON. To niedorzeczne, jak wszystkie dane dotyczące cen są chętnie dostępne, ale nie lista symboli, których po prostu nie rozumiem!
Codek
Teraz możesz użyć metadanych z quandl zawierających 98k symboli. Zauważ, że musisz zdekodować symbol quandl z powrotem do oryginalnego symbolu Yahoo. INDEX_ dostaje ^ i _ dostaje. quandl.com/data/YAHOO/metadata
KIC
3
Program w Pythonie, który może to za Ciebie zrobić: github.com/Benny-/Yahoo-ticker-symbol-downloader
André Pena

Odpowiedzi:

13

Na http://code.google.com/p/yahoo-finance-managed/ znajduje się ładne opakowanie C # dla interfejsu API Yahoo.Finance , które Cię tam zaprowadzi. Niestety nie ma bezpośredniego sposobu na pobranie listy tickerów, ale poniższa lista tworzy ją poprzez iterację w grupach alfabetycznych:

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

            }
        }

Dało mi to listę około 75 000 papierów wartościowych w około 4 minuty.

jm1102
źródło
24
Czy mógłbyś uruchomić ten kod i umieścić kopię wyniku na pastebin, dla tych z nas, którzy nie używają C #?
Jeroen,
1
Wygląda na to, że alfabetyczny wynik nie jest kompletny. Brakowało wielu symboli.
liang,
Próbowałem uruchomić ten kod, ale niestety nie zwrócił on żadnych wyników. Jakieś pomysły?
lionheart
3
Myślę, że to już nie działa. Wspomniany interfejs API opakowania wysyła żądanie do biz.yahoo.com/i, które najwyraźniej uległo zmianie (przekierowuje do finance.yahoo.com/q) i nie zawiera już tabeli sugerowanej przez XPath.
richardr
45

miałem podobny problem. yahoo tego nie oferuje, ale możesz je uzyskać, przeglądając oświadczenia document.write na liście nyse.com i znajdując plik .js, w którym po prostu przechowuje listę firm zaczynających się na podaną literę jako tablicę js dosłowny. możesz również pobrać ładne, uporządkowane pliki csv z nasdaq.com tutaj: http://www.nasdaq.com/screening/companies-by-name.aspx?letter=0&exchange=nasdaq&render=download (zamień exchange = nasdaq na exchange = nyse dla symboli nyse).

Ian Ooi
źródło
2
Dzięki, Ian. Potrzebuję listy dla Yahoo, ponieważ mają one również tickery poza Stanami Zjednoczonymi, więc Nasdaq niestety nie wystarczy.
rassom
5
To świetnie, dzięki. Możesz również zamienić giełdę na „wszystko”, aby otrzymać paski dla wszystkich trzech indeksów.
Darin Peterson
link prowadzi do strony z taką listą ale nie widzę opcji pobrania csv
hipoglucido
45

Udało mi się zrobić coś podobnego, używając tego adresu URL:

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

Pobiera pełną listę symboli giełdowych za pomocą interfejsu API Yahoo YQL, w tym nazwę akcji, symbol giełdowy i identyfikator branży. Wydaje się, że nie ma żadnych modyfikatorów symboli giełdowych. Np. Rogers Communications Inc pobiera tylko RCI, a nie RCI-A.TO, RCI-B.TO itp. Nie znalazłem jeszcze źródła tych informacji - jeśli ktoś wie, jak zautomatyzować pobieranie, ja chciałbym to usłyszeć. Byłoby również miło znaleźć sposób na pobranie pewnego rodzaju relacji między symbolem giełdowym a giełdą, na której jest przedmiotem obrotu, ponieważ niektóre są przedmiotem obrotu na wielu giełdach, a może chcę tylko spojrzeć na rzeczy na TSX lub coś takiego .

Jan
źródło
9
LUB jeśli bardziej interesuje Cię json
Andrew Luhring
1
Niezłe. Surowy YQL: select * z yahoo.finance.industry, gdzie id in (select industry.id z yahoo.finance.sectors)
David Gilbertson
1
Uważam, że dane zwrócone przez powyższe zapytanie ostatecznie pochodzą z linków dostępnych z tego adresu URL biz.yahoo.com/ic/ind_index.html (te dodatkowe adresy mogą być również przydatne: biz.yahoo.com/p/s_conameu.html , biz .yahoo.com / p / sum_conameu.html )
richardr
13
Wygląda na to, że to już nie działa :(
André Pena
1
Myślę, że tabela „yahoo.finance.sectors” została usunięta. Jednak nadal istnieje źródło danych - tylko strona internetowa. (Rzeczywiście, jeśli wybierzesz opcję „select * from yahoo.finance.sectors” w konsoli YQL pod adresem developer.yahoo.com/yql/console , w zwrocie zostanie osadzony link do strony internetowej - biz.yahoo.com/ic /ind_index.html. ) Więc to, co musisz zrobić, to napisać kod, aby uzyskać tę stronę, a następnie przeanalizować dane z niej. Wyświetli listę sektorów, branż w tych sektorach oraz identyfikator branży (i możesz utworzyć identyfikator sektora z pierwszej cyfry identyfikatora branży).
Steve Greene
24

NASDAQ Lista giełdowa ftp://ftp.nasdaqtrader.com/symboldirectory

Dwa pliki nasdaqlisted.txt i otherlisted.txt to | rura oddzielona. To powinno dać ci dobrą listę wszystkich akcji.

tr4nc3
źródło
dla leniwych jak ja: ftp.nasdaqtrader.com/SymbolDirectory ftp.nasdaqtrader.com/SymbolDirectory/nasdaqlisted.txt ftp.nasdaqtrader.com/SymbolDirectory/otherlisted.txt
1mike12
Nasdaqtraded.txt jest tym, czego potrzebujesz, to połączenie obu tych list.
thistleknot
14

Być może będę mógł pomóc z listą symboli giełdowych dla akcji (amerykańskich i spoza USA) oraz funduszy ETF.

Yahoo udostępnia kalendarz zarobków, który zawiera listę wszystkich akcji, które ogłaszają zarobki w danym dniu. Obejmuje to akcje spoza USA.

Na przykład, oto dzisiaj: http://biz.yahoo.com/research/earncal/20120710.html

ostatnia część adresu URL to data (w formacie RRRRMMDD), dla której chcesz uzyskać kalendarz zarobków. Możesz zapętlić kilka dni i zeskrobać symbole wszystkich akcji, które zgłosiły zyski w tych dniach.

Nie ma gwarancji, że Yahoo posiada dane dotyczące wszystkich akcji, które zgłaszają zyski, zwłaszcza że niektóre akcje już nie istnieją (upadłość, przejęcia itp.), Ale jest to prawdopodobnie dobry punkt wyjścia.

Jeśli znasz R, możesz użyć do tego pakietu qmao . (Zobacz ten post ), jeśli masz problemy z instalacją.

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"   

Nie będzie to obejmować żadnych funduszy ETF, kontraktów futures, opcji, obligacji, forex ani funduszy inwestycyjnych.

Możesz pobrać listę ETF z yahoo tutaj: http://finance.yahoo.com/etf/browser/mkt To pokazuje tylko pierwsze 20. Potrzebujesz adresu URL linku "Pokaż wszystko" na dole tej strony . Możesz zeskrobać stronę, aby dowiedzieć się, ile jest funduszy ETF, a następnie utworzyć adres 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

Teraz możesz wyodrębnić Tickery z tabeli na tej stronie

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"

To prawie cała pomoc, jaką mogę zaoferować, ale możesz zrobić coś podobnego, aby uzyskać niektóre z oferowanych przez nie kontraktów futures, zeskrobując te strony (są to tylko kontrakty futures na Stany Zjednoczone)

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 ,

A w przypadku indeksów amerykańskich i spoza USA możesz zeskrobać te strony

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
źródło
2
Jak napisałeś, mogę nie otrzymać wszystkich pasków w ten sposób i dla mojego projektu to albo wszystko (pełna lista), albo to nie ma znaczenia. Ale bardzo dziękuję za dokładną odpowiedź, Gsee. Doceniam to! Miłego dnia :-)
rassom
8

Badałem to przez kilka dni, podążając za niekończącymi się wskazówkami, które zbliżyły się, ale nie do końca, do tego, czego szukałem.

Potrzebuję prostej listy „symboli, sektorów, gałęzi przemysłu”. Pracuję w Javie i nie chcę używać natywnego kodu platformy.

Wydaje się, że większość innych danych, takich jak cytaty itp., Jest łatwo dostępna.

Wreszcie, po sugestii, aby spojrzeć na „finviz.com”. Wygląda na to, że tylko bilet. Spróbuj użyć następującego:

http://finviz.com/export.ashx?v=111&t=aapl,cat&o=ticker Wraca jako wiersze w stylu csv z wierszem nagłówka, uporządkowanym według symbolu giełdowego. Możesz nadal dodawać paski. W kodzie możesz odczytać strumień. Możesz też pozwolić przeglądarce zapytać, czy otworzyć, czy zapisać plik.

http://finviz.com/export.ashx?v=111&&o=ticker Ten sam styl csv, ale pobiera wszystkie dostępne symbole (dużo, na giełdach globalnych)

Zastąp „eksport” słowem „screener”, a dane pojawią się w przeglądarce.

Istnieje wiele innych opcji, których możesz użyć, po jednej dla każdego elementu screenera w witrynie.

Jak dotąd jest to najpotężniejszy i najwygodniejszy programistyczny sposób uzyskiwania tych kilku danych, których nie mógłbym łatwo uzyskać. Wygląda na to, że ta witryna może być pojedynczym źródłem większości informacji, których możesz potrzebować, innych niż notowania w czasie rzeczywistym lub prawie w czasie rzeczywistym.

Higgsa
źródło
4
Każdy adres URL, który ładuję,
PUG
Musiałem wykupić abonament na usługę Elite trader, ale warto. Dzięki.
vlmercado
7

Pełna lista symboli / pasków / akcji Yahoo jest dostępna do pobrania (format Excel) na poniższej stronie internetowej. http://www.myinvestorshub.com/yahoo_stock_list.php

Lista zaktualizowana do stycznia 2016 r .: http://investexcel.net/all-yahoo-finance-stock-tickers/

Pravin
źródło
3
Jak aktualna jest ta lista?
Jeroen,
1
Ta lista wydaje się niekompletna, np. Nie ma na niej GOOG.
user592419
Ta lista kończy się na 3000 symboli. Jest w porządku alfabetycznym, więc dla USA, które kończą w FDEF. Inne rynki z mniej niż 3000 symboli wydają się radzić sobie lepiej, takie jak Hongkong. To powiedziawszy, nie mam pojęcia, jak kompletne / aktualne jest to.
fantabolous
2
Wydaje się niekompletne i niekonserwowane.
Jens A. Koch
Link już nie działa
toshiro92
1

Jedynym obejściem tego problemu było iterowanie po sektorach (co w tamtym czasie można było zrobić ... Ostatnio tego nie testowałem).

W końcu zostaniesz zablokowany, gdy zrobisz to w ten sposób, ponieważ YQL jest ograniczany dziennie.

Aby tego uniknąć, używaj interfejsu API CSV, gdy tylko jest to możliwe.

RobotHumans
źródło
1

Miałem ten sam problem, ale myślę, że mam proste rozwiązanie (kod pochodzi z mojej aplikacji RoR): Wyodrębnij identyfikatory branżowe z yahoo.finance.sectors i dodaj je do bazy danych:

    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

Wyodrębnij wszystkie firmy wraz z ich symbolami z identyfikatorami branżowymi:

    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

Pomocnik połączenia:

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

Przepraszam za bałagan, ale to jest pierwsza wersja testowa mojego projektu i potrzebowałem jej bardzo szybko. Jest kilka pomocników variabels i innych rzeczy dla mojej aplikacji, przepraszam za to. Ale mam pytanie: czy masz wiele symboli? Mam 5500.

quatermain
źródło
5500 to prawdopodobnie tylko amerykańskie symbole giełdowe (finanse Yahoo obejmują znacznie więcej - na całym świecie - jak widać w zaakceptowanej odpowiedzi, otrzymał około 75 000 symboli! :) ... Nie przekonwertowałem jeszcze zaakceptowanej odpowiedzi .NET way na Ruby (Ja też używam RoR), więc jeśli sprawisz, że to zadziała, tj. Znajdź więcej symboli, daj mi znać. Dzięki! :-)
rassom