Условия задачи: меня интересуют акции американских компаний на дневном таймфрейме, чтобы каждое утро мой робот присылал мне на почту автоматический отчёт о вчерашней динамике рынка. Если будут и другие рынки с другими таймфреймами — хорошо. Платить деньги за данные мне пока не хочется.
Отдельно замечу, что я никаким образом не аффилирован ни с одной из организаций, упомянаемых в статье. Я просто ищу пути решения своих задач, и делюсь опытом.
Как получить данные котировок бесплатно? Мне известны следующие возможности:
- Открытое REST API — регистрируешься на сайте, получаешь ключ доступа, и можно работать.
- REST API брокера — открываешь у брокера демо-счёт, получаешь ключ доступа к API, можно работать.
- API торгового терминала — открыли демо-счёт, запустили терминал, выгружаем данные.
- Экзотические варианты.
Открытое 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. Если бы было возможно получать данные из этого сервиса прямым и понятным способом, я бы точно больше ничего не рассматривал. Но прямого способа нет. Экзотические варианты тут могут быть такие (в теории):
- Найти на гитхабе парсер (они там есть) и настроить под себя
- Запускать Tradingview внутри Selenium и вытаскивать данные
- Реверснуть мобильное приложение, вытащить оттуда схему API, и использовать её.
Минус всех этих вариантов очевиден — неофициальный доступ может повлечь проблемы как технологического (сменят API, сделают другую вёрстку), так и юридического свойства.
Буду признателен за обсуждение материала. Если кто-то знает неизвестные мне ходы в получении интересующих данных — милости прошу в комментарии!
dadgo
А варианты забирать данные у биржи а не посредников не рассматриваются?
Тут вот гугл сразу подкидывает даже уже реализованный вариант для мосбиржи и NASDAQ github.com/nerevar/stock_prices
chernish2 Автор
Идея хорошая, но торговля всегда происходит через конкретного брокера. У разных брокеров котировки могут различаться (незначительно). Ну и потом, по Вашей ссылки — краулер, а не официальное API.
Но идея работать напрямую с API бирж мне нравится, спасибо.
NASDAQ вообще по FTP много чего отдаёт.
iroln
Тула по ссылке для moex использует официальный REST API ISS сервера Московской биржи, для NASDAQ используется Alpha Vantage.
polearnik
у oanda есть хорошее рест апи пробовали?
chernish2 Автор
Спасибо, добавил в закладки, буду изучать.