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


He buscado en Google interminablemente un método para obtener una lista completa (y actualizada diariamente) de todos los símbolos de Yahoo ticker 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 disponibles a través de ellos. He probado YQL pero tienen una restricción de cláusula " where symbol = (or in)", por lo que no puedo seleccionar * de los símbolos.

Así que básicamente, obtener detalles la información 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?

Author: Kara, 2011-03-09

9 answers

Hay un buen envoltorio de C# para Yahoo.API de finanzas en http://code.google.com/p/yahoo-finance-managed / eso te llevará allí. Desafortunadamente no hay una manera directa de descargar la lista de ticker, 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.

 12
Author: jm1102,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2012-11-03 01:31:40

Logré hacer algo similar usando esta URL:

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

Descarga una lista completa de símbolos de acciones usando la API Yahoo YQL, incluyendo el nombre de acciones, el símbolo de acciones y el ID de la industria. Lo que no parece tener ningún tipo de stock modificadores de símbolos. Por ejemplo, para Rogers Communications Inc, solo descarga RCI, no RCI-A.TO, RCI-B.TO, etc. Aún no he encontrado una fuente para esa información, si alguien conoce una forma de automatizar la descarga, me gustaría escucharla. Además, sería bueno encontrar una manera de descargar algún tipo de relación entre el símbolo de la acción 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 el TSX o algo.

 44
Author: John,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-05-03 13:47:35

Tuve un problema similar. yahoo no lo ofrece, pero usted puede conseguir uno mirando a través del documento.escribir declaraciones sobre nyse.com ' s lista y encontrar el .archivo js donde simplemente pasan a almacenar la lista de empresas a partir de la letra dada como un literal de matriz js. también puede obtener archivos csv bien ordenados de nasdaq.com aquí: http://www.nasdaq.com/screening/companies-by-name.aspx?letter=0&exchange=nasdaq&render=download (sustitúyase exchange = nasdaq por exchange = nyse por nyse simbolo).

 42
Author: Ian Ooi,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2011-06-17 21:01:50

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

Los 2 archivos nasdaqlistados.txt y otros en la lista.txt son / tubo separado. Eso debería darle una buena lista de todas las acciones.

 20
Author: tr4nc3,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2012-11-05 03:49:19

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

Yahoo proporciona un Calendario de ganancias que enumera todas las acciones que anuncian ganancias por un día determinado. Esto incluye acciones no estadounidenses.

Por ejemplo, aquí está el 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 Calendario de Ganancias. Puede recorrer varios días y raspar los Símbolos de todas las acciones que reportaron ganancias en esos días.

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

Si está familiarizado con R, puede utilizar el paquete qmao para hacer esto. (Ver este post ) 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á ninguna ETFs, futuros, opciones, bonos, forex o fondos mutuos.

Puede obtener una lista de ETF de yahoo aquí: http://finance.yahoo.com/etf/browser/mkt Eso sólo muestra los primeros 20. Necesita la URL del enlace "Mostrar todo" en el al final de esa página. Puede raspar la página para averiguar cuántos Hay ETFS, luego construye 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"

Eso es casi toda la ayuda que puedo ofrecer, pero usted podría hacer algo similar obtenga algunos de los futuros que ofrecen al raspar estas páginas (Estos son sólo estados UNIDOS futuros)

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 los índices estadounidenses y no estadounidenses, podría raspar estos pages

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

 14
Author: GSee,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-05-23 11:47:08

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

Necesito 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 otros datos, como citas, etc., está disponible.

Finalmente, siguió una sugerencia para mirar 'finviz.com Parece justo el boleto. Prueba a usar el siguiente:

Http://finviz.com/export.ashx?v=111&t=aapl, cat&o=ticker Esto regresa como líneas, estilo csv, con una fila de encabezado, ordenada por símbolo de ticker. Puedes seguir agregando tickers. En el código, se 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 (mucho, a través de intercambios globales)

Sustitúyase 'exportar' por 'filtro' y los datos se mostrarán en el navegador.

Hay muchas más opciones que puede usar, una para cada elemento de screener en el 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 sola fuente para la mayoría de lo que podría necesitar, aparte de citas en tiempo real o casi real.

 8
Author: Higgs,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-07-03 03:29:00

La lista completa de símbolos/tickers/stocks 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 /

 5
Author: Pravin,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-07-29 13:42:13

Una solución que tenía para esto era iterar sobre los sectores(que en ese momento se podía hacer...No he probado eso recientemente).

Terminas siendo bloqueado eventualmente cuando lo haces de esa manera, ya que YQL se estrangula por día.

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

 1
Author: RobotHumans,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2012-05-20 22:54:41

Tuve el mismo problema, pero creo que tengo una solución simple(el código es de mi aplicación RoR): Extraer ID de la industria de yahoo.financiación.sectores y añadirlo 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

Extraer todas las comanias con sus símbolos con id de la 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 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

Lo siento por mess, pero esta es la primera versión de prueba para mi proyecto y lo necesitaba muy rápido. Hay algunos ayudantes variabels y otras cosas para mi aplicación, lo siento por ello. Pero tengo una pregunta: Tener muchos símbolos hacer ¿lo has hecho? Tengo 5500.

 1
Author: quatermain,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2012-11-30 13:41:17