На связи команда Тинькофф Инвестиций. В этой статье разберем, как клиенты с минимальными навыками программирования создают торговых роботов. Базой будет 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 и Тинькофф;
Всем профитных роботов!
transoceanic
А топ-100 на январь 2021 тот же что и на январь 2022? Другими словами: если это скользящий топ, то это средняя температура по больнице, но если это одни и те же люди (стратегии), то есть повод для зависти
AlexanderVolkovInvest Автор
Статистика доходности собиралась как прибыльность скользящего топа клиентов по обороту, а не по прибыли. Месяц к месяцу сам топ немного меняется. Небольшая "ошибка выжившего" здесь есть, но в целом цифры показательны. Попробуем подготовить усредненную статистику прибыльности всех пользователей api)