Como obter uma lista completa dos símbolos de ação do Yahoo Finance? [fechadas]

100

Pesquisei infinitamente no Google por um método de obter uma lista completa (e atualizada diariamente) de todos os símbolos do Yahoo disponíveis em http://finance.yahoo.com

O Yahoo tem informações sobre ações, futuros, etc. para várias bolsas em todo o mundo, e eu gostaria de uma lista combinada de todos os símbolos disponíveis através deles. Eu tentei YQL, mas eles têm uma restrição de cláusula "where symbol = (ou in)", então não posso selecionar * a partir de símbolos.

Então, basicamente, obter informações detalhadas para um único símbolo ou vários símbolos de uma vez é fácil, mas simplesmente não consigo descobrir como obter uma lista de todos os tickers disponíveis.

Alguém pode ajudar por favor?

rassom
fonte
8
Você teve alguma alegria? Eu encontrei isto: eoddata.com/symbols.aspx
Codek
Obrigado Codek :-) Não, eu não encontrei e a tarefa era encontrar a lista de símbolos Yahoos, não qualquer outra pessoa, então infelizmente não posso usar Eoddatas. Obrigado novamente e tenha um ótimo fim de semana :-)
rassom
2
ok sem problemas. Eu queria apenas os símbolos LSE, então o acima me ajudou - acredito que os símbolos dentro da troca são consistentes em, por exemplo, yahoo / lse / google finance etc - exceto para yahoo, ele tem .L no final e no google tem LON. É ridículo como todos os dados de preços estão disponíveis de bom grado, mas não a lista de símbolos que simplesmente não entendo!
Codek
Agora você pode usar os metadados do quandl contendo 98k símbolos. Observe que você deve decodificar o símbolo quandl de volta ao símbolo yahoo original. INDEX_ obtém ^ e _ obtém. quandl.com/data/YAHOO/metadata
KIC
3
Um programa python que pode fazer isso por você: github.com/Benny-/Yahoo-ticker-symbol-downloader
André Pena

Respostas:

13

Há um bom wrapper C # para a API Yahoo.Finance em http://code.google.com/p/yahoo-finance-managed/ que o levará até lá. Infelizmente, não há uma maneira direta de baixar a lista de cotações, mas o seguinte cria a lista iterando através dos 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);
                }

            }
        }

Deu-me uma lista de cerca de 75.000 títulos em cerca de 4 minutos.

jm1102
fonte
24
Você poderia executar este código e colocar uma cópia da saída no pastebin, para aqueles de nós que não usam C #?
Jeroen
1
Parece que o resultado alfabético não está completo. Muitos símbolos foram perdidos.
liang
Tentei executar este código, mas infelizmente não retornou nenhum resultado. Alguma ideia?
lionheart
3
Acho que isso não funciona mais. A API do wrapper mencionada faz uma solicitação para biz.yahoo.com/i que parece ter mudado (redireciona para finance.yahoo.com/q) e não contém mais a tabela que o XPath sugere.
richardr
45

Eu tive um problema parecido. yahoo não oferece isso, mas você pode obter um olhando as declarações document.write na lista de nyse.com e encontrando o arquivo .js onde eles simplesmente armazenam a lista de empresas começando com a letra fornecida como uma matriz js literal. você também pode obter arquivos csv bem organizados em nasdaq.com aqui: http://www.nasdaq.com/screening/companies-by-name.aspx?letter=0&exchange=nasdaq&render=download (substitua exchange = nasdaq por exchange = nyse para símbolos nyse).

Ian Ooi
fonte
2
Obrigado Ian. Eu preciso da lista para o Yahoo, pois eles também têm tickers fora dos EUA, então o Nasdaq infelizmente não é suficiente.
rassom
5
Isso é excelente, obrigado. Você também pode substituir a troca por "todos" para obter os tickers para todos os três índices.
Darin Peterson
o link leva a um site com essa lista, mas não vejo a opção de baixar um csv
hipoglucido
45

Consegui fazer algo semelhante usando este URL:

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

