2009-04-16 3 views
227

Я пытаюсь создать симулятор фондового рынка (возможно, в конечном итоге превращаясь в предсказательный ИИ), но у меня проблемы с поиском данных для использования. Я ищу (на наш взгляд, свободный) источник исторических данных фондового рынка.источник исторических данных запаса

В идеале это был бы очень мелкозернистый (второй или минутный интервал) набор данных с ценой и объемом каждого символа на NASDAQ и NYSE (и, возможно, другие, если я буду приключен). Кто-нибудь знает источник такой информации?

Я нашел this question, который указывает, что Yahoo предлагает исторические данные в формате CSV, но мне не удалось выяснить, как получить его в беглом просмотре связанного сайта.

Мне также не нравится идея загрузки данных по частям в файлах CSV ... Я полагаю, что Yahoo разозлится и отключит меня после первых нескольких тысяч запросов.

Я также обнаружил another question, что заставило меня думать, что я ударил по джекпоту, но, к сожалению, сайт OpenTick, похоже, закрыл свои двери ... слишком плохо, так как я думаю, что они были именно тем, что я хотел.

Я бы также мог использовать данные, которые только открывают/закрывают цену и объем каждого символа каждый день, но я бы предпочел все данные, если смогу его получить. Любые другие предложения?

+4

@rmeador, Yahoo не будет закрывать вас независимо от того, сколько запросов вы сделаете, но Google отключит вас. Я смог загрузить около 4 ГБ исторических цен EOD из Yahoo примерно через 5-6 часов без отключения. Это около 7 000 акций со всеми их историческими ценами EOD, так как они присоединились к рынку. См. Мой ответ для получения дополнительной информации и примера исходного кода. – Kiril

+34

как получилось, что никто не сделал из него торрент. –

+0

Я думал о том, чтобы создать его после того, как вы недавно поиграли с некоторыми финансовыми данными. Я уверен, что есть некоторые юридические проблемы с этим ... – cwoebker

ответ

7

К сожалению, данные по историческому тикеру, которые являются бесплатными, трудно найти. Теперь, когда opentick мертв, я не знаю другого провайдера.

В предыдущей жизни я работал на хедж-фонде, где была автоматизированная торговая система, и мы использовали исторические данные.

Мы использовали TickData для нашего источника. Их цены были разумными, и данные имели второстепенную резолюцию.

2

Я бы crawl finance.google.com (для цитат) - или finance.yahoo.com.

Оба эти файла возвратят html-страницы для большинства обменов по всему миру, включая исторические. Затем, это просто вопрос разбора HTML, чтобы извлечь то, что вам нужно.

Я делал это в прошлом с большим успехом. В качестве альтернативы, если вы не против использования Perl - в CPAN есть несколько модулей, которые сделали эту работу для вас - например, извлечение цитат из Google/Yahoo.

Более подробно см Quote History

+0

+1 против модулей perl, они делают получение данных супер легкими –

14

Набор данных каждого символа на NASDAQ и NYSE на второй или минутный интервал будет массивное.

Предположим, что на обоих биржах имеется 4000 компаний, которые, вероятно, находятся на очень низкой стороне, так как есть over 3200 companies, перечисленные на NASDAQ). Для данных со второго интервала, предполагая, что в день будет 6,5 торговых часов, это даст вам 23400 точек данных в день на компанию или около 93 600 000 точек данных в общей сложности за один день. Предполагая 200 торговых дней в году, это около 18 720 000 000 точек данных всего за один год.

Возможно, вы хотите начать с меньшего набора в первую очередь?

+2

Я работал в предположении, что большинство компаний не будут продаваться каждую секунду, поэтому количество точек данных будет значительно меньше. возможно, это плохое предположение. Тем не менее, я предсказывал порядка 10 с ГБ в год ... – rmeador

+0

Один из двух месяцев данных о запасах для 10 символов появился на 3 DVD. Данные также были сжаты. – Alan

+1

@rmeador thats true, но и некоторые акции имеют более ежедневный объем, чем есть секунды в день, то есть они торгуют более одного раза в секунду - и не все сделки гарантированно будут по одинаковой цене. Таким образом, вам нужно будет решить, интересуетесь ли вы ценой с интервалом или при торговле –

4

