Bagaimana cara mendapatkan daftar lengkap simbol ticker dari Yahoo Finance? [Tutup]

100

Saya terus mencari di Google untuk metode mendapatkan daftar lengkap (dan diperbarui setiap hari) dari semua simbol Yahoo yang tersedia melalui http://finance.yahoo.com

Yahoo memiliki informasi untuk saham, futures dll untuk banyak bursa di seluruh dunia, dan saya ingin daftar gabungan dari semua simbol ticker yang tersedia melaluinya. Saya sudah mencoba YQL tetapi mereka memiliki batasan klausa "where symbol = (or in)" sehingga saya tidak dapat memilih * dari simbol.

Jadi pada dasarnya, mendapatkan informasi mendetail untuk satu simbol atau beberapa simbol sekaligus itu mudah, tetapi saya sepertinya tidak dapat menemukan cara mendapatkan daftar semua ticker yang tersedia.

Apakah ada yang bisa membantu?

tebusan
sumber
8
Apakah kamu mendapatkan kegembiraan? Saya menemukan ini: eoddata.com/symbols.aspx
Codek
Terima kasih Codek :-) Tidak, saya tidak menemukannya dan tugasnya adalah menemukan daftar simbol Yahoos, bukan orang lain, jadi sayangnya tidak bisa menggunakan Eoddata. Sekali lagi terima kasih dan
semoga
2
ok tidak masalah. Saya hanya menginginkan simbol LSE sehingga hal di atas membantu saya - saya yakin simbol dalam pertukaran konsisten di seluruh misalnya yahoo / lse / google finance dll - kecuali untuk yahoo memiliki .L di bagian akhir dan di google memiliki LON. Sungguh konyol bagaimana semua data harga tersedia dengan sukarela, tetapi bukan daftar simbol. Saya hanya tidak mengerti!
Codek
Sekarang Anda dapat menggunakan metadata dari quandl yang menahan 98k simbol. Perhatikan bahwa Anda harus memecahkan kode simbol quandl kembali ke simbol yahoo aslinya. INDEX_ mendapatkan ^ dan _ mendapat. quandl.com/data/YAHOO/metadata
KIC
3
Program python yang dapat melakukannya untuk Anda: github.com/Benny-/Yahoo-ticker-symbol-downloader
André Pena

Jawaban:

13

Ada pembungkus C # yang bagus untuk API Yahoo.Finance di http://code.google.com/p/yahoo-finance-managed/ yang akan membawa Anda ke sana. Sayangnya, tidak ada cara langsung untuk mengunduh daftar ticker tetapi yang berikut ini membuat daftar dengan mengulang melalui grup alfabet:

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

            }
        }

Ini memberi saya daftar sekitar 75.000 sekuritas dalam waktu sekitar 4 menit.

jm1102
sumber
24
Bisakah Anda menjalankan kode ini dan meletakkan salinan hasilnya di pastebin, bagi kita yang tidak menggunakan C #?
Jeroen
1
Tampaknya hasil alfabetis belum lengkap. Banyak simbol yang terlewat.
liang
Saya mencoba menjalankan kode ini tetapi sayangnya tidak ada hasil. Ada ide?
lionheart
3
Saya tidak berpikir ini berhasil lagi. API pembungkus yang disebutkan membuat permintaan ke biz.yahoo.com/i yang tampaknya telah berubah (dialihkan ke finance.yahoo.com/q) dan tidak lagi berisi tabel yang disarankan XPath.
richardr
45

saya punya masalah yang sama. yahoo tidak menawarkannya, tetapi Anda bisa mendapatkannya dengan melihat pernyataan document.write di daftar nyse.com dan temukan file .js di mana mereka kebetulan menyimpan daftar perusahaan yang dimulai dengan huruf yang diberikan sebagai larik js harfiah. Anda juga bisa mendapatkan file csv yang rapi dari nasdaq.com di sini: http://www.nasdaq.com/screening/companies-by-name.aspx?letter=0&exchange=nasdaq&render=download (ganti exchange = nasdaq dengan exchange = nyse untuk simbol nyse).

Ian Ooi
sumber
2
Terima kasih Ian. Saya memerlukan daftar untuk Yahoo karena mereka juga memiliki ticker di luar AS, jadi sayangnya Nasdaq tidak cukup.
rassom
5
Ini luar biasa, terima kasih. Anda juga dapat mengganti pertukaran dengan "semua" untuk mendapatkan ticker dari ketiga indeks.
Darin Peterson
tautan mengarah ke situs web dengan daftar seperti itu tetapi saya tidak melihat opsi untuk mengunduh csv
hipoglucido
45

Saya berhasil melakukan sesuatu yang serupa dengan menggunakan URL ini:

http://query.yahooapis.com/v1/public/yql?q=select%20 *% 20from% 20yahoo.finance.industry% 20 di mana% 20id% 20in% 20 (pilih% 20industry.id% 20from% 20yahoo.finance .sectors) & env = store% 3A% 2F% 2Fdatatables.org% 2Falltableswithkeys

