Làm thế nào để có được danh sách đầy đủ các biểu tượng mã cổ phiếu từ Yahoo Finance? [đóng cửa]


100

Tôi đã liên tục tìm kiếm trên Google về phương pháp để có được danh sách đầy đủ (và được cập nhật hàng ngày) về tất cả các biểu tượng mã đánh dấu Yahoo có sẵn trên http://finance.yahoo.com

Yahoo có thông tin về cổ phiếu, hợp đồng tương lai, v.v. cho rất nhiều sàn giao dịch trên toàn thế giới, và tôi muốn có một danh sách tổng hợp tất cả các ký hiệu mã có sẵn thông qua chúng. Tôi đã thử YQL nhưng họ có hạn chế mệnh đề "where Symbol = (hoặc in)" nên tôi không thể chọn * từ các ký hiệu.

Vì vậy, về cơ bản, việc lấy thông tin chi tiết cho một biểu tượng hoặc nhiều biểu tượng cùng một lúc rất dễ dàng nhưng tôi dường như không thể tìm ra cách lấy danh sách tất cả các mã có sẵn.

Ai có thể giúp tôi không?


8
Bạn có nhận được niềm vui nào không? Tôi đã tìm thấy điều này: eoddata.com/symbols.aspx
Codek

Cảm ơn Codek :-) Không, tôi không tìm thấy nó và nhiệm vụ là tìm danh sách biểu tượng Yahoos, không phải ai elses, nên rất tiếc là không thể sử dụng Eoddatas. Cảm ơn một lần nữa và có một cuối tuần tuyệt vời :-)
rassom

2
ok không có probs. Tôi chỉ muốn các ký hiệu LSE vì vậy những điều trên đã giúp ích cho tôi - tôi tin rằng các ký hiệu trong sàn giao dịch là nhất quán với nhau, ví dụ: yahoo / lse / google Finance, v.v. - ngoại trừ yahoo nó có .L ở cuối và trong google nó có LON. Thật là nực cười khi tất cả dữ liệu về giá đều có sẵn, nhưng không phải danh sách các ký hiệu mà tôi không nhận được!
Codek

Bây giờ bạn có thể sử dụng siêu dữ liệu từ quandl chứa 98k biểu tượng. Lưu ý rằng bạn phải giải mã ký hiệu quandl trở lại biểu tượng ban đầu của yahoo. INDEX_ được ^ và _ được. quandl.com/data/YAHOO/metadata
KIC

3
Một chương trình python có thể làm điều đó cho bạn: github.com/Benny-/Yahoo-ticker-symbol-downloader
André Pena

Câu trả lời:


13

Có một trình bao bọc C # tuyệt vời cho API Yahoo.Finance tại http://code.google.com/p/yahoo-finance-managed/ sẽ đưa bạn đến đó. Rất tiếc, không có cách nào trực tiếp để tải xuống danh sách mã đánh dấu nhưng cách sau sẽ tạo danh sách bằng cách lặp lại qua các nhóm chữ cái:

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

            }
        }

Nó cho tôi một danh sách khoảng 75.000 chứng khoán trong khoảng 4 phút.


24
Bạn có thể chạy mã này và đặt một bản sao của đầu ra trên pastebin, cho những người trong chúng ta không sử dụng C # không?
Jeroen

1
Có vẻ như kết quả theo thứ tự bảng chữ cái không hoàn chỉnh. Nhiều biểu tượng bị bỏ sót.
liang

Tôi đã thử chạy mã này nhưng tiếc là nó không trả về kết quả. Bất kỳ ý tưởng?
Lionheart

3
Tôi không nghĩ điều này hiệu quả nữa. API trình bao bọc được đề cập thực hiện một yêu cầu tới biz.yahoo.com/i , có vẻ như đã thay đổi (chuyển hướng đến Finance.yahoo.com/q) và không còn chứa bảng mà XPath đề xuất.
richardr

45

