Як отримати повний список символів галочок від Yahoo Finance? [зачинено]


100

Я нескінченно гуглю для того, щоб отримати повний (і щодня оновлюваний) список усіх символів тикерів Yahoo, доступних через http://finance.yahoo.com

Yahoo має інформацію про акції, ф'ючерси тощо для багатьох бірж по всьому світу, і я хотів би поєднати список усіх символів, що дістаються через них. Я спробував YQL, але у них є обмеження пункту "де symbol = (або in)", тому я не можу вибрати * з символів.

Отже, отримати детальну інформацію про один символ або декілька символів одночасно просто, але я просто не можу зрозуміти, як отримати список усіх доступних біржів.

Хто-небудь може допомогти, будь ласка?


8
Ви отримали радість? Я знайшов це: eoddata.com/symbols.aspx
Codek

Спасибі Кодек :-) Ні, я його не знайшов, і завдання полягало в пошуку списку символів Yahoos, а не у когось інших, тому, на жаль, не можна використовувати Eoddatas. Ще раз дякую та чудово
виходні

2
гаразд, без проблем. Я хотів лише символів LSE, тому вищезгадане допомогло мені - я вважаю, що символи в рамках обміну є узгодженими, наприклад, yahoo / lse / google finance тощо. Це смішно, як усі цінові дані охоче доступні, але не перелік символів я просто не отримую!
Кодек

Тепер ви можете використовувати метадані з quandl, що містить символи 98k. Зауважте, що вам потрібно розшифрувати символ quandl назад до початкового символу yahoo. INDEX_ отримує ^ і _ отримує. quandl.com/data/YAHOO/metadata
KIC

3
Програма пітона, яка може це зробити для вас: github.com/Benny-/Yahoo-ticker-symbol-downloader
Андре Пена,

Відповіді:


13

Для API Yahoo.Finance за адресою http://code.google.com/p/yahoo-finance-managed/ є хороша обгортка 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);
                }

            }
        }

Це дало мені список близько 75 000 цінних паперів приблизно за 4 хвилини.


24
Чи можете ви запустити цей код і покласти копію результату на пастібін для тих, хто не використовує C #?
Jeroen

1
Здається, алфавітний результат не є повним. Багато символів пропущено.
laang

Я спробував запустити цей код, але, на жаль, він не дав результатів. Якісь ідеї?
Левине серце

3
Я не думаю, що це більше працює. Згаданий API обгортки робить запит на biz.yahoo.com/i, який, схоже, змінився (переспрямовує на finance.yahoo.com/q) і більше не містить таблиці, яку пропонує XPath.
Річардр

45

у мене була подібна проблема. yahoo цього не пропонує, але ви можете отримати його, переглянувши документи document.write у списку nyse.com і знайдіть файл .js, де вони просто трапляються, щоб зберігати список компаній, починаючи з даного листа, як js масив буквальний. ви також можете отримати приємні файли CSV з nasdaq.com тут: http://www.nasdaq.com/screening/companies-by-name.aspx?letter=0&exchange=nasdaq&render=download (замініть exchange = nasdaq обміном = nyse для символів ніс).


2
Дякую Іану. Мені потрібен список для Yahoo, хоча, оскільки вони також мають тикери за межами США, тому Nasdaq, на жаль, недостатньо.
rassom

5
Це чудово, дякую. Ви також можете замінити обмін на "всі", щоб отримати тикери для всіх трьох індексів.
Дарин Петерсон

посилання веде на веб-сайт із таким списком, але я не бачу можливості завантажити csv
hipoglucido

45

Мені вдалося зробити щось подібне за допомогою цієї URL-адреси:

http://query.yahooapis.com/v1/public/yql?q=select%20 *% 20from% 20yahoo.finance.industry% 20where% 20id% 20in% 20 (виберіть% 20industry.id% 20from% 20yahoo.finance .sectors) & env = магазин% 3A% 2F% 2Fdatatables.org% 2Falltableswithkeys

Він завантажує повний перелік символів запасів за допомогою API Yahoo YQL, включаючи назву запасу, символ запасу та ідентифікатор галузі. Здається, це не будь-які модифікатори символів акцій. Наприклад, для Rogers Communications Inc він завантажує лише RCI, а не RCI-A.TO, RCI-B.TO тощо. Я ще не знайшов джерела для цієї інформації - якщо хтось знає про спосіб автоматичного завантаження цього, я Я хотів би це почути. Крім того, було б непогано знайти спосіб завантажити якесь співвідношення між символом акції та біржею, на якій торгується, оскільки деякі торгуються на декількох біржах, або, можливо, я хочу лише переглянути речі на TSX чи щось таке .


9
АБО якщо json більше - ваша річ: json
Andrew Luhring

1
Хороший. Сирий YQL: виберіть * з yahoo.finance.industry, де id (виберіть industry.id від yahoo.finance.sectors)
Девід Гілбертсон

1
Я вважаю, що дані, повернені вищезазначеним запитом, в кінцевому рахунку походять із посилань, доступних за цією URL-адресою biz.yahoo.com/ic/ind_index.html (ці додаткові URL-адреси також можуть бути корисними: biz.yahoo.com/p/s_conameu.html , biz .yahoo.com / p / sum_conameu.html )
richardr