Ini mengunduh daftar lengkap simbol saham menggunakan Yahoo YQL API, termasuk nama saham, simbol saham, dan ID industri. Apa yang tampaknya tidak ada adalah pengubah simbol saham apa pun. Misalnya untuk Rogers Communications Inc, ia hanya mengunduh RCI, bukan RCI-A.TO, RCI-B.TO, dll. Saya belum menemukan sumber untuk informasi itu - jika ada yang tahu cara untuk mengunduh secara otomatis, saya ingin mendengarnya. Selain itu, alangkah baiknya menemukan cara untuk mengunduh semacam hubungan antara simbol saham dan bursa yang diperdagangkan, karena beberapa diperdagangkan di banyak bursa, atau mungkin saya hanya ingin melihat barang-barang di TSX atau sesuatu .

John
sumber
9
ATAU jika json lebih sesuai dengan Anda: json
Andrew Luhring
1
Bagus. YQL mentah: pilih * dari yahoo.finance.industry tempat id masuk (pilih industry.id dari yahoo.finance.sectors)
David Gilbertson
1
Saya yakin data yang dikembalikan oleh kueri di atas pada akhirnya berasal dari tautan yang dapat dijangkau dari URL ini biz.yahoo.com/ic/ind_index.html (URL tambahan ini mungkin juga berguna: biz.yahoo.com/p/s_conameu.html , biz .yahoo.com / p / sum_conameu.html )
richardr
13
Ini sepertinya tidak berfungsi lagi :(
André Pena
1
Saya pikir tabel "yahoo.finance.sectors" telah dihapus. Tetapi masih ada sumber untuk datanya - hanya halaman web. (Memang, jika Anda melakukan 'pilih * dari yahoo.finance.sectors' di Konsol YQL di developer.yahoo.com/yql/console , yang disematkan di bagian belakang adalah tautan ke halaman web - biz.yahoo.com/ic /ind_index.html. ) Jadi yang harus Anda lakukan adalah menulis beberapa kode untuk mendapatkan halaman itu dan kemudian mengurai datanya. Ini akan memberi Anda daftar sektor, industri di sektor tersebut, dan ID industri (dan Anda dapat membuat ID sektor dari digit pertama ID industri).
Steve Greene
24

Daftar Saham NASDAQ ftp://ftp.nasdaqtrader.com/symboldirectory

2 file nasdaqlisted.txt dan otherlisted.txt adalah | pipa dipisahkan. Itu akan memberi Anda daftar yang bagus dari semua saham.

tr4nc3
sumber
untuk pemalas seperti saya: ftp.nasdaqtrader.com/SymbolDirectory ftp.nasdaqtrader.com/SymbolDirectory/nasdaqlisted.txt ftp.nasdaqtrader.com/SymbolDirectory/otherlisted.txt
1mike12
nasdaqtraded.txt adalah yang Anda butuhkan, kedua daftar itu digabungkan.
thistleknot
14

Saya mungkin dapat membantu dengan daftar simbol ticker untuk saham (AS dan non-AS) dan untuk ETF.

Yahoo menyediakan Kalender Penghasilan yang mencantumkan semua saham yang mengumumkan penghasilan untuk hari tertentu. Ini termasuk saham non-AS.

Misalnya, inilah hari ini: http://biz.yahoo.com/research/earncal/20120710.html

bagian terakhir dari URL adalah tanggal (dalam format YYYYMMDD) yang Anda inginkan untuk Kalender Penghasilan. Anda dapat mengulang beberapa hari dan mengikis Simbol semua saham yang melaporkan pendapatan pada hari-hari itu.

Tidak ada jaminan bahwa yahoo memiliki data untuk semua saham yang melaporkan pendapatan, terutama karena beberapa saham sudah tidak ada lagi (kebangkrutan, akuisisi, dll.), Tetapi ini mungkin merupakan titik awal yang layak.

Jika Anda sudah terbiasa R, Anda dapat menggunakan paket qmao untuk melakukan ini. (Lihat posting ini ) jika Anda mengalami kesulitan menginstalnya.

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"   

Ini tidak termasuk ETF, futures, opsi, obligasi, forex atau reksa dana.

Anda bisa mendapatkan daftar ETF dari yahoo di sini: http://finance.yahoo.com/etf/browser/mkt Yang hanya menampilkan 20 ETF pertama. Anda memerlukan URL dari link "Tampilkan Semua" di bagian bawah halaman itu . Anda dapat mengikis halaman untuk mengetahui berapa banyak ETF yang ada, lalu membuat 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

Sekarang, Anda dapat mengekstrak Tickers dari tabel di halaman itu

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"

Itu tentang semua bantuan yang dapat saya tawarkan, tetapi Anda dapat melakukan sesuatu yang serupa untuk mendapatkan beberapa masa depan yang mereka tawarkan dengan menghapus halaman-halaman ini (Ini hanya berjangka AS)

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 ,

Dan, untuk indeks AS dan non-AS, Anda dapat menghapus halaman ini

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=omodities

GSee
sumber
2
Saat Anda menulis, saya mungkin tidak mendapatkan semua ticker dengan cara ini dan untuk proyek saya, semuanya (daftar lengkap) atau tidak masalah. Tapi terima kasih banyak atas jawaban lengkapnya, GSee. Menghargai itu! Semoga hari Anda menyenangkan :-)
rassom
8

