Прежде чем перейти к статье, хочу вам представить, экономическую онлайн игру Brave Knights, в которой вы можете играть и зарабатывать. Регистируйтесь, играйте и зарабатывайте!
Здравствуйте. Я работаю программистом, и у меня есть хобби — изучение фондового рынка. Фондовый рынок с точки зрения программиста — набор данных, которые надо сперва получить, а потом проанализировать. В этой статье я расскажу о первой части квеста — как данные получить. Статья не претендует на полноту исследования, а лишь описывает мой субъективный опыт, полученный за последние пару лет.
Условия задачи: меня интересуют акции американских компаний на дневном таймфрейме, чтобы каждое утро мой робот присылал мне на почту автоматический отчёт о вчерашней динамике рынка. Если будут и другие рынки с другими таймфреймами — хорошо. Платить деньги за данные мне пока не хочется.
Отдельно замечу, что я никаким образом не аффилирован ни с одной из организаций, упомянаемых в статье. Я просто ищу пути решения своих задач, и делюсь опытом.
Как получить данные котировок бесплатно? Мне известны следующие возможности:
Открытое 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, сделают другую вёрстку), так и юридического свойства.
Буду признателен за обсуждение материала. Если кто-то знает неизвестные мне ходы в получении интересующих данных — милости прошу в комментарии!
Условия задачи: меня интересуют акции американских компаний на дневном таймфрейме, чтобы каждое утро мой робот присылал мне на почту автоматический отчёт о вчерашней динамике рынка. Если будут и другие рынки с другими таймфреймами — хорошо. Платить деньги за данные мне пока не хочется.
Отдельно замечу, что я никаким образом не аффилирован ни с одной из организаций, упомянаемых в статье. Я просто ищу пути решения своих задач, и делюсь опытом.
Как получить данные котировок бесплатно? Мне известны следующие возможности:
- Открытое 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, сделают другую вёрстку), так и юридического свойства.
Буду признателен за обсуждение материала. Если кто-то знает неизвестные мне ходы в получении интересующих данных — милости прошу в комментарии!