Comment obtenir une liste complète des symboles mnémoniques de Yahoo Finance? [fermé]
j'ai cherché sur Google sans cesse une méthode pour obtenir une liste complète (et mise à jour quotidiennement) de tous les symboles Yahoo ticker disponibles sur http://finance.yahoo.com
Yahoo a des informations pour les actions, les contrats à terme, etc. pour beaucoup de bourses dans le monde, et je voudrais une liste combinée de tous les symboles de téléscripteur disponibles à travers eux. J'ai essayé YQL mais ils ont une restriction de clause "where symbol = (or in)" donc je ne peux pas sélectionner * à partir des symboles.
donc fondamentalement, obtenir des informations détaillées pour un seul symbole ou plusieurs symboles à la fois est facile, mais je ne peux pas sembler trouver comment obtenir une liste de tous les tickers disponibles.
est-ce que quelqu'un peut aider, s'il vous plaît?
9 réponses
il y a un joli papier D'emballage pour le Yahoo.Les finances de l'API à http://code.google.com/p/yahoo-finance-managed/ que vous y arrivez. Malheureusement, il n'y a pas de moyen direct de télécharger la liste des téléscripteurs, mais ce qui suit crée la liste en itérant à travers les groupes alphabétiques:
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);
}
}
}
il m'a donné une liste d'environ 75.000 titres en 4 minutes.
j'ai réussi à faire quelque chose de similaire en utilisant cette 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
il télécharge une liste complète de symboles de stock En utilisant L'API Yahoo YQL, y compris le nom de stock, stock symbole, et numéro d'identification de l'industrie. Ce qu'il ne semble pas avoir toute sorte de symbole de modificateurs. Par exemple: pour Rogers Communications Inc, Il ne télécharge que RCI, et non RCI-A. TO, RCI-B. TO, etc. Je n'ai pas trouvé une source pour cette information mais si quelqu'un connaît un moyen d'automatiser le téléchargement, j'aimerais l'entendre. Aussi, il serait bien de trouver un moyen de télécharger une sorte de relation entre le symbole et l'échange c'est négocié sur, car certaines sont cotées sur plusieurs bourses, ou peut-être j' je veux voir des trucs sur la TSX ou quelque chose comme ça.
j'ai eu un problème similaire. yahoo ne l'offre pas, mais vous pouvez en obtenir un en regardant à travers le document.instructions d'écriture sur nyse.com la liste et trouver la .js fichier où ils se trouvent juste pour stocker la liste des entreprises commençant par la lettre donnée comme un tableau js littéral. vous pouvez également obtenir des fichiers csv bien rangés à partir de nasdaq.com ici.: http://www.nasdaq.com/screening/companies-by-name.aspx?letter=0&exchange=nasdaq&render=download (remplacer exchange=nasdaq par échange=NYSE pour les symboles nyse).
NASDAQ Stock lists ftp://ftp.nasdaqtrader.com/symboldirectory
les 2 fichiers nasdaqlisted.txt et otherlisted.txt sont | tuyaux séparés. Ça devrait vous donner une bonne liste de toutes les actions.
je peux peut-être vous aider avec une liste de symboles de téléscripteur pour les actions (américaines et non américaines) et pour les ETFs.
Yahoo fournit un calendrier des gains qui liste Toutes les actions qui annoncent le bénéfice pour un jour donné. Cela comprend les actions non américaines.
par exemple, voici celui d'aujourd'hui: http://biz.yahoo.com/research/earncal/20120710.html
la dernière partie de L'URL est la date (au format AAAAMMJJ) pour qui vous voulez l' Calendrier Des Gains. Vous pouvez faire une boucle à travers plusieurs jours et gratter les symboles de toutes les actions qui ont déclaré des gains à ces jours.
il n'y a aucune garantie que yahoo dispose de données pour toutes les actions qui déclarent des gains, surtout depuis que certains stocks n'existent plus (faillite, acquisition, etc.), mais c'est probablement un bon point de départ.
si vous connaissez R
, vous pouvez utiliser le
paquet qmao pour faire ça.
(Voir ce post )
si vous avez des difficultés à installer.
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"
ne sont pas visés les Fonds de roulement, Les contrats à terme, les options, les obligations, les devises et les fonds communs de placement.
vous pouvez obtenir une liste des ETFs de yahoo ici: http://finance.yahoo.com/etf/browser/mkt Ça montre seulement les 20 premiers. Vous avez besoin de L'URL du lien "Afficher tout" en bas de la page. Vous pouvez gratter la page pour découvrez comment de nombreux ETFs there are, then build a 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
maintenant, vous pouvez extraire les titres du tableau sur cette page
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"
c'est à peu près toute l'aide que je peux offrir, mais vous pourriez faire quelque chose de similaire à obtenez certains des contrats à terme qu'ils offrent en raclant ces pages (Ces contrats ne sont que des contrats à terme américains)
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 ,
et, pour les indices américains et non américains, vous pouvez gratter ces pages
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
j'ai fait des recherches sur ce sujet pendant quelques jours, en suivant des pistes sans fin qui se sont rapprochées, mais pas tout à fait, de ce que je cherchais.
il me faut une simple liste de "symbole, secteur, Industrie". Je travaille en Java et je ne veux pas utiliser de code natif de la plateforme.
il semble que la plupart des autres données, comme les citations, etc. est facilement disponible.
enfin, a suivi une suggestion à examiner "finviz.com". On dirait que juste le billet. Essayez d'utiliser ce qui suit:
http://finviz.com/export.ashx?v=111&t=aapl,cat&o =ticker Cela revient comme les lignes, le style csv, avec une ligne d'en-tête, ordonnée par le symbole de palpeur. Vous pouvez continuer à ajouter des téléscripteurs. En code, vous pouvez lire le flux. Ou vous pouvez laisser le navigateur vous demande si vous souhaitez ouvrir ou enregistrer le fichier.
http://finviz.com/export.ashx?v=111&&o=ticker Même style csv, mais tire tout disponible symboles un peu (beaucoup, à travers les échanges mondiaux)
remplacer "exporter" par "screener" et les données apparaîtront dans le navigateur.
Il ya beaucoup plus d'options que vous pouvez utiliser, un pour chaque élément de screener sur le site.
jusqu'à présent, c'est le moyen programmatique le plus puissant et le plus pratique pour obtenir les quelques données que je n'aurais pas pu obtenir autrement. Et, il semble que ce site pourrait bien être une source unique pour la plupart de ce que vous peut - être besoin d'autres que des citations en temps réel ou quasi-réel.
la liste complète des symboles/titres yahoo est disponible pour téléchargement (format excel) sur le site ci-dessous. http://www.myinvestorshub.com/yahoo_stock_list.php
liste mise à jour en janvier 2016: http://investexcel.net/all-yahoo-finance-stock-tickers/
une solution de rechange que j'avais pour cela était d'itérer sur les secteurs(ce que vous pouviez faire à l'époque...Je n'ai pas testé récemment).
vous finissez par être bloqué quand vous le faites de cette façon, puisque YQL est étranglé par jour.
utilisez L'API CSV chaque fois que possible pour éviter cela.
j'ai eu le MÊME PROBLÈME, MAIS je pense que j'ai une solution simple(le code est de mon application RoR)): Extraire des cartes d'identité de l'industrie de yahoo.Finance.secteurs et l'ajouter au PB:
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
extraire tous les comanies avec leurs symboles avec l'ids de l'industrie:
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
Connexion 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
désolé pour mess, mais c'est la première version de test pour mon projet et j'en ai eu besoin très rapidement. Il y a quelques aides variabels et d'autres choses pour mon application, désolé pour elle. Mais j'ai une question: Avez beaucoup de symboles que vous avez? J'ai 5500.