Обзор бесплатных источников котировок фондового рынка

Здравствуйте. Я работаю программистом, и у меня есть хобби — изучение фондового рынка. Фондовый рынок с точки зрения программиста — набор данных, которые надо сперва получить, а потом проанализировать. В этой статье я расскажу о первой части квеста — как данные получить. Статья не претендует на полноту исследования, а лишь описывает мой субъективный опыт, полученный за последние пару лет.

Условия задачи: меня интересуют акции американских компаний на дневном таймфрейме, чтобы каждое утро мой робот присылал мне на почту автоматический отчёт о вчерашней динамике рынка. Если будут и другие рынки с другими таймфреймами — хорошо. Платить деньги за данные мне пока не хочется.

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

Как получить данные котировок бесплатно? Мне известны следующие возможности:


Открытое REST API


Alphavantage. Регистрация простейшая — вводим свой email, сразу получаем ключ. Никаких проверок нет, можно подряд ввести 20 разных адресов и получить 20 валидных ключей. Однако есть лимит на обращения по API: не более 5 в минуту, не более 500 в сутки. При этом простой трюк с подстановкой разных ключей на одном IP (исчерпали лимит, поменяли ключ) работает не всегда. Таймфреймы здесь отдаются от 1 минуты до 1 месяца, но воспользоваться этим для ежедневных обновлений большого количества тикеров не получится (из-за ограничений на количество запросов). Зато я использую этот сервис для получения дополнительной информации по тикерам (описание компаний здесь довольно подробное).

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

Ещё есть Finnhub, уже не помню, почему отказался от его использования на ранних стадиях изучения вопроса. Что-то там было не то.

REST API брокера


Exante. Этот брокер мне очень даже нравится. У них довольно вменяемый торговый терминал, реализованный на Java, и работающий как на Windows, так и на Linux. В терминале не только акции, но и ETF, опционы, криптовалюты, фьючерсы, облигации и FOREX. REST API доступен после регистрации демо-счёта. Вполне вменяемая документация и поддержка, которая реагирует оперативно. Я говорю — реагирует, сами вопросы иногда решаются сразу, иногда через несколько дней, а иногда вообще не решаются. Но ведь у меня бесплатный демо-счёт, я пользуюсь их API, и мне ещё помогают решать вопросы! REST API даёт доступ к большому количеству бирж по всему миру, включая OTC. Таймфреймы от 1 минуты до 1 дня (сгенерировать недельные свечки из дневных — небольшая проблема). Если очень попросить, могут даже включить FIX API (он предусмотрен для платных аккаунтов, но поддержка очень отзывчива, и обычно идёт навстречу, например, мне открыли несколько демо-счётов вместо одного). Я пользовался именно этим API несколько месяцев, но потом возникли проблемы — сервер несколько дней подряд возвращал разные ошибки, поддержка ничего вменяемого не отвечала, и я от них ушёл. Есть и ещё одно неудобство — API отдаёт котировки не только основной торговой сессии, но по некоторым инструментам и пре/пост-маркета, то есть до или после торговой сессии, и по выходным дням (видимо, в выходные на некоторых биржах бывает премаркет). Как это отфильтровать по-простому — непонятно, а без фильтрации получаются неадекватные рыночной реальности графики. Так что у меня этот вариант в резерве, на всякий случай. Если захотите открыть у них реальный счёт, имейте в виду, что минимальный депозит составляет $10 000.

Tinkoff. Я являюсь клиентом этого банка уже много лет, поэтому совершенно естественно было воспользоваться их API. Документация вполне человеческая, доступна песочница с любым балансом по любым активам, и моментальным исполнением сделок по любой цене. Инструменты такие же, как
в Тинькофф инвестициях. Таймфреймы от 1 минуты до месяца, в описании инструментов отдаётся и ISIN, и FIGI (что очень удобно). Сейчас использую именно этот API для своей аналитики. Из неприятного — API отдаёт некоторые давно неторгуемые тикеры, приходится их вычищать вручную (вот на эту тему issue на гитхабе). К тому же история свечек по любому инструменту — не более 1 года (если хочется построить график MSFT за последние 10 лет — не получится). Встречаются и другие шероховатости, но команда разработчиков доступна к прямому диалогу (что приятно).

API торгового терминала


Торговые терминалы я делю на три части — Metatrader, cTrader, и кастомные (тот же Exante, или весьма любопытный Galt and Taggart от Банка Грузии — интересующимся рекомендую изучить). Возиться с кастомными терминалами смысла я не вижу (из-за немасштабируемости получаемого технического решения), поэтому рассмотрим лишь Metatrader и cTrader.

Metatrader 5 — самый популярный терминал для контрактов CFD на Forex, но контракты CFD бывают и на акции, и нефть, и криптовалюты. У терминала есть свой язык программирования MQL5 (фактически это усеченный диалект C++). MQL5 предоставляет множество различных функций, в том числе можно перебирать все имеющиеся у конкретного брокера символы, и загружать по ним котировки, сохраняя их в базу данных (или CSV). То есть тут всё зависит от брокера — какие у него будут тикеры, отдаёт ли он на демо-счёте котировки в реальном времени или с задержкой, и т.д. Ещё есть Metatrader4, там язык MQL4, по факту C.

