Источник исторических данных запаса

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

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

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

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

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

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

Ответ 1

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

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

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

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

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

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

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

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


Изменить: Ответ выше - из моего собственного опыта. Эта запись из Caltech о доступных фидах данных даст больше информации и особенно рекомендует QuantQuote.

Ответ 2

ЭТО ОТВЕТ НЕ ДОЛЖЕН ТОЧНО, КАК КОРМ YAHOO СДЕЛАЛСЯ ДЛЯ ОСНОВАНИЯ

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

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 Low
h   Day 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 Range
m2  Day 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 Value Change
w4  Day Value Change (Real-time)
x   Stock Exchange
y   Dividend Yield

Ответ 3

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

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

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

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

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

Ответ 4

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

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

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

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

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

Ответ 5

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

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

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

Ответ 7

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

Данные поступают в минуту, секунду или по тику, ссылаются на их исторические данные запаса.

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

Ответ 8

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

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

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

Ответ 9

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

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

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

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

Ответ 10

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

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

Ответ 12

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

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

Ответ 13

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

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

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()

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

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 или другие.

Ответ 14

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

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

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

Ответ 15

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

Ответ 16

Я бы выполнил crawl finance.google.com(для котировок) - или finance.yahoo.com.

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

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

Подробнее см. История цитат

Ответ 17

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

Ответ 18

Взгляните на API данных о прибылях и убытках Metergent Historical Securities - http://www.mergent.com/servius