J'ai recherché sur Google sans fin une méthode permettant d'obtenir une liste complète (et mise à jour quotidiennement) de tous les symboles boursiers Yahoo disponibles via http://finance.yahoo.com
Yahoo a des informations sur les actions, les contrats à terme, etc. pour de nombreux échanges dans le monde entier, et j'aimerais une liste combinée de tous les symboles boursiers disponibles par leur intermédiaire. J'ai essayé YQL mais ils ont une restriction de clause "where symbol = (ou in)", donc je ne peux pas sélectionner * parmi les symboles.
Donc, en gros, obtenir des informations détaillées sur un ou plusieurs symboles à la fois est facile, mais je n'arrive pas à trouver comment obtenir une liste de tous les tickers disponibles.
Quelqu'un peut-il aider s'il vous plaît?
Il existe un wrapper Nice C # pour l’API Yahoo.Finance à l’adresse http://code.google.com/p/yahoo-finance-managed/ qui vous y conduira. Malheureusement, il n’existe aucun moyen direct de télécharger la liste des téléspectateurs, mais la liste suivante le crée en parcourant 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 environ 4 minutes.
j'avais un problème similaire. yahoo ne l’offre pas, mais vous pouvez en obtenir un en consultant les instructions document.write figurant sur la liste de nyse.com et en recherchant le fichier .js où elles se trouvent juste pour stocker la liste des entreprises commençant par la lettre donnée sous forme de tableau js littéral. vous pouvez également obtenir de beaux fichiers csv rangés auprès de nasdaq.com ici: http://www.nasdaq.com/screening/companies-by-name.aspx?letter=0&exchange=nasdaq&render=download (remplacer exchange = nasdaq avec exchange = nyse pour les symboles nyse).
J'ai réussi à faire quelque chose de similaire en utilisant cette URL:
http://query.yahooapis.com/v1/public/yql?q=select%2 *% 20de% 20yahoo.finance.industry% 20where% 20id% 20in% 20 (sélectionnez% 20industry. id% 20de% 20yahoo.finance.sectors) & env = magasin% 3A% 2F% 2Fdatatables.org% 2Falltableswithkeys
Il télécharge une liste complète des symboles boursiers à l'aide de l'API Yahoo YQL, y compris le nom, le symbole boursier et l'ID de secteur. Ce qu'il ne semble pas avoir, ce sont des modificateurs de symboles boursiers. Par exemple. pour Rogers Communications Inc, il ne télécharge que RCI, pas RCI-A.TO, RCI-B.TO, etc. Je n'ai pas encore trouvé de source pour cette information - si quelqu'un connaît un moyen d'automatiser le téléchargement, je J'aimerai l'entendre. En outre, il serait bien de trouver un moyen de télécharger une sorte de relation entre le symbole boursier et la bourse sur laquelle elle est négociée, car certaines sont négociées sur plusieurs bourses, ou peut-être que je veux seulement regarder des choses à la TSX ou quelque chose de ce genre. .
Listes d'actions NASDAQ ftp://ftp.nasdaqtrader.com/symboldirectory
Les 2 fichiers nasdaqlisted.txt et otherlisted.txt sont | tuyau séparé. Cela devrait vous donner une bonne liste de tous les stocks.
Je peux peut-être vous aider avec une liste de symboles boursiers pour les actions (américaines et non américaines) et pour les FNB.
Yahoo fournit un calendrier des résultats qui répertorie toutes les actions qui annoncent les résultats pour un jour donné. Cela inclut les actions non américaines.
Par exemple, voici le texte 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 laquelle vous souhaitez utiliser le calendrier des résultats. Vous pouvez parcourir plusieurs jours en boucle et effacer les symboles de tous les stocks ayant déclaré des gains ces jours-là.
Rien ne garantit que Yahoo possède des données pour tous les titres déclarant des bénéfices, d’autant plus que certains titres n’existent plus (faillite, acquisition, etc.), mais il s’agit probablement d’un bon point de départ.
Si vous connaissez R
, vous pouvez utiliser le package qmao pour le faire. (Voir this post ) si vous avez du mal à l'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"
Cela n'inclut pas les ETF, les contrats à terme standardisés, les options, les obligations, les devises ou les fonds communs de placement.
Vous pouvez obtenir une liste des ETF de Yahoo ici: http://finance.yahoo.com/etf/browser/mkt Cela ne montre que les 20 premiers. Vous avez besoin de l'URL du "Tout afficher" lien au bas de cette page. Vous pouvez parcourir la page pour connaître le nombre de FNB, puis créer une 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 tickers de la table 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 pouvez faire quelque chose de similaire pour obtenir certains des contrats à terme qu’ils offrent en grattant ces pages (il s’agit uniquement de contrats à terme américains).
http://finance.yahoo.com/indices?f=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 index 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?f=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 = autre , http://finance.yahoo.com/indices?e=treasury , http://finance.yahoo.com/indices?e=commodities
Je fais des recherches à ce sujet depuis quelques jours, après des pistes sans fin qui se sont rapprochées, mais pas tout à fait, de ce que je cherchais.
Mon besoin est une simple liste de "symbole, secteur, industrie". Je travaille dans Java et ne souhaite utiliser aucun code natif de la plate-forme.
Il semble que la plupart des autres données, telles que les citations, etc., sont facilement disponibles.
Enfin, a suivi une suggestion de regarder 'finviz.com'. On dirait juste le billet. Essayez d'utiliser ce qui suit:
http://finviz.com/export.ashx?v=111&t=aapl,cat&o=ticker Cela revient sous forme de lignes, style csv, avec une ligne d'en-tête, classées par symbole. Vous pouvez continuer à ajouter des tickers. En code, vous pouvez lire le flux. Ou vous pouvez laisser le navigateur vous demander si vous souhaitez ouvrir ou sauvegarder le fichier.
http://finviz.com/export.ashx?v=111&&o=ticker Même style csv, mais affiche tous les symboles disponibles (beaucoup, sur les échanges mondiaux)
Remplacez 'export' par 'screener' et les données s'afficheront dans le navigateur.
Vous pouvez utiliser de nombreuses autres options, une pour chaque élément de sélection sur le site.
Jusqu'à présent, il s'agit du moyen de programmation 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 des choses dont vous pourriez avoir besoin, autres que des citations en temps réel ou quasi réel.
La liste complète des symboles/tickers/stocks yahoo est disponible au téléchargement (format Excel) sur le site Web ci-dessous. http://www.myinvestorshub.com/yahoo_stock_list.php
Liste mise à jour en janvier 2016: http://investexcel.net/all-yahoo-finance-stock-tickers/
J'ai eu le même problème, mais je pense avoir une solution simple (le code provient de mon application RoR): Extrayez les identifiants d'industrie de yahoo.finance.sectors et ajoutez-les à la base de données:
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
Extrayez toutes les entreprises avec leurs symboles avec les identifiants 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 enfer:
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 le désordre, mais c'est la première version de test pour mon projet et j'en avais besoin très vite. Il existe des variabels d’aides et d’autres choses pour mon application, désolé pour cela. Mais j'ai une question: avez-vous beaucoup de symboles? J'ai 5500.
Une solution de contournement que j’avais pour cela consistait à parcourir les secteurs (ce que vous pouviez faire à ce moment-là ... je n’ai pas testé cela récemment).
Vous finissez par être bloqué lorsque vous le faites de cette façon, car YQL est étranglé chaque jour.
Utilisez l’API CSV autant que possible pour éviter cela.