Tôi đã có một vấn đề tương tự. yahoo không cung cấp nó, nhưng bạn có thể lấy một cái bằng cách xem qua các câu lệnh document.write trên danh sách của nyse.com và tìm tệp .js nơi chúng lưu trữ danh sách các công ty bắt đầu bằng chữ cái đã cho dưới dạng mảng js theo nghĩa đen. bạn cũng có thể tải các tệp csv gọn gàng đẹp mắt từ nasdaq.com tại đây: http://www.nasdaq.com/screening/companies-by-name.aspx?letter=0&exchange=nasdaq&render=download (thay thế exchange = nasdaq bằng exchange = nyse cho các ký hiệu nyse).


2
Cảm ơn Ian. Tôi cần danh sách cho Yahoo vì họ cũng có các mã bên ngoài Hoa Kỳ, vì vậy Nasdaq rất tiếc là không đủ.
rassom

5
Điều này là tuyệt vời, cảm ơn. Bạn cũng có thể thay thế sự trao đổi bằng "tất cả" để lấy các mã cho cả ba chỉ mục.
Darin Peterson

liên kết dẫn đến một trang web có danh sách như vậy nhưng tôi không thấy tùy chọn tải xuống csv
hipoglucido

45

Tôi đã quản lý để làm điều gì đó tương tự bằng cách sử dụng URL này:

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

Nó tải xuống danh sách đầy đủ các ký hiệu chứng khoán bằng cách sử dụng Yahoo YQL API, bao gồm tên chứng khoán, ký hiệu chứng khoán và ID ngành. Những gì nó dường như không có là bất kỳ loại bổ ngữ ký hiệu cổ phiếu nào. Ví dụ: đối với Rogers Communications Inc, nó chỉ tải xuống RCI, không phải RCI-A.TO, RCI-B.TO, v.v. Tôi chưa tìm thấy nguồn cho thông tin đó - nếu ai đó biết cách tự động tải xuống, tôi muốn nghe nó. Ngoài ra, sẽ rất tuyệt nếu bạn tìm cách tải xuống một số loại mối quan hệ giữa biểu tượng chứng khoán và sàn giao dịch mà nó được giao dịch, vì một số được giao dịch trên nhiều sàn giao dịch, hoặc có thể tôi chỉ muốn xem xét những thứ trên TSX hoặc thứ gì đó .


9
HOẶC nếu json là điều nữa bạn: json
Andrew Luhring

1
Tốt lắm. YQL thô: chọn * từ yahoo.finance.industry trong đó id trong (chọn Industry.id từ yahoo.finance.sectors)
David Gilbertson

1
Tôi tin rằng dữ liệu được trả về bởi truy vấn ở trên cuối cùng đến từ các liên kết có thể truy cập được từ URL này biz.yahoo.com/ic/ind_index.html (các URL bổ sung này cũng có thể hữu ích: biz.yahoo.com/p/s_conameu.html , biz .yahoo.com / p / sum_conameu.html )
richardr

