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

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

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

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

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

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

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

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

  • REST

  • WebSocket

  • FIX.

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

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

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

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

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

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

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

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

  • Отсутствуют необходимые методы (например, есть метод получения свечей по тикеру, но нет метода получения списка тикеров)

  • Некоторые методы не имеют четкого описания параметров (например, в методе получения свечек не указан формат параметров типа Timestamp “from” и “to”)

  • Все методы имеют подробное описание, но вместо реального URL-адреса вы видите заглушку, не имеющую отношения к бирже (например, endpoint указан как https://openaipi.org)

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

  • Попробуйте найти официальные (от биржи) репозитории на GitHub с реализацией API. Если они доступны, изучение исходного кода может помочь

  • Попробуйте найти сторонние репозитории с реализацией API, там тоже могут быть подсказки

  • Посмотрите ccxt - это крупный проект с открытым исходным кодом, поддерживающий множество бирж. Он использует Python, JavaScript, C# и PHP, и может быть очень полезен

  • Если ничего не помогло, иногда можно угадать недостающую информацию, размышляя логически (пытаясь найти ответ на вопрос “а как оно должно быть?”), или путём перебора возможных вариантов (например, так можно подобрать формат для параметров Timestamp).

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

Примеры:

  • Непонятная или не документированная ошибка без каких-либо дополнительных пояснений (ERROR_42 - о чём это?)

  • В ответ получаете ОК, но запрошенные данные отсутствуют (например, запросили массив свечей, а получили в ответ сообщение “ОК” и вообще никаких свечей, и даже не пустой массив)

  • Пустая строка в качестве ответа (“”)

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

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

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

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

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

  • Придется подождать. Скорее всего, когда-нибудь они добавят этот тикер в API.

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

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

  • Отсутствие или некорректная реализация механизма ping-pong (или heartbeat) на стороне клиента

  • Вы пытаетесь получить слишком много данных, подписавшись на большое количество каналов (обычно такие лимиты не документируют, поэтому бывает непонятно, на что можно подписываться, а на что нет)

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

  • Корректно реализовать механизм ping-pong (реализации отличаются от биржи к бирже)

  • Если вы все делаете в соответствии с документацией, но сервер все равно время от времени вас отключает, можно настроить своего клиента переподключаться по факту обрыва соединения.

Заключение

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

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

Комментарии (5)


  1. xxx202
    12.07.2023 07:28
    +1

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

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

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

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


    1. chernish2 Автор
      12.07.2023 07:28

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


  1. Adgh
    12.07.2023 07:28
    +1

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

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


    1. chernish2 Автор
      12.07.2023 07:28

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


  1. MANAB
    12.07.2023 07:28
    -1

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