Saya telah meneliti ini selama beberapa hari, mengikuti petunjuk tak berujung yang mendekati, tetapi tidak sepenuhnya, dengan apa yang saya cari.

Kebutuhan saya adalah daftar sederhana 'simbol, sektor, industri'. Saya bekerja di Java dan tidak ingin menggunakan kode asli platform apa pun.

Tampaknya sebagian besar data lain, seperti kutipan, dll., Sudah tersedia.

Akhirnya, ikuti saran untuk melihat 'finviz.com'. Sepertinya hanya tiketnya. Coba gunakan yang berikut ini:

http://finviz.com/export.ashx?v=111&t=aapl,cat&o=ticker Ini muncul kembali sebagai garis, gaya csv, dengan baris tajuk, diurutkan berdasarkan simbol ticker. Anda dapat terus menambahkan ticker. Dalam kode, Anda dapat membaca aliran. Atau Anda dapat membiarkan browser menanyakan apakah akan membuka atau menyimpan file.

http://finviz.com/export.ashx?v=111&&o=ticker Gaya csv yang sama, tetapi menarik semua simbol yang tersedia (banyak, di seluruh bursa global)

Ganti 'ekspor' dengan 'screener' dan data akan muncul di browser.

Ada lebih banyak opsi yang dapat Anda gunakan, satu untuk setiap elemen penyaring di situs.

Sejauh ini, ini adalah cara terprogram yang paling kuat dan nyaman untuk mendapatkan beberapa bagian data yang sepertinya tidak dapat saya dapatkan dengan mudah. Dan, sepertinya situs ini bisa menjadi satu sumber untuk sebagian besar dari apa yang mungkin Anda butuhkan selain kutipan waktu nyata atau mendekati waktu nyata.

Higgs
sumber
4
Setiap url yang saya muat dialihkan ke finviz.com/elite.ashx
PUG
Saya harus berlangganan layanan Elite trader, tetapi itu sepadan. Terima kasih.
vlmercado
7

Daftar lengkap simbol / ticker / saham yahoo tersedia untuk diunduh (format excel) di website di bawah ini. http://www.myinvestorshub.com/yahoo_stock_list.php

Daftar diperbarui hingga Januari 2016: http://investexcel.net/all-yahoo-finance-stock-tickers/

Pravin
sumber
3
Seberapa up to date daftar ini?
Jeroen
1
Daftar ini sepertinya tidak lengkap, misalnya GOOG tidak ada di dalamnya.
pengguna592419
Daftar ini memotong 3000 simbol. Ini dalam urutan abjad jadi untuk AS yang berakhir di FDEF. Pasar lain dengan kurang dari 3000 simbol tampaknya lebih baik, seperti Hong Kong. Yang mengatakan saya tidak tahu seberapa lengkap / mutakhirnya.
fantabolous
2
Sepertinya tidak lengkap dan tidak terawat.
Jens A. Koch
Tautan tidak berfungsi lagi
toshiro92
1

Salah satu solusi yang saya miliki untuk ini adalah mengulang sektor (yang pada saat itu dapat Anda lakukan ... saya belum mengujinya baru-baru ini).

Anda akhirnya akan diblokir pada akhirnya ketika Anda melakukannya seperti itu, karena YQL dibatasi per hari.

Gunakan CSV API jika memungkinkan untuk menghindari ini.

RobotHumans
sumber
1

Saya memiliki masalah yang sama, tetapi saya pikir saya memiliki solusi sederhana (kode dari aplikasi RoR saya): Ekstrak id industri dari yahoo.finance.sectors dan tambahkan ke 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

Ekstrak semua perusahaan dengan simbol mereka dengan id industri:

    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 koneksi:

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

Maaf untuk kekacauan, tapi ini adalah versi pengujian pertama untuk proyek saya dan saya membutuhkannya dengan sangat cepat. Ada beberapa variabel pembantu dan hal-hal lain untuk aplikasi saya, maaf. Tapi saya punya pertanyaan: Apakah Anda punya banyak simbol? Saya memiliki 5500.

quatermain
sumber
5500 mungkin hanya simbol saham AS (Yahoo finance mencakup lebih banyak - di seluruh dunia - seperti yang Anda lihat dalam jawaban yang diterima, dia mendapat sekitar 75.000 simbol! :) ... Belum mengubah jawaban yang diterima .NET cara ke Ruby belum (Saya juga menggunakan RoR), jadi jika Anda membuatnya berfungsi, yaitu temukan lebih banyak simbol, beri tahu saya. Terima kasih! :-)
rassom