13
Điều này dường như không còn hoạt động nữa :(
André Pena,

1
Tôi nghĩ rằng bảng "yahoo.finance.sectors" đã bị xóa. Nhưng vẫn có một nguồn cho dữ liệu - chỉ một trang web. (Thật vậy, nếu bạn thực hiện 'select * from yahoo.finance.sectors' tại Bảng điều khiển YQL tại developer.yahoo.com/yql/console , thì được nhúng trong kết quả trả về là liên kết đến trang web - biz.yahoo.com/ic /ind_index.html. ) Vì vậy, những gì bạn phải làm là viết một số mã để lấy trang đó và sau đó phân tích dữ liệu ra khỏi nó. Nó sẽ cung cấp cho bạn danh sách các ngành, các ngành trong các lĩnh vực đó và ID ngành (và bạn có thể tạo ID ngành từ chữ số đầu tiên của ID ngành).
Steve Greene,

24

Danh sách chứng khoán NASDAQ ftp://ftp.nasdaqtrader.com/symboldirectory

2 tệp nasdaqlisted.txt và otherlisted.txt là | đường ống tách rời. Điều đó sẽ cung cấp cho bạn một danh sách tốt về tất cả các cổ phiếu.


cho lười biếng như tôi: ftp.nasdaqtrader.com/SymbolDirectory ftp.nasdaqtrader.com/SymbolDirectory/nasdaqlisted.txt ftp.nasdaqtrader.com/SymbolDirectory/otherlisted.txt
1mike12

nasdaqtraded.txt là những gì bạn cần, nó kết hợp cả hai danh sách đó.
thistleknot

14

Tôi có thể giúp bạn với danh sách các biểu tượng mã cho các cổ phiếu (Hoa Kỳ và không thuộc Hoa Kỳ) và cho các quỹ ETF.

Yahoo cung cấp Lịch thu nhập liệt kê tất cả các cổ phiếu công bố thu nhập trong một ngày nhất định. Điều này bao gồm các cổ phiếu không phải của Hoa Kỳ.

Ví dụ: đây là ngày hôm nay: http://biz.yahoo.com/research/earncal/20120710.html

phần cuối cùng của URL là ngày (ở định dạng YYYYMMDD) mà bạn muốn có Lịch thu nhập. Bạn có thể lặp lại vài ngày và tìm các Biểu tượng của tất cả các cổ phiếu đã báo cáo thu nhập vào những ngày đó.

Không có gì đảm bảo rằng yahoo có dữ liệu cho tất cả các cổ phiếu báo cáo thu nhập, đặc biệt là khi một số cổ phiếu không còn tồn tại (phá sản, mua lại, v.v.), nhưng đây có lẽ là một điểm khởi đầu tốt.

Nếu bạn đã quen R, bạn có thể sử dụng gói qmao để làm điều này. (Xem bài đăng này ) nếu bạn gặp sự cố khi cài đặt nó.

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"   

Điều này sẽ không bao gồm bất kỳ ETF, hợp đồng tương lai, quyền chọn, trái phiếu, ngoại hối hoặc quỹ tương hỗ nào.

Bạn có thể lấy danh sách các ETF từ yahoo tại đây: http://finance.yahoo.com/etf/browser/mkt Điều đó chỉ hiển thị 20. Bạn cần URL của liên kết "Hiển thị tất cả" ở cuối trang đó . Bạn có thể quét trang để tìm xem có bao nhiêu ETF, sau đó tạo một 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

Bây giờ, bạn có thể trích xuất các Mã từ bảng trên trang đó

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"

Đó là về tất cả sự trợ giúp mà tôi có thể cung cấp, nhưng bạn có thể làm điều gì đó tương tự để nhận được một số hợp đồng tương lai mà họ cung cấp bằng cách cạo các trang này (Đây chỉ là hợp đồng tương lai của Hoa Kỳ)

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: // Financial.yahoo.com/futures?t=indices ,

Và, đối với các chỉ số Hoa Kỳ và không thuộc Hoa Kỳ, bạn có thể loại bỏ các trang này

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: // Financial.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


2
Như bạn đã viết, tôi có thể không nhận được tất cả các đánh dấu theo cách này và đối với dự án của tôi, đó là tất cả (nghe hoàn chỉnh) hoặc điều đó không quan trọng. Nhưng rất cảm ơn GSee đã trả lời cặn kẽ. Cảm kích điều đó! Có một ngày tuyệt vời :-)
rassom

8

Tôi đã nghiên cứu điều này trong vài ngày, theo dõi vô số khách hàng tiềm năng đến gần, nhưng không hoàn toàn, với những gì tôi đang theo đuổi.

Nhu cầu của tôi là một danh sách đơn giản gồm 'biểu tượng, lĩnh vực, ngành'. Tôi đang làm việc bằng Java và không muốn sử dụng bất kỳ mã gốc nền tảng nào.

Có vẻ như hầu hết các dữ liệu khác, như dấu ngoặc kép, v.v., đều có sẵn.

Cuối cùng, hãy làm theo một gợi ý để xem 'finviz.com'. Có vẻ như chỉ là vé. Hãy thử sử dụng như sau:

http://finviz.com/export.ashx?v=111&t=aapl,cat&o=ticker Điều này quay lại dưới dạng các dòng, kiểu csv, với một hàng tiêu đề, được sắp xếp theo biểu tượng mã. Bạn có thể tiếp tục thêm mã. Trong mã, bạn có thể đọc luồng. Hoặc bạn có thể để trình duyệt hỏi bạn mở hay lưu tệp.

