
На связи команда Тинькофф Инвестиций. В этой статье разберем, как клиенты с минимальными навыками программирования создают торговых роботов. Базой будет 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.
Еще есть несколько каналов в Телеграме:
-
канал с анонсами;
-
чат по общим вопросам работы API и Тинькофф;
Всем профитных роботов!
ссылка на оригинал статьи https://habr.com/ru/company/tinkoff/blog/699624/
Добавить комментарий