我已经无尽地在谷歌上搜索了一种方法,可以获得通过http://finance.yahoo.com提供的所有雅虎股票代码的完整(并每日更新)清单。
雅虎为全球许多交易所提供股票、期货等信息,我想要一个包含它们所有可用的股票代码的合并列表。我尝试使用YQL,但他们有一个“where symbol =(或 in)”子句限制,因此我无法从symbols选择*。
所以基本上,获取单个符号或多个符号的详细信息很容易,但我似乎找不到如何获取所有可用股票代码的清单。
请问有人能帮忙吗?
我已经无尽地在谷歌上搜索了一种方法,可以获得通过http://finance.yahoo.com提供的所有雅虎股票代码的完整(并每日更新)清单。
雅虎为全球许多交易所提供股票、期货等信息,我想要一个包含它们所有可用的股票代码的合并列表。我尝试使用YQL,但他们有一个“where symbol =(或 in)”子句限制,因此我无法从symbols选择*。
所以基本上,获取单个符号或多个符号的详细信息很容易,但我似乎找不到如何获取所有可用股票代码的清单。
请问有人能帮忙吗?
我遇到了类似的问题。雅虎并不提供此服务,但你可以通过查看nyse.com列表上的document.write语句,并找到存储以给定字母开头的公司列表的.js文件,作为js数组文字来获取一个。你也可以从nasdaq.com这里获得整洁的csv文件: http://www.nasdaq.com/screening/companies-by-name.aspx?letter=0&exchange=nasdaq&render=download (将 exchange=nasdaq 替换为 exchange=nyse 可以获取 NYSE 符号)。
我成功地通过使用以下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
它使用Yahoo YQL API下载了完整的股票代码列表,包括股票名称、股票代码和行业ID。然而,它似乎没有任何股票代码修饰符。例如,对于Rogers Communications Inc,它只下载RCI,而不是RCI-A.TO、RCI-B.TO等。我还没有找到该信息的来源-如果有人知道自动下载该信息的方法,请告诉我。此外,找到一种下载股票代码与其交易所之间某种关系的方法也很好,因为有些股票在多个交易所交易,或者可能我只想查看在TSX上交易的东西。
NASDAQ股票列表ftp://ftp.nasdaqtrader.com/symboldirectory
nasdaqlisted.txt和otherlisted.txt文件是用竖线分隔的。 这应该可以给你一个包含所有股票的好列表。
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);
}
}
}
它给了我大约75000个证券清单,只用了大约4分钟。
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"
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
可以在以下网站下载(Excel格式)雅虎股票代码/标记符号的完整清单:http://www.myinvestorshub.com/yahoo_stock_list.php
截至2016年1月,清单已更新:http://investexcel.net/all-yahoo-finance-stock-tickers/
我已经研究了几天,跟随了无数线索,但都没有得到我需要的。
我需要一个简单的“符号、行业、产业”列表。我在使用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',数据将显示在浏览器中。 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
提取所有带有其符号和行业ID的公司:
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个。
我曾经采用的一种解决方法是遍历扇区(当时可以这样做...但最近我没有测试过)。
然而,如果您采用这种方式,最终会被阻止,因为每天 YQL 会被限制。
尽可能使用 CSV API 以避免此问题。