web-dev-qa-db-ja.com

Yahoo Financeからティッカーシンボルの完全なリストを取得する方法は?

http://finance.yahoo.com で利用可能なすべてのYahooティッカーシンボルの完全な(および毎日更新される)リストを取得する方法を無限にGoogleで探しました。

ヤフーは世界中の多くの取引所の株式、先物などの情報を持っているので、それらを介して利用可能なすべてのティッカーシンボルの結合リストが欲しいです。 YQLを試しましたが、「where symbol =(またはin)」句の制限があるため、シンボルから*を選択できません。

したがって、基本的には、単一のシンボルまたは複数のシンボルの詳細情報を一度に取得するのは簡単ですが、利用可能なすべてのティッカーのリストを取得する方法を見つけることができないようです。

誰でも助けてくれますか?

92
rassom

http://code.google.com/p/yahoo-finance-managed/ に、Yahoo.Finance API用のNice C#ラッパーがあります。残念ながら、ティッカーリストを直接ダウンロードする方法はありませんが、アルファベット順のグループを繰り返し処理してリストを作成します。

        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);
                }

            }
        }

約4分で約75,000の証券のリストが表示されました。

13
jm1102

同様の問題がありました。 yahooは提供していませんが、nyse.comのリストのdocument.writeステートメントを調べて、js配列として指定された文字で始まる会社のリストを格納する.jsファイルを見つけることで取得できますリテラル。また、nasdaq.comから素敵な整頓されたcsvファイルを入手できます: http://www.nasdaq.com/screening/companies-by-name.aspx?letter=0&exchange=nasdaq&render=download (replace exchange = nasdaqとnyseシンボルのexchange = nyse)。

44
Ian Ooi

次のURLを使用して、なんとか似たようなことができました。

http://query.yahooapis.com/v1/public/yql?q=select%2 *%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-A.TO、RCI-B.TOなどではなく、RCIのみをダウンロードします。その情報のソースはまだ見つかりませんでした。ダウンロードを自動化する方法を知っている人がいれば、 dそれを聞きたいです。また、いくつかは複数の取引所で取引されているため、株式記号と取引されている取引所の間の何らかの関係をダウンロードする方法を見つけることができればいいと思います、またはTSXなどの何かを見たいだけかもしれません。

44
John

NASDAQ株式リスト ftp://ftp.nasdaqtrader.com/symboldirectory

2つのファイルnasdaqlisted.txtおよびotherlisted.txtは次のとおりです。パイプ分離。それはあなたにすべての株の良いリストを与えるはずです。

20
tr4nc3

(米国および米国以外の)株式およびETFのティッカーシンボルのリストを手伝うことができます。

ヤフーは、特定の日の収益を発表するすべての株式をリストする収益カレンダーを提供します。これには米国外の株式が含まれます。

たとえば、今日は次のとおりです。 http://biz.yahoo.com/research/earncal/20120710.html

uRLの最後の部分は、収益カレンダーが必要な日付(YYYYMMDD形式)です。数日間ループして、その日に収益を報告したすべての銘柄のシンボルをスクレイピングできます。

特に一部の株がすでに存在しないため(破産、買収など)、yahooが収益を報告するすべての株のデータを持っているという保証はありませんが、これはおそらく適切な出発点です。

Rに精通している場合は、 qmao package を使用してこれを行うことができます。 (インストールに問題がある場合は この投稿 をご覧ください)。

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"   

これには、ETF、先物、オプション、債券、外国為替または投資信託は含まれません。

YahooからETFのリストを取得できます: http://finance.yahoo.com/etf/browser/mkt 最初の20件のみが表示されます。「すべて表示」のURLが必要ですそのページの下部にあるリンク。ページをスクレイプしてET​​Fの数を確認し、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"

それは私が提供できるすべてのヘルプについてですが、これらのページをスクレイピングすることで、彼らが提供する先物のいくつかを得るために同様のことができます(これらは米国の先物のみです)

http://finance.yahoo.com/indices?e=futureshttp://finance.yahoo.com/futures?t=energyhttp://finance.yahoo.com/futures?t=metalshttp://finance.yahoo.com/futures?t=grainshttp:// Finance.yahoo.com/futures?t=livestockhttp://finance.yahoo.com/futures?t=softshttp://finance.yahoo。 com/futures?t = indices

また、米国および米国以外のインデックスの場合、これらのページをスクレイピングできます

http://finance.yahoo.com/intlindices?e=americashttp://finance.yahoo.com/intlindices?e=asiahttp://finance.yahoo.com/intlindices?e=europehttp://finance.yahoo.com/intlindices?e=africahttp:// Finance.yahoo.com/indices?e=dow_joneshttp://finance.yahoo.com/indices?e=new_yorkhttp://finance.yahoo。 com/indices?e = nasdaqhttp://finance.yahoo.com/indices?e=sphttp://finance.yahoo.com/indices? e = otherhttp://finance.yahoo.com/indices?e=treasuryhttp://finance.yahoo.com/indices?e=commodities

14
GSee

私はこれまで数日間、これまで研究してきましたが、私が望んでいたものに完全ではありませんでしたが、無限のリードに続きました。

私の必要は、「シンボル、セクター、産業」の簡単なリストです。私は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スタイルは同じですが、利用可能なすべてのシンボルをプルします(グローバルエクスチェンジ全体で)

「エクスポート」を「スクリーナー」に置き換えると、データがブラウザーに表示されます。

使用できるオプションは他にもたくさんあります。サイト上のすべてのスクリーナー要素に1つです。

これまでのところ、これは、他の方法では簡単に取得できなかった少数のデータを取得するための、最も強力で便利なプログラムによる方法です。そして、このサイトは、リアルタイムまたはほぼリアルタイムの引用以外に、必要なもののほとんどの単一のソースになる可能性が高いようです。

8
Higgs

Yahooシンボル/ティッカー/ストックの完全なリストは、以下のWebサイトからダウンロードできます(Excel形式)。 http://www.myinvestorshub.com/yahoo_stock_list.php

2016年1月に更新されたリスト: http://investexcel.net/all-yahoo-finance-stock-tickers/

5
Pravin

私は同じ問題を抱えていましたが、簡単な解決策があると思います(コードはRoRアプリからです):yahoo.finance.sectorsから業界IDを抽出し、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

産業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あります。

1
quatermain

私がこれに対して持っていた1つの回避策は、セクターを反復することでした(あなたができるとき...私は最近それをテストしていません)。

しかし、YQLは1日ごとに調整されるため、そのようにすると最終的にブロックされます。

これを回避するには、可能な限りCSV APIを使用します。

1
RobotHumans