¿Cómo obtener una lista completa de símbolos de cotización de Yahoo Finance? [cerrado]


100

Busqué en Google sin cesar un método para obtener una lista completa (y actualizada diariamente) de todos los símbolos de cotizaciones de Yahoo disponibles a través de http://finance.yahoo.com

Yahoo tiene información sobre acciones, futuros, etc. para muchos intercambios en todo el mundo, y me gustaría una lista combinada de todos los símbolos de cotización disponibles a través de ellos. Probé YQL pero tienen una restricción de cláusula "donde símbolo = (o en)", por lo que no puedo seleccionar * de los símbolos.

Entonces, básicamente, obtener información detallada para un solo símbolo o varios símbolos a la vez es fácil, pero parece que no puedo averiguar cómo obtener una lista de todos los tickers disponibles.

¿Alguien puede ayudar, por favor?


8
¿Recibiste alguna alegría? Encontré esto: eoddata.com/symbols.aspx
Codek

Gracias Codek :-) No, no lo encontré y la tarea era encontrar la lista de símbolos de Yahoos, nadie más, así que desafortunadamente no puedo usar Eoddatas. Gracias de nuevo y que tengas un gran fin de semana :-)
rassom

2
ok no hay problemas. Solo quería los símbolos LSE, así que lo anterior me ayudó. Creo que los símbolos dentro del intercambio son consistentes en, por ejemplo, yahoo / lse / google finance, etc., excepto que yahoo tiene .L al final y en google tiene LON. Es ridículo cómo todos los datos de precios están disponibles voluntariamente, pero no la lista de símbolos ¡Simplemente no la entiendo!
Codek

Ahora puede usar los metadatos de quandl con 98k símbolos. Tenga en cuenta que debe decodificar el símbolo quandl de nuevo al símbolo yahoo original. INDEX_ obtiene ^ y _ obtiene. quandl.com/data/YAHOO/metadata
KIC

3
Un programa de Python que puede hacer eso por usted: github.com/Benny-/Yahoo-ticker-symbol-downloader
André Pena

Respuestas:


13

Hay un buen contenedor de C # para la API de Yahoo.Finance en http://code.google.com/p/yahoo-finance-managed/ que lo llevará allí. Desafortunadamente, no hay una forma directa de descargar la lista de cotizaciones, pero lo siguiente crea la lista iterando a través de los grupos alfabéticos:

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

            }
        }

Me dio una lista de unos 75.000 valores en unos 4 minutos.


24
¿Podría ejecutar este código y poner una copia de la salida en pastebin, para aquellos de nosotros que no usamos C #?
Jeroen

1
Parece que el resultado alfabético no está completo. Muchos símbolos se perdieron.
liang

Intenté ejecutar este código, pero desafortunadamente no arrojó resultados. ¿Algunas ideas?
lionheart

3
No creo que esto funcione más. La API de envoltura mencionada realiza una solicitud a biz.yahoo.com/i que parece haber cambiado (redirecciona a finance.yahoo.com/q) y ya no contiene la tabla que sugiere XPath.
richardr

45

Tuve un problema similar. yahoo no lo ofrece, pero puede obtener uno mirando las declaraciones document.write en la lista de nyse.com y encontrando el archivo .js donde simplemente almacenan la lista de compañías que comienzan con la letra dada como una matriz js literal. también puede obtener archivos csv ordenados y agradables de nasdaq.com aquí: http://www.nasdaq.com/screening/companies-by-name.aspx?letter=0&exchange=nasdaq&render=download (reemplace exchange = nasdaq con exchange = nyse para los símbolos nyse).


2
Gracias Ian. Sin embargo, necesito la lista de Yahoo, ya que también tienen tickers fuera de los EE. UU., Por lo que, lamentablemente, Nasdaq no es suficiente.
rassom

5
Esto es excelente, gracias. También puede reemplazar el intercambio con "todos" para obtener los tickers de los tres índices.
Darin Peterson

el enlace conduce a un sitio web con dicha lista pero no veo la opción de descargar un csv
hipoglucido

45

Me las arreglé para hacer algo similar usando esta URL:

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