Ele baixa uma lista completa de símbolos de ações usando a API YQL do Yahoo, incluindo o nome do estoque, símbolo de ação e ID do setor. O que parece não ter nenhum tipo de modificador de símbolo de ação. Por exemplo, para Rogers Communications Inc, ele apenas baixa RCI, não RCI-A.TO, RCI-B.TO, etc. Eu não encontrei uma fonte para essas informações ainda - se alguém souber de uma maneira de automatizar o download, eu gostaria de ouvir. Além disso, seria bom encontrar uma maneira de fazer o download de algum tipo de relação entre o símbolo da ação e a bolsa em que é negociado, já que alguns são negociados em várias bolsas, ou talvez eu só queira ver coisas na TSX ou algo assim .

John
fonte
9
OU se json é mais o seu lugar: json
Andrew Luhring
1
Agradável. YQL bruto: select * from yahoo.finance.industry where id in (select industry.id from yahoo.finance.sectors)
David Gilbertson,
1
Acredito que os dados retornados pela consulta acima vêm de links acessíveis a partir deste URL biz.yahoo.com/ic/ind_index.html (esses URLs adicionais também podem ser úteis: biz.yahoo.com/p/s_conameu.html , biz .yahoo.com / p / sum_conameu.html )
richardr
13
Isso parece não estar mais funcionando :(
André Pena
1
Acho que a tabela "yahoo.finance.sectors" foi removida. Mas ainda há uma fonte para os dados - apenas uma página da web. (Na verdade, se você 'selecionar * from yahoo.finance.sectors' no console YQL em developer.yahoo.com/yql/console , incorporado no retorno está o link para a página da web - biz.yahoo.com/ic /ind_index.html. ) Então, o que você precisa fazer é escrever algum código para obter essa página e, em seguida, analisar os dados dela. Ele fornecerá a lista de setores, as indústrias nesses setores e a ID da indústria (e você pode fazer uma ID de setor com o primeiro dígito da ID da indústria).
Steve Greene
24

NASDAQ Stock lists ftp://ftp.nasdaqtrader.com/symboldirectory

Os 2 arquivos nasdaqlisted.txt e otherlisted.txt são | tubo separado. Isso deve lhe dar uma boa lista de todas as ações.

tr4nc3
fonte
para preguiçosos como eu: ftp.nasdaqtrader.com/SymbolDirectory ftp.nasdaqtrader.com/SymbolDirectory/nasdaqlisted.txt ftp.nasdaqtrader.com/SymbolDirectory/otherlisted.txt
1mike12
nasdaqtraded.txt é o que você precisa, são as duas listas combinadas.
thistleknot
14

Posso ajudar com uma lista de símbolos para ações (dos Estados Unidos e não dos Estados Unidos) e para ETFs.

O Yahoo fornece um Calendário de ganhos que lista todas as ações que anunciam os ganhos de um determinado dia. Isso inclui ações fora dos EUA.

Por exemplo, aqui está hoje: http://biz.yahoo.com/research/earncal/20120710.html

a última parte do URL é a data (no formato AAAAMMDD) para a qual você deseja o Calendário de ganhos. Você pode fazer um loop por vários dias e raspar os símbolos de todas as ações que relataram ganhos nesses dias.

Não há garantia de que o Yahoo tenha dados para todas as ações que relatam lucros, especialmente porque algumas ações não existem mais (falência, aquisição, etc.), mas este é provavelmente um ponto de partida decente.

Se você estiver familiarizado com o R, pode usar o pacote qmao para fazer isso. (Veja esta postagem ) se você tiver problemas para instalá-lo.

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"   

Isso não inclui quaisquer ETFs, futuros, opções, títulos, forex ou fundos mútuos.

Você pode obter uma lista de ETFs do yahoo aqui: http://finance.yahoo.com/etf/browser/mkt Isso mostra apenas os primeiros 20. Você precisa do URL do link "Mostrar todos" na parte inferior da página . Você pode raspar a página para descobrir quantos ETFs existem e, em seguida, construir um 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

Agora, você pode extrair os Tickers da tabela dessa 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"

Essa é toda a ajuda que posso oferecer, mas você poderia fazer algo semelhante para obter alguns dos futuros que eles oferecem rascunhando estas páginas (esses são apenas os futuros dos EUA)

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 ,

E, para índices dos EUA e de outros países, você pode raspar essas 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

GSee
fonte
2
Como você escreveu, posso não obter todos os tickers dessa forma e, para meu projeto, é tudo (lista completa) ou não importa. Mas muito obrigado pela resposta completa, GSee. Agradeço! Tenha um ótimo dia :-)
rassom
8