Вы можете использовать yahoo для получения ежедневных данных (гораздо более управляемый набор данных), но вам нужно структурировать URL-адреса. См. Это link. Вы не делаете много маленьких запросов, которые вы делаете с меньшими запросами.Много свободного программного обеспечения использует это, поэтому они не должны закрывать вас.

EDIT: This парень делает это, возможно, вы можете взглянуть на вызовы, которые делает его программное обеспечение.

+0

Сначала я думал, что ссылка выглядит многообещающей, но я не могу найти, как указать исторические данные ... это похоже это все в режиме реального времени. Я что-то упускаю? – rmeador

+0

Вы правы. Я добавил еще одну ссылку с программным обеспечением, которое делает исторический материал, поэтому я знаю, что это возможно. Возможно, посмотрите на вызовы, которые его программное обеспечение делает. – jimconstable

43

Я знаю, что вы хотели «бесплатно», но я бы серьезно подумал о получении данных от csidata.com примерно за 300 долларов США в год, если бы вы были вами.

Это то, что yahoo использует для предоставления своих данных.

Он поставляется с достойным API, и данные (насколько я могу судить) очень чисты.

Вы получаете 10-летнюю историю, когда подписываетесь, а затем обновляете позже.

Они также заботятся о любых видах неприятных вещей, таких как расколы и дивиденды для вас. Если вы еще не обнаружили радость, связанную с очисткой данных, вы не поймете, насколько вам это нужно, до тех пор, пока ваша система ATS (Automated Trading System) не найдет какой-то запас, действительно дешевая, только потому, что она разделяет 2 : 1 и вы этого не заметили.

+1

, какие языки поддерживаются их API? – user443854

+1

у них есть API ActiveX, который вы можете вызывать с кодом C++ или C# или что-то еще в окнах, чтобы добраться до ваших данных. – lukebuehler

+0

Данные CSI довольно чисты по сравнению с другими провайдерами, я согласен, но мы регулярно находим ошибки, но эй, если вы сообщите им, что они отправят вам ручку! – lukebuehler

1

Бывший проект шахты собирался использовать свободно загружаемые данные от EODData.

6

Мы приобрели 12 лет внутридневных данных от Kibot.com и очень довольны качеством.

Что касается требований к хранению: 12 лет 1-минутных данных для всех акций США (более 8000 символов) составляет около 100 ГБ.

С ситуацией с тиканием по тику немного отличается. Если вы записываете только время и продажи, это будет около 30 ГБ данных в месяц для всех акций США. Если вы хотите сохранить изменения ставки/запроса вместе с транзакциями, вы можете ожидать около 150 ГБ в месяц.

Надеюсь, это поможет. Пожалуйста, дайте мне знать, если есть что-нибудь еще, что я могу вам помочь. не

+0

Все еще устраивает KiBot @ boe100? – JaredBroad

+0

@ boe100 У них есть скорректированные и нескорректированные цены? У них есть бета и дельта? – user443854

+0

Доступны как скорректированные, так и нескорректированные данные. Вы можете обновлять свои данные с помощью API HTTP или загружать новые архивы с FTP-сервера ежедневно. Базы или дельта не рассчитываются. – boe100

93

ЭТО ОТВЕТ БОЛЬШЕ НЕ ТОЧНЫЙ КАК YAHOO FEED Перестала СУЩЕСТВУЕТ

Использование CSV подход в Yahoo выше вы также можете получить исторические данные! Вы можете перепроектировать следующий пример:

http://ichart.finance.yahoo.com/table.csv?s=YHOO&d=0&e=28&f=2010&g=d&a=3&b=12&c=1996&ignore=.csv

По существу:

sn = TICKER 
a = fromMonth-1 
b = fromDay (two digits) 
c = fromYear 
d = toMonth-1 
e = toDay (two digits) 
f = toYear 
g = d for day, m for month, y for yearly 

Полный список параметров:

a Ask 
a2 Average Daily Volume 
a5 Ask Size 
b Bid 
b2 Ask (Real-time) 
b3 Bid (Real-time) 
b4 Book Value 
b6 Bid Size 
c Change & Percent Change 
c1 Change 
c3 Commission 
c6 Change (Real-time) 
c8 After Hours Change (Real-time) 
d Dividend/Share 
d1 Last Trade Date 
d2 Trade Date 
e Earnings/Share 
e1 Error Indication (returned for symbol changed/invalid) 
e7 EPS Estimate Current Year 
e8 EPS Estimate Next Year 
e9 EPS Estimate Next Quarter 
f6 Float Shares 
g Day's Low 
h Day's High 
j 52-week Low 
k 52-week High 
g1 Holdings Gain Percent 
g3 Annualized Gain 
g4 Holdings Gain 
g5 Holdings Gain Percent (Real-time) 
g6 Holdings Gain (Real-time) 
i More Info 
i5 Order Book (Real-time) 
j1 Market Capitalization 
j3 Market Cap (Real-time) 
j4 EBITDA 
j5 Change From 52-week Low 
j6 Percent Change From 52-week Low 
k1 Last Trade (Real-time) With Time 
k2 Change Percent (Real-time) 
k3 Last Trade Size 
k4 Change From 52-week High 
k5 Percent Change From 52-week High 
l Last Trade (With Time) 
l1 Last Trade (Price Only) 
l2 High Limit 
l3 Low Limit 
m Day's Range 
m2 Day's Range (Real-time) 
m3 50-day Moving Average 
m4 200-day Moving Average 
m5 Change From 200-day Moving Average 
m6 Percent Change From 200-day Moving Average 
m7 Change From 50-day Moving Average 
m8 Percent Change From 50-day Moving Average 
n Name 
n4 Notes 
o Open 
p Previous Close 
p1 Price Paid 
p2 Change in Percent 
p5 Price/Sales 
p6 Price/Book 
q Ex-Dividend Date 
r P/E Ratio 
r1 Dividend Pay Date 
r2 P/E Ratio (Real-time) 
r5 PEG Ratio 
r6 Price/EPS Estimate Current Year 
r7 Price/EPS Estimate Next Year 
s Symbol 
s1 Shares Owned 
s7 Short Ratio 
t1 Last Trade Time 
t6 Trade Links 
t7 Ticker Trend 
t8 1 yr Target Price 
v Volume 
v1 Holdings Value 
v7 Holdings Value (Real-time) 
w 52-week Range 
w1 Day's Value Change 
w4 Day's Value Change (Real-time) 
x Stock Exchange 
y Dividend Yield 
+0

