О технических особенностях алгоритмической торговли с использованием API

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

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

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

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

Ручное взаимодействие может быть удобно, если количество сделок относительно невелико. Например, если я хочу однажды купить Bitcoin (или акции Microsoft) и держать их на долгий срок, оптимальный вариант - воспользоваться веб-интерфейсом или мобильным приложением.

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

Многие криптобиржи предлагают API-доступ к своим сервисам. По моему опыту, примерно 110 из 220 активных в настоящее время бирж (согласно coinmarketcap) в том или ином виде поддерживают публичные API. То есть вы можете автоматизировать торговлю на половине имеющихся криптобирж (но не на всех).

Встречаются следующие виды API:

Почти все биржи, предлагающие доступ к API, поддерживают REST, но функциональность может сильно различаться от площадки к площадке. Обычно предлагается базовый функционал операций (котировки, ордера, балансы). Что-то менее востребованное может быть доступно, или не быть. Бывают ситуации, когда по REST API можно выставить ордер, а отменить нельзя.

Многие биржи, помимо REST, также поддерживают протокол WebSocket. Вероятно, поскольку работа с этой технологией не такая простая и понятная, как с REST, функциональность бывает довольно ограниченной. Котировки по WebSocket, как правило, доступны, но остальной функционал присутствует далеко не всегда. С другой стороны, на многих биржах через WebSocket API бывает реализован весь набор возможностей площадки. В редких случаях функционал WebSocket API бывает шире, чем REST.

Протокол FIX берет свое начало в NASDAQ и широко используется на фондовых рынках. Есть криптобиржи, которые поддерживают этот протокол, но их очень мало, поэтому FIX мы рассматривать не будем.

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

Наличие документации на API

Обычно, если у биржи есть публичный API, то можно найти ссылку на его документацию на сайте, чаще всего в подвале. Однако  в некоторых случаях ссылки может и не быть вовсе, что не обязательно означает отсутствие публичного API. В таком случае помогает поиск в интернете по словам “название биржи” + API. Ещё документацию можно поискать на GitHub - если она в принципе существует, то скорее всего найдётся там.

Некорректная документация API

Бывает, что официальная документация не очень ясна или запутана. Примеры из моего опыта:

Возможные решения:

Документация в порядке, но сервер присылает что-то странное в ответ

Примеры:

Возможные решения:

Размещая ордер, вы получаете в ответ «Этот тикер не поддерживается API»

Вероятно, это означает, что вы пытаетесь торговать новым инструментом, и хотя торговля полностью работает через веб-сайт, этот инструмент ещё не добавлен в API. Я пишу “вероятно”, потому что иногда встречался с тем, что сообщение об ошибке содержало некорректное описание проблемы, и причина ошибки была в чём-то другом.

Возможные решения:

Соединение WebSocket рвётся с ошибкой 1006

Несмотря на то, что ошибка 1006 в RFC четко определена как зарезервированная на стороне клиента, на практике она часто используется для разрыва соединения со стороны сервера. Возможными причинами могут быть:

Возможные решения:

Заключение

Последние 5 лет я активно занимаюсь алгоритмической торговлей. Возникло желание систематизировать и описать накопленный опыт. В этой статье мы углубились в некоторые технические аспекты алготрейдинга через API. Мы рассмотрели различные типы API и обсудили технические проблемы, которые могут возникнуть при взаимодействии с криптобиржами. В следующих статьях я планирую рассказать о нескольких конкретных проектах, и об особенностях поведения бирж.

Буду рад обсудить технические подробности, а также особенности автоматизации работы с конкретными биржами.

@chernish2
11.07.2023 14:48 UTC
Первоисточник

Комментарии

@xxx202
12.07.2023 07:28 UTC
+1

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

1.       Взаимодействие с биржей непосредственно или с брокером? Поскольку у Мосбиржи есть свой API, к примеру, но чтобы я подключался напрямую, там это стоит отдельных денег и больше подходит для юр.лица, чем для обычного физического. Если же используется доступ к брокеру (посреднику), то тут у каждого свой подход.

2.       Можно же еще настроить взаимодействие через терминал. Опять же на примере Мосбиржи, многие брокеры дают QUIK, который многие мамкины трейдеры критикуют :D а там есть свои возможности для автоматизации.

3.       Если не ограничиваться локальным рынком, то как с терминалом того же Interactive Brokers взаимодействовать или подобными.

@chernish2
13.07.2023 07:14 UTC
0

Лично я имею опыт взаимодействия с API МосБиржи через брокера Тинькофф. Напрямую не работал.
Через терминалы можно подключаться, это факт. Я так делал с MetaTrader и cTrader, про QUICK не скажу.
У IBKR есть отличное API на разные языки (точно Java и Python, возможно что-то ещё). Я работаю с питоновским вариантом.

@Adgh
12.07.2023 12:50 UTC
+1

@chernish2,
Встречаются следующие виды API:

у Тинькова любопытная реализация на gRPC

@chernish2
13.07.2023 07:15 UTC
0

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

@MANAB
13.07.2023 05:55 UTC
-1

От чела, торгующего 5 лет, странно видеть 2 статьи про алготрейдинг с "водой" - почти никак к алготрейдингу не относящиеся.