Как получить полный список символов тикера от Yahoo Finance? [закрыто]

100

Я бесконечно искал в Google способ получения полного (и ежедневно обновляемого) списка всех символов тикеров Yahoo, доступного на http://finance.yahoo.com

Yahoo имеет информацию по акциям, фьючерсам и т. Д. Для многих бирж по всему миру, и мне нужен объединенный список всех тикеров, доступных через них. Я пробовал YQL, но у них есть ограничение предложения «where symbol = (or in)», поэтому я не могу выбрать * из символов.

В общем, получить подробную информацию по одному символу или нескольким символам за один раз легко, но я просто не могу понять, как получить список всех доступных тикеров.

Кто-нибудь может помочь, пожалуйста?

Rssom
источник
9
Получили ли вы радость? Я нашел это: eoddata.com/symbols.aspx
Codek,
Спасибо, Codek :-) Нет, я не нашел, и задача заключалась в том, чтобы найти список символов Yahoos, а не кого-либо еще, поэтому, к сожалению, не могу использовать Eoddatas.
Еще
2
хорошо, без проблем. Мне нужны были только символы LSE, поэтому вышеизложенное помогло мне - я считаю, что символы внутри биржи согласованы, например, для yahoo / lse / google financial и т. Д. - за исключением yahoo, у него есть .L на конце, а в Google - LON. Просто смешно, как охотно доступны все ценовые данные, но не список символов, который я просто не понимаю!
Codek
Теперь вы можете использовать метаданные из quandl, содержащие 98 тыс. Символов. Обратите внимание, что вам нужно декодировать символ quandl обратно в исходный символ yahoo. INDEX_ получает ^ и _ получает. quandl.com/data/YAHOO/metadata
KIC
3
Программа на Python, которая может сделать это за вас: github.com/Benny-/Yahoo-ticker-symbol-downloader
André Pena

Ответы:

13

По адресу http://code.google.com/p/yahoo-finance-managed/ есть хорошая оболочка C # для Yahoo.Finance API, которая поможет вам в этом. К сожалению, нет прямого способа загрузить список тикеров, но следующее создает список путем итерации по алфавитным группам:

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

            }
        }

Он дал мне список из 75 000 ценных бумаг примерно за 4 минуты.

jm1102
источник
24
Не могли бы вы запустить этот код и поместить копию вывода в pastebin для тех из нас, кто не использует C #?
Jeroen
1
Похоже, что алфавитный результат неполный. Многие символы пропущены.
лян
Я попытался запустить этот код, но, к сожалению, он не дал результатов. Любые идеи?
lionheart 02
3
Я не думаю, что это больше работает. Упомянутый API-оболочка отправляет запрос на biz.yahoo.com/i, который, похоже, изменился (перенаправляет на financial.yahoo.com/q) и больше не содержит таблицу, предлагаемую XPath.
richardr
45

У меня была похожая проблема. yahoo не предлагает его, но вы можете получить его, просмотрев инструкции document.write в списке nyse.com и найдя файл .js, в котором они просто хранят список компаний, начинающихся с данной буквы, в виде массива js буквальный. вы также можете получить красивые аккуратные файлы csv с сайта nasdaq.com здесь: http://www.nasdaq.com/screening/companies-by-name.aspx?letter=0&exchange=nasdaq&render=download (замените exchange = nasdaq на exchange = nyse для символов NYSE).

Ян Оои
источник
2
Спасибо, Ян. Однако мне нужен список для Yahoo, поскольку у них есть тикеры за пределами США, поэтому Nasdaq, к сожалению, недостаточно.
rassom
5
Отлично, спасибо. Вы также можете заменить биржу на «все», чтобы получить тикеры для всех трех индексов.
Дарин Петерсон,
ссылка ведет на сайт с таким списком, но я не вижу возможности скачать csv
hipoglucido
45

Мне удалось сделать что-то подобное, используя этот URL:

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