Descarga una lista completa de símbolos de acciones utilizando la API de Yahoo YQL, incluido el nombre de la acción, el símbolo de la acción y la identificación de la industria. Lo que no parece tener es ningún tipo de modificadores de símbolo bursátil. Por ejemplo, para Rogers Communications Inc, solo descarga RCI, no RCI-A.TO, RCI-B.TO, etc. Todavía no he encontrado una fuente para esa información. Si alguien conoce una forma de automatizar la descarga, yo Me gustaría escucharlo. Además, sería bueno encontrar una manera de descargar algún tipo de relación entre el símbolo bursátil y el intercambio en el que se negocia, ya que algunos se negocian en múltiples intercambios, o tal vez solo quiero ver cosas en la TSX o algo así. .


9
O si json es más lo tuyo: json
Andrew Luhring

1
Buena esa. El YQL sin procesar: seleccione * de yahoo.finance.industry donde id en (seleccione industry.id de yahoo.finance.sectors)
David Gilbertson

1
Creo que los datos devueltos por la consulta anterior provienen en última instancia de enlaces accesibles desde esta URL biz.yahoo.com/ic/ind_index.html (estas URL adicionales también pueden ser útiles: biz.yahoo.com/p/s_conameu.html , biz .yahoo.com / p / sum_conameu.html )
richardr

