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

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

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

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

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

Комментарии к вопросу (6)

У меня была похожая проблема. yahoo не предлагает ее, но вы можете получить ее, просмотрев document.write statements на nyse.com's list и найдя .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)

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

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

Комментарии (7)

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

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

Комментарии (1)

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

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

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

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

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

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


ec 
Комментарии (1)
Решение

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

        AlphabeticIDIndexDownload dl1 = new AlphabeticIDIndexDownload();
        dl1.Settings.TopIndex = null;
        Response 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 resp2 = dl1.Download();

            foreach (var index in resp2.Result.Items)
            {
                IDSearchDownload dl2 = new IDSearchDownload();
                Response 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 минуты.

Комментарии (5)

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

Мне нужен простой список "символ, сектор, отрасль". Я работаю на 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, но извлекает все доступные символы (много, по всем мировым биржам).

Замените 'export' на 'screener', и данные появятся в браузере.

Есть еще много вариантов, которые вы можете использовать, по одному для каждого элемента скринера на сайте.

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

Комментарии (2)

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

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

Комментарии (5)

У меня была такая же проблема, но я думаю, что есть простое решение(код из моего приложения Рор): Экстракт идентификаторы промышленности от Yahoo.финансы.секторов и добавить его в БД:

    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

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

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

Комментарии (1)

Одним из вариантов решения этой проблемы был итерационный перебор секторов (что в то время можно было делать... в последнее время я это не проверял).

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

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

Комментарии (0)