http://finviz.com/export.ashx?v=111&&o=ticker Cùng một kiểu csv, nhưng kéo tất cả các ký hiệu có sẵn (rất nhiều, trên các sàn giao dịch toàn cầu)

Thay thế 'export' bằng 'screenner' và dữ liệu sẽ hiển thị trong trình duyệt.

Có nhiều tùy chọn khác mà bạn có thể sử dụng, một tùy chọn cho mọi phần tử sàng lọc trên trang web.

Cho đến nay, đây là cách lập trình mạnh mẽ và tiện lợi nhất để lấy một vài phần dữ liệu mà tôi dường như không thể dễ dàng lấy được. Và, có vẻ như trang web này cũng có thể là một nguồn duy nhất cho hầu hết những gì bạn có thể cần ngoài những trích dẫn thời gian thực hoặc gần thời gian thực.


4
Mọi url tôi tải đều được chuyển hướng đến finviz.com/elite.ashx
PUG

Tôi đã phải đăng ký dịch vụ giao dịch viên Elite, nhưng nó đáng giá. Cảm ơn.
vlmercado

7

Danh sách đầy đủ các ký hiệu / mã cổ phiếu / cổ phiếu yahoo có sẵn để tải xuống (định dạng excel) tại trang web bên dưới. http://www.myinvestorshub.com/yahoo_stock_list.php

Danh sách được cập nhật đến tháng 1 năm 2016: http://investexcel.net/all-yahoo-finance-stock-tickers/


3
Làm thế nào để cập nhật danh sách này?
Jeroen

1
Danh sách này dường như chưa đầy đủ, chẳng hạn như GOOG không có trên đó.
user592419

Danh sách này cắt đi ở 3000 biểu tượng. Nó được xếp theo thứ tự bảng chữ cái nên đối với Hoa Kỳ, nước này đã có mặt tại FDEF. Các thị trường khác có ít hơn 3000 biểu tượng dường như có giá tốt hơn, chẳng hạn như Hồng Kông. Điều đó nói rằng tôi không biết nó hoàn chỉnh / cập nhật như thế nào.
fantabolous

2
Có vẻ như không đầy đủ và không rõ ràng.
Jens A. Koch

Liên kết không làm việc nữa
toshiro92

1

Một cách giải quyết mà tôi có cho điều này là lặp lại các cung (điều này tại thời điểm bạn có thể làm ... Tôi chưa thử nghiệm điều đó gần đây).

Tuy nhiên, cuối cùng bạn sẽ bị chặn khi bạn làm theo cách đó, vì YQL bị điều chỉnh mỗi ngày.

Sử dụng API CSV bất cứ khi nào có thể để tránh điều này.


1

Tôi cũng gặp vấn đề tương tự, nhưng tôi nghĩ mình có giải pháp đơn giản (mã từ ứng dụng RoR của tôi): Trích xuất id ngành từ yahoo.finance.sectors và thêm nó vào 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

Trích xuất tất cả các comanies có biểu tượng của chúng bằng id ngành:

    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

Kết nối 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

Xin lỗi vì sự lộn xộn, nhưng đây là phiên bản thử nghiệm đầu tiên cho dự án của tôi và tôi cần nó rất nhanh. Có một số biến thể của người trợ giúp và những thứ khác cho ứng dụng của tôi, xin lỗi vì điều đó. Nhưng tôi có câu hỏi: Bạn có nhiều biểu tượng không? Tôi có 5500.


5500 có lẽ sẽ chỉ là biểu tượng chứng khoán của Hoa Kỳ (Yahoo Finance bao gồm nhiều hơn - trên toàn thế giới - như bạn có thể thấy trong câu trả lời được chấp nhận, anh ta có khoảng 75.000 biểu tượng! :) ... Vẫn chưa chuyển đổi câu trả lời được chấp nhận .NET way sang Ruby (Tôi cũng đang sử dụng RoR), vì vậy nếu bạn làm cho nó hoạt động, tức là tìm thêm ký hiệu, vui lòng cho tôi biết. Cảm ơn! :-)
rassom
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.