Он загружает полный список символов акций с помощью Yahoo YQL API, включая название акции, символ акции и идентификатор отрасли. Похоже, что в нем нет никаких модификаторов биржевых символов. Например, для Rogers Communications Inc он загружает только RCI, а не RCI-A.TO, RCI-B.TO и т. Д. Я еще не нашел источника этой информации - если кто-то знает способ автоматизировать загрузку, я Я бы хотел это услышать. Кроме того, было бы неплохо найти способ загрузить какую-то связь между символом акции и биржей, на которой она торгуется, так как некоторые из них торгуются на нескольких биржах, или, может быть, я хочу только посмотреть на вещи на TSX или что-то в этом роде. .

Джон
источник
9
ИЛИ если вам больше нравится json
Эндрю Люринг,
1
Хороший. Необработанный YQL: выберите * из yahoo.finance.industry, где id (выберите industry.id из yahoo.finance.sectors)
Дэвид Гилбертсон
1
Я считаю, что данные, возвращаемые вышеуказанным запросом, в конечном итоге поступают из ссылок, доступных с этого URL-адреса biz.yahoo.com/ic/ind_index.html (эти дополнительные URL-адреса также могут быть полезны: biz.yahoo.com/p/s_conameu.html , biz .yahoo.com / p / sum_conameu.html )
richardr
13
Похоже, это больше не работает :(
Андре Пена
1
Я думаю, что таблица yahoo.finance.sectors была удалена. Но все же есть источник данных - только веб-страница. (Действительно, если вы сделаете «select * from yahoo.finance.sectors» в консоли YQL на сайте developer.yahoo.com/yql/console , в ответ будет встроена ссылка на веб-страницу - biz.yahoo.com/ic /ind_index.html. ) Итак, что вам нужно сделать, это написать код, чтобы получить эту страницу, а затем проанализировать из нее данные. Он предоставит вам список секторов, отрасли в этих секторах и идентификатор отрасли (и вы можете сделать идентификатор сектора из первой цифры идентификатора отрасли).
Стив Грин,
24

Список акций NASDAQ ftp://ftp.nasdaqtrader.com/symboldirectory

Два файла nasdaqlisted.txt и otherlisted.txt: | труба отделена. Это должно дать вам хороший список всех акций.

tr4nc3
источник
для ленивых вроде меня: ftp.nasdaqtrader.com/SymbolDirectory ftp.nasdaqtrader.com/SymbolDirectory/nasdaqlisted.txt ftp.nasdaqtrader.com/SymbolDirectory/otherlisted.txt
1mike12 04
nasdaqtraded.txt - это то, что вам нужно, это оба этих списка вместе.
thistleknot,
14

Возможно, я смогу помочь со списком тикеров для (американских и неамериканских) акций и для ETF.

Yahoo предоставляет Календарь доходов, в котором перечислены все акции, объявляющие прибыль за определенный день. Это включает в себя неамериканские акции.

Например, вот сегодняшний: http://biz.yahoo.com/research/earncal/20120710.html

последняя часть URL-адреса - это дата (в формате ГГГГММДД), для которой вы хотите создать Календарь доходов. Вы можете прокрутить несколько дней и очистить символы всех акций, которые сообщили о прибыли в эти дни.

Нет никакой гарантии, что у yahoo есть данные по всем акциям, которые сообщают о прибыли, тем более что некоторые акции больше не существуют (банкротство, поглощение и т. Д.), Но это, вероятно, достойная отправная точка.

Если вы знакомы с этим R, вы можете использовать пакет qmao для этого. (См. Этот пост ), если у вас возникли проблемы с его установкой.

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"   

Это не будет включать какие-либо ETF, фьючерсы, опционы, облигации, валюту или паевые инвестиционные фонды.

Вы можете получить список ETF на Yahoo здесь: http://finance.yahoo.com/etf/browser/mkt Это показывает только первые 20. Вам нужен URL-адрес ссылки «Показать все» внизу этой страницы. . Вы можете очистить страницу, чтобы узнать, сколько существует ETF, а затем создать 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

Теперь вы можете извлечь тикеры из таблицы на этой странице.

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"

Это почти вся помощь, которую я могу предложить, но вы можете сделать что-то подобное, чтобы получить некоторые из предлагаемых ими фьючерсов, очистив эти страницы (это только фьючерсы США).

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 ,

А для индексов США и других стран вы можете очистить эти страницы

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
источник
2
Как вы писали, я могу получить не все тикеры таким образом, и для моего проекта это либо все (полный список), либо не имеет значения. Но большое спасибо за обстоятельный ответ, GSee. Ценить это!
Удачного
8

Я исследовал это в течение нескольких дней, следуя бесконечным зацепкам, которые приблизились, но не совсем к тому, что мне было нужно.

Мне нужен простой список «символ, сектор, отрасль». Я работаю на Java и не хочу использовать собственный код платформы.

Кажется, что большинство других данных, таких как цитаты и т. Д., Легко доступны.

Наконец последовало предложение заглянуть на «finviz.com». Похоже, просто билет. Попробуйте использовать следующее:

http://finviz.com/export.ashx?v=111&t=aapl,cat&o=ticker Это возвращается в виде строк в стиле csv со строкой заголовка, упорядоченной по тикеру. Вы можете продолжать добавлять тикеры. В коде вы можете прочитать поток. Или вы можете позволить браузеру спросить вас, открыть или сохранить файл.

http://finviz.com/export.ashx?v=111&&o=ticker Тот же стиль csv, но извлекает все доступные символы (много, на глобальных биржах)

Замените «экспорт» на «скринер», и данные отобразятся в браузере.

Вы можете использовать гораздо больше опций, по одной для каждого элемента скрининга на сайте.

На данный момент это наиболее мощный и удобный программный способ получить несколько фрагментов данных, которые иначе я бы не смог получить легко. И похоже, что этот сайт может быть единственным источником большей части того, что вам может понадобиться, кроме котировок в реальном или почти реальном времени.

Хиггс
источник
4
Каждая загрузка URL я перенаправляется finviz.com/elite.ashx
Мопс
Пришлось подписаться на сервис Elite trader, но оно того стоит. Спасибо.
vlmercado
7

Полный список символов / тикеров / акций Yahoo доступен для загрузки (в формате Excel) на веб-сайте ниже. http://www.myinvestorshub.com/yahoo_stock_list.php

Список обновлен до января 2016 г .: http://investexcel.net/all-yahoo-finance-stock-tickers/

Правин
источник
3
Насколько актуален этот список?
Jeroen
1
Этот список кажется неполным, например, в нем нет GOOG.
user592419
Этот список ограничен 3000 символами. Это в алфавитном порядке, так что для США это оказывается в FDEF. На других рынках с менее чем 3000 символов дела обстоят лучше, например, в Гонконге. Тем не менее, я понятия не имею, насколько он полон / актуален.
fantabolous
2
Кажется неполным и неподдерживаемым.
Йенс А. Кох
Ссылка больше не работает
toshiro92
1

У меня был один обходной путь - перебирать секторы (что в то время вы могли сделать ... Я не тестировал это в последнее время).

Однако, когда вы делаете это таким образом, в конечном итоге вы будете заблокированы, поскольку YQL ежедневно дросселируется.

По возможности используйте CSV API, чтобы этого избежать.

РоботЧеловек
источник
1

У меня была такая же проблема, но я думаю, что у меня есть простое решение (код из моего приложения RoR): извлеките идентификаторы отрасли из yahoo.finance.sectors и добавьте их в 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

Извлеките все компании с их символами с отраслевыми идентификаторами:

    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

Подключение хеллпер:

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

Извините за беспорядок, но это первая тестовая версия моего проекта, и она мне понадобилась очень быстро. Для моего приложения есть несколько помощников и другие вещи, извините за это. Но у меня вопрос: много ли у вас символов? У меня 5500.

Quatermain
источник
5500, вероятно, будут только символами акций США (Yahoo Finance охватывает гораздо больше - по всему миру - как вы можете видеть в принятом ответе, он получил около 75000 символов! :) ... Еще не преобразовал принятый ответ .NET в Ruby (Я также использую RoR), поэтому, если вы заставите его работать, т.е. найдете больше символов, сообщите мне. Спасибо! :-)
rassom