Venho pesquisando isso há alguns dias, seguindo pistas intermináveis ​​que chegaram perto, mas não exatamente, do que eu procurava.

Minha necessidade é de uma lista simples de 'símbolo, setor, indústria'. Estou trabalhando em Java e não quero usar nenhum código nativo da plataforma.

Parece que muitos outros dados, como citações, etc., estão prontamente disponíveis.

Finalmente, seguiu uma sugestão de olhar para 'finviz.com'. Parece apenas o bilhete. Tente usar o seguinte:

http://finviz.com/export.ashx?v=111&t=aapl,cat&o=ticker Isso volta como linhas, estilo csv, com uma linha de cabeçalho, ordenada pelo símbolo de ação. Você pode continuar adicionando tickers. No código, você pode ler o fluxo. Ou você pode permitir que o navegador pergunte se deseja abrir ou salvar o arquivo.

http://finviz.com/export.ashx?v=111&&o=ticker Mesmo estilo csv, mas extrai todos os símbolos disponíveis (muito, em trocas globais)

Substitua 'export' por 'screener' e os dados aparecerão no navegador.

Existem muitas outras opções que você pode usar, uma para cada elemento do screener no site.

Até agora, esta é a maneira programática mais poderosa e conveniente de obter os poucos dados que, de outra forma, eu não conseguiria obter facilmente. E, parece que este site pode ser uma fonte única para a maior parte do que você pode precisar, além de cotações em tempo real ou quase em tempo real.

Higgs
fonte
4
Cada url que carrego é redirecionado para finviz.com/elite.ashx
PUG
Tive que me inscrever no serviço de comerciante Elite, mas valeu a pena. Obrigado.
vlmercado
7

A lista completa de símbolos / tickers / ações do Yahoo está disponível para download (formato Excel) no site abaixo. http://www.myinvestorshub.com/yahoo_stock_list.php

Lista atualizada até janeiro de 2016: http://investexcel.net/all-yahoo-finance-stock-tickers/

Pravin
fonte
3
Quão atualizada está esta lista?
Jeroen
1
Esta lista parece estar incompleta, por exemplo, GOOG não está nela.
user592419
Esta lista corta em 3000 símbolos. Está em ordem alfabética então para os EUA que acaba ficando na FDEF. Outros mercados com menos de 3.000 símbolos parecem se sair melhor, como Hong Kong. Dito isso, não tenho ideia de quão completo / atualizado é.
fantabolous
2
Parece incompleto e sem manutenção.
Jens A. Koch
O link não funciona mais
toshiro92
1

Uma solução alternativa que tive para isso era iterar os setores (o que na época você poderia fazer ... Não testei isso recentemente).

No entanto, você acaba sendo bloqueado ao fazer isso dessa forma, já que o YQL fica estrangulado por dia.

Use a API CSV sempre que possível para evitar isso.

RobotHumans
fonte
1

Eu tive o mesmo problema, mas acho que tenho uma solução simples (o código é do meu aplicativo RoR): Extraia ids da indústria de yahoo.finance.sectors e adicione-os ao banco de dados:

    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

Extraia todos os comanies com seus símbolos com ids da indústria:

    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

Hellper de conexão:

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

Desculpe pela bagunça, mas esta é a primeira versão de teste para meu projeto e eu precisava muito rápido. Existem algumas variáveis ​​de helpers e outras coisas para meu aplicativo, desculpe por isso. Mas eu tenho uma pergunta: você tem muitos símbolos? Eu tenho 5500.

quatermain
fonte
5500 provavelmente seriam apenas símbolos de ações dos EUA (o Yahoo Finance cobre muito mais - em todo o mundo - como você pode ver na resposta aceita, ele obteve cerca de 75.000 símbolos! :) ... Ainda não converteu a resposta aceita .NET way para Ruby ainda (Também estou usando RoR), então se você fizer funcionar, ou seja, encontrar mais símbolos, por favor, me avise. Obrigado! :-)
rassom