Как получить полный список символов тикера от Yahoo Finance? [закрытый]
Я бесконечно искал метод получения полного (и ежедневно обновляемого) списка всех символов Yahoo ticker, доступных через http://finance.yahoo.com
Yahoo имеет информацию для акций, фьючерсов и т. д. Для многих бирж по всему миру, и я хотел бы получить объединенный список всех символов тикера, доступных через них. Я пробовал YQL, но у них есть ограничение предложения" where symbol = (или in)", поэтому я не могу выбрать * из символов.
Так в основном, получить подробную информацию для одного символа или нескольких символов за один раз легко, но я просто не могу узнать, как получить список всех доступных тикеров.
кто-нибудь может помочь, пожалуйста?
9 ответов
есть хорошая оболочка C# для Yahoo.Finance API at http://code.google.com/p/yahoo-finance-managed/ это приведет вас туда. К сожалению, нет прямого способа загрузить список тикеров, но следующее создает список, повторяя алфавитные группы:
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 минуты.
мне удалось сделать что-то подобное, используя этот 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
он загружает полный список символов акций с помощью API YQL Yahoo, включая название акций, символ акций и идентификатор отрасли. Что это не кажется have-это любые модификаторы символов акций. Например. для Rogers Communications Inc он загружает только RCI, а не RCI-A. TO, RCI-B. TO и т. д. Я еще не нашел источник для этой информации - если кто-нибудь знает способ автоматизации загрузки, я хотел бы его услышать. Кроме того, было бы неплохо найти способ загрузить какую-то связь между символом акций и биржей, на которой он торгуется, поскольку некоторые из них торгуются на нескольких биржах, или, возможно, я хочу только посмотреть на вещи на TSX или что-то.
У меня была похожая проблема. yahoo не предлагает его, но вы можете получить его, просмотрев документ.написать заявления на 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).
списки акций NASDAQ ftp://ftp.nasdaqtrader.com/symboldirectory
2 файла nasdaqlisted.TXT и otherlisted.txt разделены / труба. Это даст вам хороший список всех акций.
Я могу помочь со списком символов тикера для (американских и неамериканских) акций и для ETFs.
Yahoo предоставляет календарь доходов, в котором перечислены все акции, которые объявляют заработок за данный день. Это включает неамериканские акции.
например, вот сегодняшнее:http://biz.yahoo.com/research/earncal/20120710.html
последняя часть URL-адреса-это дата (в формате YYYYMMDD), для которой вы хотите Календарь Заработков. Вы может петля через несколько дней и выскоблить символы из всех акций, которые сообщали о доходах в те дни.
нет никакой гарантии, что 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"
это не будет включать в себя любые ETFs, фьючерсы, опционы, облигации, Форекс или взаимные фонды.
вы можете получить список ETFs от yahoo здесь:http://finance.yahoo.com/etf/browser/mkt Что показывает только первые 20. Вам нужен URL-адрес ссылки "показать все" на внизу страницы. Вы можете очистить страницу, чтобы узнать, сколько ETFs есть, затем создайте 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"
это все, что я могу предложить, но вы можете сделать что - то похожее на получите некоторые из фьючерсов, которые они предлагают, соскребая эти страницы (Это только США futures)
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,
и, для США и неамериканские индексы, вы могли бы соскрести эти
Я изучал это в течение нескольких дней, следуя бесконечным зацепкам, которые приблизились, но не совсем, к тому, что я искал.
Мне нужен простой список "символ, сектор, промышленность". Я работаю на Java и не хочу использовать какой-либо собственный код платформы.
похоже, что большинство других данных, таких как цитаты, и т. д., легко доступен.
наконец, последовало предложение посмотреть на 'finviz.com". Похоже, только билет. Попробуйте использовать следующий:
http://finviz.com/export.ashx?v=111&t=aapl, cat&o=тикер Это возвращается как строки, стиль csv, с строкой заголовка, упорядоченной символом тикера. Вы можете продолжать добавлять тикеры. В коде вы можете прочитать поток. Или вы можете позволить браузеру спросить вас, открывать или сохранять файл.
http://finviz.com/export.ashx?v=111&&o=ticker Тот же стиль csv, но тянет все доступные символы (много, по всему миру обмены)
замените "экспорт" на "screener", и данные появятся в браузере.
есть еще много вариантов, которые вы можете использовать, по одному для каждого элемента screener на сайте.
до сих пор это самый мощный и удобный программный способ получить несколько фрагментов данных, которые я не мог иначе легко получить. И, похоже, этот сайт вполне может быть единственным источником для большинства из того, что вам может понадобиться, кроме реального или почти реального времени двойные кавычки.
полный список символов/тикеров/акций yahoo доступен для загрузки(формат excel) на веб-сайте ниже. http://www.myinvestorshub.com/yahoo_stock_list.php
список обновлен до января 2016 года: http://investexcel.net/all-yahoo-finance-stock-tickers/
один обходной путь, который у меня был для этого, состоял в итерации по секторам(что в то время вы могли сделать...Я не тестировал это в последнее время).
вы в конечном итоге блокируются, когда вы делаете это таким образом, хотя, так как YQL получает дросселирование в день.
используйте CSV API, когда это возможно, чтобы избежать этого.
у меня была такая же проблема, но я думаю, что у меня есть простое решение(код из моего приложения RoR): Извлечение идентификаторов отрасли из yahoo.финансы.сектора и добавьте его в 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
извлеките все comanies с их символами с идентификаторами отрасли:
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.