13
Esto parece no estar funcionando más :(
André Pena

1
Creo que se ha eliminado la tabla "yahoo.finance.sectors". Pero todavía hay una fuente para los datos, solo una página web. (De hecho, si 'selecciona * de yahoo.finance.sectors' en la consola de YQL en developer.yahoo.com/yql/console , en la declaración se incluye el enlace a la página web: biz.yahoo.com/ic /ind_index.html. ) Entonces, lo que tienes que hacer es escribir un código para obtener esa página y luego analizar los datos de ella. Le dará la lista de sectores, las industrias en esos sectores y la ID de la industria (y puede hacer una ID de sector con el primer dígito de la ID de la industria).
Steve Greene

24

Listas de acciones de NASDAQ ftp://ftp.nasdaqtrader.com/symboldirectory

Los 2 archivos nasdaqlisted.txt y otherlisted.txt son | tubería separada. Eso debería darle una buena lista de todas las acciones.


para los perezosos como yo: ftp.nasdaqtrader.com/SymbolDirectory ftp.nasdaqtrader.com/SymbolDirectory/nasdaqlisted.txt ftp.nasdaqtrader.com/SymbolDirectory/otherlisted.txt
1mike12

nasdaqtraded.txt es lo que necesita, son ambas listas combinadas.
thistleknot

14

Es posible que pueda ayudar con una lista de símbolos de cotización para acciones (estadounidenses y no estadounidenses) y para ETF.

Yahoo proporciona un calendario de ganancias que enumera todas las acciones que anuncian ganancias para un día determinado. Esto incluye acciones fuera de Estados Unidos.

Por ejemplo, aquí está el día de hoy: http://biz.yahoo.com/research/earncal/20120710.html

la última parte de la URL es la fecha (en formato AAAAMMDD) para la que desea el Calendario de ganancias. Puede recorrer varios días y raspar los símbolos de todas las acciones que informaron ganancias en esos días.

No hay garantía de que Yahoo tenga datos para todas las acciones que reportan ganancias, especialmente porque algunas acciones ya no existen (quiebra, adquisición, etc.), pero este es probablemente un punto de partida decente.

Si está familiarizado R, puede usar el paquete qmao para hacer esto. (Vea esta publicación ) si tiene problemas para instalarlo.

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"   

Esto no incluirá ETF, futuros, opciones, bonos, divisas o fondos mutuos.

Puede obtener una lista de ETF de yahoo aquí: http://finance.yahoo.com/etf/browser/mkt Eso solo muestra los primeros 20. Necesita la URL del enlace "Mostrar todo" en la parte inferior de esa página. . Puede raspar la página para averiguar cuántos ETF hay y luego construir una 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

Ahora, puede extraer los Tickers de la tabla en esa página.

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"

Esa es toda la ayuda que puedo ofrecer, pero podría hacer algo similar para obtener algunos de los futuros que ofrecen raspando estas páginas (estos son solo futuros de EE.

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 ,

Y, para índices de EE. UU. Y fuera de EE. UU., Puede raspar estas páginas

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
Como escribiste, es posible que no obtenga todos los tickers de esta manera y para mi proyecto es todo (escucha completa) o no importa. Pero muchas gracias por la completa respuesta, GSee. ¡Lo aprecio! Que tengas un gran día :-)
rassom

8

He estado investigando esto durante unos días, siguiendo innumerables pistas que se acercaron, pero no del todo, a lo que estaba buscando.

Mi necesidad es una lista simple de 'símbolo, sector, industria'. Estoy trabajando en Java y no quiero usar ningún código nativo de la plataforma.

Parece que la mayoría de los demás datos, como citas, etc., están fácilmente disponibles.

Finalmente, siguió una sugerencia de mirar 'finviz.com'. Parece solo el boleto. Intente usar lo siguiente:

http://finviz.com/export.ashx?v=111&t=aapl,cat&o=ticker Esto vuelve como líneas, estilo csv, con una fila de encabezado, ordenadas por símbolo de cotización. Puedes seguir agregando tickers. En código, puede leer la secuencia. O puede dejar que el navegador le pregunte si desea abrir o guardar el archivo.

http://finviz.com/export.ashx?v=111&&o=ticker mismo estilo csv, pero extrae todos los símbolos disponibles (muchos, en intercambios globales)

Reemplace 'exportar' con 'screener' y los datos aparecerán en el navegador.

Hay muchas más opciones que puede utilizar, una para cada elemento de filtrado del sitio.

Hasta ahora, esta es la forma programática más poderosa y conveniente de obtener los pocos datos que de otra manera no podría obtener fácilmente. Y parece que este sitio bien podría ser una fuente única para la mayor parte de lo que podría necesitar, además de cotizaciones en tiempo real o casi real.


4
Cada carga de URL que se redirige a finviz.com/elite.ashx
PUG

Tuve que suscribirme al servicio de comerciante Elite, pero vale la pena. Gracias.
vlmercado

7

La lista completa de símbolos / tickers / acciones de yahoo está disponible para descargar (formato excel) en el siguiente sitio web. http://www.myinvestorshub.com/yahoo_stock_list.php

Lista actualizada a enero de 2016: http://investexcel.net/all-yahoo-finance-stock-tickers/


3
¿Qué tan actualizada está esta lista?
Jeroen

1
Esta lista parece estar incompleta, por ejemplo, GOOG no está en ella.
user592419

Esta lista se corta en 3000 símbolos. Está en orden alfabético, por lo que para los EE. UU. Termina en FDEF. A otros mercados con menos de 3000 símbolos parece que les va mejor, como Hong Kong. Dicho esto, no tengo idea de lo completo / actualizado que está.
fantástico

2
Parece incompleto y sin mantenimiento.
Jens A. Koch

El enlace ya no funciona
toshiro92

1

Una solución que tuve para esto fue iterar sobre los sectores (que en ese momento podía hacer ... no lo he probado recientemente).

Sin embargo, termina bloqueándose eventualmente cuando lo hace de esa manera, ya que YQL se ralentiza por día.

Utilice la API de CSV siempre que sea posible para evitar esto.


1

Tuve el mismo problema, pero creo que tengo una solución simple (el código es de mi aplicación RoR): extraiga los identificadores de la industria de yahoo.finance.sectors y agréguelo 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

Extraiga todas las empresas con sus símbolos con identificadores de industria:

    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

Conexión infernal:

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

Perdón por el lío, pero esta es la primera versión de prueba para mi proyecto y la necesitaba muy rápido. Hay algunas variantes de ayuda y otras cosas para mi aplicación, lo siento. Pero tengo una pregunta: ¿Tienes muchos símbolos? Tengo 5500.


5500 probablemente solo serían símbolos de acciones de EE. UU. (Yahoo Finance cubre mucho más, en todo el mundo, como puede ver en la respuesta aceptada, ¡obtuvo alrededor de 75,000 símbolos! :) ... Todavía no he convertido la respuesta aceptada en .NET a Ruby (También estoy usando RoR), así que si lo haces funcionar, es decir, si encuentras más símbolos, házmelo saber. ¡Gracias! :-)
rassom
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.