cTrader. Этот терминал мне нравится больше всех других удобством интерфейса, но он сравнительно молодой, его используют не так много брокеров, а найти брокера с CFD на акции в cTrader — задача не из лёгких. Но документация к нему тоже есть, язык программирования — C#, на форуме техподдержки отвечают обычно в течение дня. Правда на большинство моих вопросов ответ один — такая возможность в cTrader пока не реализована.

Экзотические варианты


В эту категорию попадает, например, Tradingview. Это мой любимый сервис в финансовой сфере, там есть решительно всё, что мне нужно, под одной крышей. Но у него совсем нет API. Если бы было возможно получать данные из этого сервиса прямым и понятным способом, я бы точно больше ничего не рассматривал. Но прямого способа нет. Экзотические варианты тут могут быть такие (в теории):


Минус всех этих вариантов очевиден — неофициальный доступ может повлечь проблемы как технологического (сменят API, сделают другую вёрстку), так и юридического свойства.

Буду признателен за обсуждение материала. Если кто-то знает неизвестные мне ходы в получении интересующих данных — милости прошу в комментарии!
@chernish2
24.02.2021 16:51 UTC
Первоисточник

Комментарии

@dadgo
24.02.2021 12:08 UTC
+2
А варианты забирать данные у биржи а не посредников не рассматриваются?
Тут вот гугл сразу подкидывает даже уже реализованный вариант для мосбиржи и NASDAQ github.com/nerevar/stock_prices
@chernish2
24.02.2021 12:17 UTC
+1
Идея хорошая, но торговля всегда происходит через конкретного брокера. У разных брокеров котировки могут различаться (незначительно). Ну и потом, по Вашей ссылки — краулер, а не официальное API.
Но идея работать напрямую с API бирж мне нравится, спасибо.
NASDAQ вообще по FTP много чего отдаёт.
24.02.2021 13:09 UTC
0

Тула по ссылке для moex использует официальный REST API ISS сервера Московской биржи, для NASDAQ используется Alpha Vantage.

24.02.2021 13:11 UTC
+1
у oanda есть хорошее рест апи пробовали?
24.02.2021 13:16 UTC
0
Спасибо, добавил в закладки, буду изучать.
@iroln
24.02.2021 13:10 UTC
0
Ещё есть Finnhub, уже не помню, почему отказался от его использования на ранних стадиях изучения вопроса. Что-то там было не то.

И это нынче называется "обзор"?

@AndreySu
24.02.2021 15:31 UTC
0
Может есть информация о том где получать релтайм тики, а не только M1 чарты?
@iroln
24.02.2021 16:18 UTC
0

Бесплатно вряд ли, а так, например, для US markets polygon.io

@chernish2
24.02.2021 18:07 UTC
0
Конечно. Выбираете брокера, который на демо-счёте отдаёт данные в реальном времени, ставите Метатрейдер, и вперёд. Я же про это написал.
25.02.2021 06:54 UTC
0
Вы написали про экспорт чартов с барами из метатрейдера, это его стандартная функциональность. А вы пробовали при этом на MQL писать код, который может в рилтайме выгружать данные куда то во вне? Подгружая при этом написанную самостоятельно dll с си-интерфейсом и так далее, при этом подписавшись на сотню инструментов и на такой нагрузке MT Terminal уже потребрляет не мало ресурсов системы. Это я еще не говорю о том что все это дело можно нормально запускать только на Windows (Wine не в счет).
Конечно всё это возможно, но хотелось бы что то проще.
25.02.2021 07:15 UTC
0
У меня друг под Windows так и делает — собирает в реальном времени тики. Правда, как я понимаю, там не сотни инструментов.
На криптобиржах обычно есть websocket, и там гонят риалтайм. С фондовым рынком — пока не знаю.
25.02.2021 08:14 UTC
0
Да, с криптовалютами на криптобиржах с этим проблем никаких нет.
14.03.2021 19:17 UTC
0
Кстати, вот обнаружил (но это — платное):
finnhub.io/docs/api/stock-candles (раздел websocket)
14.03.2021 19:21 UTC
0
23.03.2021 08:56 UTC
0
А вот в Тинькоффе, то есть для клиентов — бесплатно
tinkoffcreditsystems.github.io/invest-openapi/marketdata
@ruslaniv
25.02.2021 05:55 UTC
0
pandas прекрасно берет котировки из yahoo finance.
quandle достаточно большой объем данных предоставляет бесплатно, помимо котировок у них есть т.н. «экзотические» данные — отчеты по продажам домов, цены на редкоземельные металлы и тд.
@iroln
25.02.2021 13:30 UTC
0

quandl не предоставляет никаких бесплатных данных с 2018. Данные в Quandl wiki API больше не обновляются, если вы не в курсе.


As of April 11, 2018 this data feed is no longer actively supported by the Quandl community. We will continue to host this data feed on Quandl, but we do not recommend using it for investment or analysis.

.


pandas прекрасно берет котировки из yahoo finance

Во-первых, не прекрасно, а через костыли. Скрапперы с Yahoo finance не так давно сломались, все библиотеки, в том числе pandas_datareader отвалились. Во-вторых, качество данных из yahoo finance никогда не было хорошим. В-третьих, yahoo finance и quandl предоставляют только daily данные, intraday там нет.


Хотя вот по ссылке они пишут, что тянут данные с yahoo с granularity вплоть до 1 минуты.


The latest version of yfinance is a complete re-write of the libray, offering a reliable method of downloading historical market data from Yahoo! Finance, up to 1 minute granularity, with a more Pythonic way.