13
Схоже, це вже не працює :(
Андре Пена,

1
Я думаю, таблицю "yahoo.finance.sectors" було видалено. Але все ж є джерело даних - лише веб-сторінка. (Дійсно, якщо ви виберете * з yahoo.finance.sectors "на консолі YQL на сайті developer.yahoo.com/yql/console , вбудований у відповідь - це посилання на веб-сторінку - biz.yahoo.com/ic /ind_index.html. ) Отже, ви повинні написати код, щоб отримати цю сторінку, а потім проаналізувати дані з неї. Це дасть вам список секторів, галузей у цих секторах та ідентифікатор галузі (і ви можете зробити ідентифікатор сектора з першої цифри ідентифікатора галузі).
Стів Грін

24

Фондовий список NASDAQ ftp://ftp.nasdaqtrader.com/symboldirectory

Два файли nasdaqlisted.txt та otherlisted.txt є | труба відокремлена. Це має дати вам хороший перелік усіх запасів.


для ледачих, як я: ftp.nasdaqtrader.com/SymbolDirectory ftp.nasdaqtrader.com/SymbolDirectory/nasdaqlisted.txt ftp.nasdaqtrader.com/SymbolDirectory/otherlisted.txt
1mike12

nasdaqtraded.txt - це те, що вам потрібно, це обидва списки разом.
розторопша

14

Можливо, я можу допомогти зі списком тикерних символів для акцій (США та інших країн) та для ETF.

Yahoo надає Календар прибутків, в якому перераховані всі акції, які оголошують прибуток за певний день. Сюди входять акції, що не належать до США.

Наприклад, ось сьогодні: http://biz.yahoo.com/research/earncal/20120710.html

остання частина URL-адреси - дата (у форматі РРРРММДД), для якої потрібно Календар прибутку. Ви можете прокрутити декілька днів і скребти символи всіх акцій, які повідомили про заробітки в ті дні.

Немає гарантії, що yahoo має дані для всіх акцій, які повідомляють про прибутки, тим більше, що деякі акції більше не існують (банкрутство, придбання тощо), але це, мабуть, гідна відправна точка.

Якщо ви знайомі R, ви можете використовувати пакет qmao для цього. (Див. Цю публікацію ), якщо у вас виникли проблеми з її встановленням.

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, ф'ючерси, опціони, облігації, форекс або пайові фонди.

Список ETF можна отримати від Yahoo тут: http://finance.yahoo.com/etf/browser/mkt Це відображається лише перші 20. Вам потрібна URL-адреса посилання "Показати все" внизу цієї сторінки . Ви можете скребти сторінку, щоб дізнатися, скільки існує ETF, а потім побудуйте 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

Тепер ви можете дістати Tickers із таблиці на цій сторінці

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

І для індексів США та інших країн ви можете скребти ці сторінки

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


2
Як ви писали, я, можливо, не отримаю всі тикери таким чином, і для мого проекту це або все (повне прослуховування), або це не має значення. Але дуже дякую за грунтовну відповідь, GSee. Вдячний за це! Приємного дня :-)
rassom

8

Я досліджував це кілька днів, дотримуючись нескінченних підстав, які наблизилися, але не зовсім до того, що я хотів.

Моя потреба полягає в простому переліку "символ, сектор, галузь". Я працюю в 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, але витягує всі доступні символи (багато, на глобальних біржах)

Замініть "експортувати" на "просіювач", і дані з’являться у браузері.

Існує ще багато варіантів, які можна використовувати, по одному для кожного елемента просіювача на сайті.

Поки що це найпотужніший і зручний програмний спосіб отримати кілька фрагментів даних, які я інакше не міг легко отримати. І, схоже, цей сайт цілком може стати єдиним джерелом для більшості того, що вам може знадобитися, окрім котирувань у реальному чи майже в реальному часі.


4
Кожен URL, який я завантажую, переспрямовується на finviz.com/elite.ashx
PUG

Мені довелося підписатися на послугу трейдера Elite, але воно того варте. Дякую.
vlmercado

7

Повний список символів / тикерів / акцій доступний для завантаження (формат excel) на веб-сайті нижче. http://www.myinvestorshub.com/yahoo_stock_list.php

Список оновлено до січня 2016 року: http://investexcel.net/all-yahoo-finance-stock-tickers/


3
Наскільки актуальний цей список?
Jeroen

1
Цей список видається неповним, наприклад, GOOG відсутній.
користувач592419

Цей список відключається на 3000 символів. Це в алфавітному порядку, тому для США, які опиняються на FDEF. Інші ринки, що містять менше 3000 символів, здаються, краще проходять, наприклад, Гонконг. Це сказало, що я не маю поняття, наскільки це повно та актуально.
фантастичний

2
Здається незавершеним і бездоганним.
Єнс А. Кох

Посилання більше не працює
toshiro92

1

Одним із вирішень, який я мав для цього, був перегляд секторів (що в той час ви могли зробити ... Я нещодавно цього не перевіряв).

Зрештою, ви заблокуєтесь, коли ви зробите це таким чином, оскільки YQL зменшується в день.

Використовуйте API CSV, коли це можливо, щоб уникнути цього.


1

У мене була така ж проблема, але я думаю, що у мене є просте рішення (код - це з мого додатка RoR): Витягніть ідентифікатори галузі з yahoo.finance.sectors і додайте їх у 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

Витягніть усі товари з їх символами за допомогою галузевих ідентифікаторів:

    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.


5500, ймовірно, буде лише символами акцій США (фінанси Yahoo охоплюють набагато більше - у всьому світі - як ви бачите у прийнятій відповіді, він отримав близько 75000 символів! :) ... Ще не перетворив прийнятий відповідь .NET спосіб у Ruby (Я також використовую RoR), тому якщо ви змусите його працювати, тобто знайти більше символів, будь ласка, повідомте мене про це. Дякую! :-)
rassom
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.