[Эта страница] (http://www.gummy-stuff.org/Yahoo-data.htm) имеет специальные теги таблицы, которые можно использовать в URL-адресе. – user443854

+9

. Большая проблема с получением данных из Yahoo или любого другого онлайн-сервиса заключается в том, что вы не получаете запасы из списка, так что вы быстро столкнетесь с уклоном от выживших. Лучше, чем Эрик Х. или мой совет, и идите прямо к CSI. – lukebuehler

+0

Эта страница использовала специальные теги таблицы, которые можно использовать в URL-адресе ... «Yahoo утверждает, что использование и распространение инструмента и содержимого, расположенного на ..., представляет собой нарушение разделов 6, 12 и 18 Условий обслуживания (среди других положений), порождает недобросовестную конкуренцию и побуждает других нарушать Условия предоставления услуг ... Посредством вмешательства в эти договорные и деловые отношения вы потенциально наносите ущерб способности других пользователей получать преимущества услуг, предоставляемых на сайте Yahoo Finance ». Thumbs down on Yahoo –

15

Введение:
От Yahoo вы можете получить EOD (конец дня) histo ричные цены или цены в реальном времени. Цены EOD удивительно просты в загрузке. См. my blog для объяснения того, как получить данные и примеры кода C#.

Я в процессе написания «двигателя» передачи данных в режиме реального времени, который загружает и сохраняет цены в реальном времени в базе данных. Первоначально двигатель сможет загружать исторические цены от Yahoo и Interactive Brokers, и он сможет хранить данные в базе данных по вашему выбору: MS SQL, MySQL, SQLite и т. Д.Это с открытым исходным кодом, но я буду размещать больше информации о своем блоге, когда я буду ближе к его выпуску (через пару дней).

Другой вариант: eclipse trader ... он позволяет записывать исторические данные с зернистостью всего 1 минуту и ​​сохранять цены локально в текстовом файле. Он в основном загружает данные в режиме реального времени из Yahoo с 15-минутной задержкой. Поскольку я хотел получить более надежное решение, и я работаю над крупным школьным проектом, для которого нам нужны данные, я решил написать свой собственный механизм подачи данных (что я упомянул выше).

Пример кода:
Вот пример C# код, который демонстрирует, как загрузить данные в реальном времени:

public void Start() 
{ 
    string url = "http://finance.yahoo.com/d/quotes.csv?s=MSFT+GOOG&f=snl1d1t1ohgdr"; 
    //Get page showing the table with the chosen indices 
    HttpWebRequest request = null; 
    IDatabase database = 
     DatabaseFactory.CreateDatabase(
     DatabaseFactory.DatabaseType.SQLite); 

    //csv content 
    try 
    { 
     while (true) 
     { 
      using (Stream file = File.Create("quotes.csv")) 
      { 
       request = (HttpWebRequest)WebRequest.CreateDefault(new Uri(url)); 
       request.Timeout = 30000; 
       using (var response = (HttpWebResponse)request.GetResponse()) 
       using (Stream input = response.GetResponseStream()) 
       { 
        CopyStream(input, file); 
       } 
      } 
      Console.WriteLine("------------------------------------------------"); 
      database.InsertData(Directory.GetCurrentDirectory() + "/quotes.csv"); 

      File.Delete("quotes.csv"); 
      Thread.Sleep(10000); // 10 seconds 
     } 
    } 
    catch (Exception exc) 
    { 
     Console.WriteLine(exc.ToString()); 
     Console.ReadKey(); 
    } 
} 

База данных:
На стороне базы данных я использую OleDb подключение к CSV-файл для заполнения DataSet, а затем я обновляю свою фактическую базу данных через DataSet, это в основном позволяет сопоставить все столбцы из файла CSV, возвращенного из Yahoo, прямо на ваш базы данных (если ваша база данных не поддерживает пакетные вставки данных CSV, например SQLite). В противном случае вставка данных - это однострочный ... просто пакетная вставка CSV в вашу базу данных.

Вы можете прочитать больше о форматировании URL здесь: http://www.gummy-stuff.org/Yahoo-data.htm

+0

epic Мне жаль, что я не нашел это раньше. – ojblass

+0

Это действительно предоставляет данные в реальном времени, как вы предполагали? На странице у него есть этот параметр «k1», но в прошлый раз, когда я проверил, он все еще имеет некоторую задержку. – Antony

+0

@ Антоний в большинстве случаев есть какая-то задержка, так что это зависит только от того, насколько вы терпимы к задержкам. Yahoo действительно говорит, что они предоставляют данные в режиме реального времени, но это, конечно, не для всех тикеров. Тикеры, которые не в режиме реального времени, задерживаются на 15 минут. Даже если вы приобретете совместно используемый сервер на бирже, все равно будет «немного задержки» **. Итак, какую задержку вы готовы терпеть? – Kiril

9

NASDAQ предлагает 10 лет исторических данных EOD для каждого символа

http://www.nasdaq.com/aspx/historical_quotes.aspx?symbol=AAPL&selected=AAPL

Вы можете автоматизировать процесс загрузки этих данных.

+0

Хороший источник. Они изменили систему запросов, так что теперь все запросы обрабатываются с помощью JS (например, http://www.nasdaq.com/symbol/aapl/historical). Есть ли способ автоматизировать его? –

+0

Да, его можно автоматизировать. Вам нужно использовать сниффера, такого как Telerik, и посмотреть, как данные получены (через POST). До тех пор, пока вы правильно отправляете переменные post, вы должны получить данные. –

+0

Возможно ли это? Он содержит какие-либо внутридневные данные? – Lee

3

Почему бы не создать поддельный фондовый рынок с броуновским движением?

Много ресурсов для этого. Легко реализуется.

http://introcs.cs.princeton.edu/java/98simulation/

+1

:-), чтобы сделать его более реальным, вам нужно будет создать [Фракционное броуновское движение] (http://en.wikipedia.org/wiki/Fractional_Brownian_motion), и даже это не совсем реально, поскольку наиболее реалистичные данные на основе фальшивого рынка вам также нужно иметь фрактальный размер времени ... иглы, чтобы сказать, что это становится довольно сложным. Лучше просто купить реальные рыночные данные ... – lukebuehler

+0

Это также не помогает движению запаса не является логнормальным :) –

3

Я использую eodData.com. Его довольно прилично оценены. За 30 долларов в месяц вы получаете 30 дней 1,5 и 60 минутных баров для всех обменов в США и 1 год данных EOD для большинства других.

8

Для смещения Выживаемости свободных данных, единственный надежный источником я нашел QuantQuote (http://quantquote.com)

данные приходят в минуте, второй, или отметьте разрешение, ссылку на их historical stock data.

Было предложение для кибота выше. Я бы сделал быстрый поиск Google, прежде чем покупать у них, вы найдете много сообщений like this с предупреждениями о проблемах с качеством данных kibot. Это также говорит о том, что их предположительно свобода выживания бесплатно sp500 имеет только 570 символов в течение 14 лет. Это почти невозможно, SP500 изменения по 1-2 символам в месяц ....

+3

kibot имеет только 3 бесплатных символа. остальные должны платить!он просто делает рекламу – bouncingHippo

+0

бесплатные дневные данные quantquote недокументированы: в файлах csv нет заголовков столбцов, и никакой документ вообще отсутствует. – user443854

+0

есть документация, формат в основном такой же, как и их набор данных с минимальным разрешением. – user788171

5

Mathematica nowoadays также предлагает доступ к текущим и историческим ценам на акцию, см http://reference.wolfram.com/mathematica/ref/FinancialData.html , если вам посчастливиться иметь копию Это.

+5

самый маленький шаг времени - «день» –

+0

ha спасибо, что сообщили мне - это действительно не так здорово ... –

205

Позвольте мне добавить мои 2 ¢, это моя работа по получению хороших и чистых данных для хедж-фонда, я видел довольно много фидов данных и поставщиков исторических данных. Это в основном данные о запасах США.

Для начала, если у вас есть деньги, не заморачиваться с загрузкой данных из Yahoo, получить конец данных дня прямо из CSI data, это где Yahoo получает свои данные EOD, а AFAIK. У них есть API, в котором вы можете извлечь данные в любой формат. Я думаю, что ежегодная подписка на данные составляет несколько долларов за доллар.

Основная проблема с загрузкой данных из бесплатного сервиса заключается в том, что вы получаете только запасы, которые все еще существуют, это называется Survivorship Bias и может дать неверные результаты, если вы посмотрите на многие акции, потому что вы будете включать только те, которые сделал это до сих пор, а не те, которые были исключены из списка.

Для игр с некоторыми внутридневными данными я хотел бы посмотреть в IQFeed, они предоставляют несколько интерфейсов API для извлечения исторических данных, хотя они в основном наряд в реальное время каналов. Но здесь есть немало вариантов, некоторые брокеры даже обеспечивают загрузку исторических данных через свои API-интерфейсы, поэтому просто выбирайте свой яд.

НО, как правило, все эти данные не очень чисты, после того, как вы действительно начнете тестирование, вы увидите, что некоторые запасы отсутствуют или отображаются как два разных символа, или разброс запасов не учитывается должным образом и т. Д. И тогда вы понимаете, что необходимы исторические данные о дивидендах, и поэтому вы начинаете работать в кругах, паттируя данные вместе из 100 различных источников данных и так далее. Поэтому, чтобы начать с «дискового» фида данных, вы будете делать, но как только вы запустите более полные backtests, вы можете столкнуться с проблемами в зависимости от того, что вы делаете. Если вы просто посмотрите, скажем, на акции S & P 500, это не будет проблемой, хотя и будет работать «дешевый» внутридневной канал.

То, что вы не найдете, является бесплатным внутридневным данным. Я имею в виду, что вы можете найти несколько примеров, я уверен, что где-то 5 лет данных по типу MSFT, плавающих вокруг, но это не приведет вас к очень далеко.

Тогда, если вам нужен реальный материал (уровень II портфель заказов, все клещи, как они случились на всех биржах) один «доступным», но отличный вариант Nanex. Они действительно отправят вам диск с терабайтами данных. Если я правильно помню его около 3 тыс. Долларов США в год данных. Но поверьте мне, как только вы поймете, как сложно получить хорошие внутридневные данные, вы не будете думать, что это очень много денег.

Не препятствовать вам, но получить хорошие данные сложно, так сложно на самом деле, что многие хедж-фонды и банки тратят сотни тысяч долларов в месяц, чтобы получить данные, которым они могут доверять. Опять же, вы можете начать где-то, а затем идти оттуда, но приятно видеть это в контексте.


Редактировать: Ответ выше из моего собственного опыта. This write-up from Caltech о доступных источниках данных даст больше информации, и особенно рекомендует QuantQuote.

+15

+1 для указания трех уровней данных (hist, intra, level II) и для проницательных комментариев к ответам других (полнота, чистота, размер хранилища, наборы данных ...) –

+1

Я многому научился в области моих проблема из этого. Определенно стоит больше, чем 5c: P – Inversus

+1

Nanex - это, по сути, Pied Piper каналов данных :-) – lukebuehler

4

Yahoo - это самый простой способ получить предварительные данные. Ссылка, описанная в ответе eckesicle, может быть легко использована в коде python, но вам сначала нужны все тикеры. Я бы использовал NYSE для этого примера, но это также можно использовать для разных обменов.

Я this wiki page, чтобы загрузить все линеечки компании со следующим сценарием (я не очень талантливый Pythonist, извините, если этот код не очень эффективно):

import string 
import urllib2 
from bs4 import BeautifulSoup 

global f 

def download_page(url): 
    aurl = urllib2.urlopen(url) 
    soup = BeautifulSoup(aurl.read()) 

    print url 

    for row in soup('table')[1]('tr'): 
     tds = row('td') 
     if (len(tds) > 0): 
      f.write(tds[1].string + '\n') 


f = open('stock_names.txt', 'w') 

url_part1 = 'http://en.wikipedia.org/wiki/Companies_listed_on_the_New_York_Stock_Exchange_' 
url = url_part1 + '(0-9)' 
download_page(url) 

for letter in string.uppercase[:26]: 
    url_part2 = letter 
    url = url_part1 + '(' + letter + ')' 

    download_page(url) 

f.close() 

Для загрузки каждого тикер я использовал другой очень похож сценарий:

import string 
import urllib2 
from bs4 import BeautifulSoup 


global f 

url_part1 = 'http://ichart.finance.yahoo.com/table.csv?s=' 
url_part2 = '&d=0&e=28&f=2010&g=d&a=3&b=12&c=1996&ignore=.csv' 

print "Starting" 

f = open('stock_names.txt', 'r') 
file_content = f.readlines() 
count = 1; 
print "About %d tickers will be downloaded" % len(file_content) 

for ticker in file_content: 
    ticker = ticker.strip() 
    url = url_part1 + ticker + url_part2 

    try: 
     # This will cause exception on a 404 
     response = urllib2.urlopen(url) 

     print "Downloading ticker %s (%d out of %d)" % (ticker, count, len(file_content)) 

     count = count + 1 
     history_file = open('C:\\Users\\Nitay\\Desktop\\Historical Data\\' + ticker + '.csv', 'w') 
     history_file.write(response.read()) 
     history_file.close() 

    except Exception, e: 
     pass 

f.close() 

Обратите внимание, что основной недостаток этого метода является то, что различные данные для разных компаний - компаний, которые не имеют данных, существующие в указанных датах (обновления) получат вас 404 страница.

Также имейте в виду, что этот метод хорош только для предварительных данных - Если вы действительно хотите проверить ваш алгоритм, вы должны заплатить немного и использовать доверенный поставщик данных, как CSIData или другие

+0

Включение глобальной декларации внутри глобального пространства имен необязательно, однако, хороший ответ. –

+1

Обслуживание вниз ... – hyprfrcb

6

Позвольте мне добавить источник Я только что обнаружил, нашел here.

Имеет множество исторических данных о запасах в формате csv и был собран Энди Павло, который, согласно своей домашней странице, является «доцентом кафедры информатики Университета Карнеги-Меллона».

+0

Это отлично подходит для тех, кто просто ищет беспорядок с достаточно большим набором исторических данных фондового рынка. –

+1

Веб-страница вниз ... – hyprfrcb

+0

http://www.cs.cmu.edu/~pavlo/datasets/stocks/ – miodf