На связи команда Тинькофф Инвестиций. В этой статье разберем, как клиенты с минимальными навыками программирования создают торговых роботов. Базой будет API брокера Тинькофф Инвестиций — Tinkoff Invest API. Добро пожаловать на борт! 

Немного вводных

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

 Алгоритмических торговых стратегий на бирже много, но не все подходят для Тинькофф. Перечислим основные, чтобы картина была полной.

По типу исполнения:

— Ручное. В этом случае алгоритм создает торговые сигналы на покупку или продажу инструмента, а исполнением сигналов занимается сам клиент.

— Полуавтоматическое. Алгоритм и создает, и исполняет торговые сигналы, но запрашивает у клиента подтверждение сделки.

— Автоматическое, при котором система не только создает сигналы, но и имплементирует их, проверяя балансы клиента, объем доступных средств и прочее.

По частоте торговли и количеству выставляемых торговых поручений:

— Долгосрочные алгоритмические стратегии, рассчитанные на подбор инструментов на основе фундаментальных факторов, решения по которым принимаются на период от суток.

— Среднечастотные торговые стратегии — принимающие решения на уровне минутных фреймов.

— Высокочастотная торговля простыми алгоритмами (HFT) с минимальными задержками.

По типу алгоритма:

— Алгоритмы, построенные на техническом анализе: пересечения различных индикаторов, скользящие средние, RSI и многие другие.

— Алгоритмы, построенные на стакане. Стакан — биржевой массив лимитных заявок на покупку или продажу финансового инструмента. Сюда, например, относятся алгоритмы, построенные на уменьшении спреда, — алгоритмы маркетмейкинга.

— Алгоритмы, основанные на фундаментальных факторах и предназначенные для периодической разбалансировки портфеля.

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

— Арбитражные алгоритмы — построенные на рыночной неэффективности в случаях, когда одна и та же бумага торгуется на разных биржах или в разных валютах.

— Алгоритмы-помощники. Например, клиенту надо купить бумагу по равномерному интервалу цены или равномерно по объему — в таком случае автоматизация позволит создать множество торговых поручений одним действием.

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

Пара слов про API

Тинькофф Инвестиции осуществляют pre-trade контроль рисков. Это значит, что сначала на стороне брокера проверяется достаточность средств для исполнения поручения и позиций для покупки или продажи, соответствие цен и после этого заявка уходит на биржу. 

Плюс такого подхода — нельзя купить «лишних» бумаг и получить margin call. Но минус — дополнительные задержки при исполнении ордеров, которые в среднем составляют 200—400 мс. 

 Еще у брокера есть ограничение на количество выставленных заявок в единицу времени — на момент написания статьи ограничение составляет 300 поручений в минуту. Поэтому HFT-стратегии, требующие минимальных задержек и большого количества поручений, скорее не подходят для работы через Tinkoff API.

 На инвестиционном рынке для интеграции с брокерами есть два подхода в организации API:

  • Часть брокеров позволяет клиентам подключаться через протоколы FIX/FAST, но для этого робот должен поддерживать такой протокол. В Open Source есть ряд библиотек, разработанных энтузиастами, но многие из них плохо поддерживаются.

  • Некоторые брокеры предоставляют современные открытые API, не требующие дополнительных библиотек или ПО. Они работают на любых языках программирования, и к ним относятся Тинькофф Инвестиции.

Коротко про протокол

При разработке API брокер придерживался требований простоты, чтобы работать с API из любого языка программирования, без установки дополнительного ПО. Теперь Tinkoff Invest API поддерживает три современных протокола:

  • Основной — gRPC, документация которого есть в открытом доступе. Одна из ключевых особенностей протокола — bidirectional-stream. Это особый режим работы, при котором открывается одно стрим-соединение, отправлять сообщения в него могут оба участника взаимодействия. Такой режим позволяет более гибко и оперативно реализовать работу. Например, bidirectional-stream сервиса котировок в одном и том же соединении принимает сообщения об изменении статуса подписки и предоставляет различные виды биржевой информации — стаканы, свечи, поток обезличенных сделок и прочее. 

  • Протокол gRPC-web, который подходит для решений, работающих из браузера на основе JavaScript.

  • И классический REST-совместимый openAPI протокол, доступный через Swagger.

Как создавать торгового робота

При разработке торгового робота есть два подхода: можно самостоятельно написать робота или использовать готовый фреймворк для алготрейдинга, например OsEngine на языке С# или Debut.

 В Тинькофф весной прошел конкурс торговых роботов, в номинантах — интересные работы на разных языках программирования, которые можно взять за основу:

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

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

 Если при проверке торговая гипотеза показала стабильный плюс, обгоняющий рынок, пора переходить к тестированию стратегии на песочнице.

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

 Для тестирования стратегии на песочнице необходимо зарегистрировать «песочный» счет, пополнить его и запустить свой алгоритм. После успешного теста на песочнице рекомендуем переходить на реальную торговлю.

 Вот несколько советов, которые могут пригодиться при создании робота:

— Брокер оперирует основными сущностями — это заявка, позиция и операция.

Заявка — торговое поручение клиента, направленное на биржу с целью покупки или продажи инструмента.

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

Операция — запись об исполнении заявки клиента. Она может быть как исполнена, так и отменена. Исполненные операции приводят к изменению позиций.

Брокер — не строго консистентная система, и изменения заявок, позиций и операций могут произойти в разное время. Про порядок исполнения написано на GitHub — Как ускорить работу с биржей — TINKOFF INVEST API, поэтому рекомендуем проверять исполненность заявок по факту изменения статуса заявки и объема позиции.

 — Стоимость некоторых ценных бумаг на бирже определяется не в валюте или рублях, а в пунктах цены, рекомендуем сразу учесть это в обработке котировок. Делимся таблицей возвращаемых типов значений для различных методов и параметров.

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

— В API есть ограничения на количество запросов в минуту. Количество запросов, оставшихся доступными в текущей минуте, и время ожидания до следующей минуты, если лимит запросов исчерпан, доступны в HTTP-заголовках ответа сервера.

 

— В ответ на каждый запрос в API в HTTP-заголовках ответа приходит уникальный идентификатор запроса — trackingID. Рекомендуем вести полный лог работы торгового робота и писать в него в том числе все вызовы API, включая параметры и tracking. Это поможет разобраться в проблеме или написать запрос в техподдержку.

Вместо заключения

Вместо выводов хотим поделиться доходностью наших алготрейдеров: 

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

Есть вопросы?

У нас самое большое opensource-сообщество среди российских брокеров, преимущественно собранное на GitHub. Написать по всем вопросам, пожеланиям или репортнуть баг можете в issue. 

Еще есть несколько каналов в Телеграме:

Всем профитных роботов!

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


  1. transoceanic
    16.11.2022 11:55

    А топ-100 на январь 2021 тот же что и на январь 2022? Другими словами: если это скользящий топ, то это средняя температура по больнице, но если это одни и те же люди (стратегии), то есть повод для зависти


    1. AlexanderVolkovInvest Автор
      16.11.2022 14:00

      Статистика доходности собиралась как прибыльность скользящего топа клиентов по обороту, а не по прибыли. Месяц к месяцу сам топ немного меняется. Небольшая "ошибка выжившего" здесь есть, но в целом цифры показательны. Попробуем подготовить усредненную статистику прибыльности всех пользователей api)