Привет! На связи команда Тинькофф Инвестиций. В этой статье рассказываем про Tinkoff Invest API, объясняем, как написать робота на Python, и разбираем плюсы этого языка в сравнении с другими. А вместо заключения ловите гайд по созданию робота на примере работы победителя нашего конкурса Tinkoff Invest Robot Contest.
Почему Python
Когда хочется попробовать алготрейдинг, но нет глубоких знаний языков программирования, Python станет хорошим стартом. Этот язык самый популярный: через него исполняется более 8 миллионов запросов в сутки. Вдвое больше, чем у SDK на Java — второго по популярности.
Подключить робота к биржевой торговле можно через протоколы, зависящие от выбранного брокера:
Часть брокеров позволяет клиентам подключаться через протоколы FIX/FAST, но для этого робот должен поддерживать этот протокол. В open source есть ряд библиотек, разработанных энтузиаcтами, и многие из них поддерживаются авторами.
Некоторые брокеры предоставляют современные открытые API, не требующие дополнительных библиотек или ПО.
Tinkoff Invest API — это интерфейс для взаимодействия с торговой платформой Тинькофф Инвестиций
Наш интерфейс и большое комьюнити позволяют попробовать себя в алготрейдинге как опытным трейдерам, разработчикам, так и новичкам, которые только начинают путь в алготрейдинге и разработке. Можно написать своего торгового робота или использовать готовых роботов участников комьюнити.
В Tinkoff Invest API можно не только торговать, но и собирать данные для анализа. А еще есть песочница для регулировки и отладки стратегий на реальных котировках. Но обо всем по порядку.
Протокол и типы данных
Понять принципы структур и взаимодействие с ними помогает изучение протоколов и типов данных, используемых в API. Мы стараемся следовать рекомендациям Google и используем протоколы и типы данных, о которых расскажем ниже. Tinkoff Invest API поддерживает три протокола — gRPC, gRPC web и REST. Подробно об этом мы рассказывали в прошлой статье:
Через Tinkoff Invest API можно получить набор типов данных:
Текущие режимы торгов на бирже.
Список поручений других клиентов биржи на покупку и продажу — биржевой стакан.
Ленту сделок в режиме реального времени.
Биржевые свечи — исторические и текущие, в режиме реального времени. Свеча показывает, как менялась цена актива за определенный период. Это визуальное отображение цены открытия, закрытия, максимума и минимума и объема торгов за определенный промежуток, от минуты до суток.
Информацию по торговым инструментам — акциям, облигациям, фьючерсам, опционам, ETF и другим.
Данные о своих позициях, портфеле, списке операций, брокерском отчете и многое другое.
TINKOFF INVEST API позволяет выставить разные типы заявок. Мы собрали в документации описание зависимости рыночных или лимитных заявок от статуса торгов. Каждый тип заявки описали на сайте и дополнили примерами. Вот короткая справка.
Тейк-профит — стоп-приказ на продажу или покупку, когда стоимость ценных бумаг или валюты достигает выгодного трейдеру уровня.
Стоп-лосс — приказ на продажу или покупку, когда цена валюты или ценных бумаг начинает резко меняться не в пользу инвестора и нужно максимально уменьшить убыток.
Стоп-лимит — приказ на продажу или покупку, когда цена валюты или ценных бумаг начинает резко меняться не в пользу инвестора и нужно максимально уменьшить убыток. Работает только из приложения Тинькофф Инвестиций.
Стоп-маркет — приказ на продажу или покупку, когда цена валюты или ценных бумаг начинает резко меняться не в пользу инвестора и нужно максимально уменьшить убыток. Стоп-маркет нужен, когда нужно ограничить убытки прямо сейчас и не ждать хорошей цены для срабатывания стоп-приказов.
Лимитная заявка — указание брокеру, какую бумагу или валюту, сколько лотов и по какой цене нужно купить или продать.
Рыночная заявка — заявка на покупку или продажу активов по цене, которая есть на бирже в данный момент.
Заявка «Лучшая цена» — заявка на покупку или продажу активов по цене, которая есть на бирже в данный момент, но с защитным механизмом. Цена на бирже меняется ежесекундно, и, чтобы не отменять сделку при каждом таком изменении, брокер дополнительно блокирует на счете примерно 0,3% от суммы заявки. Если цена изменится в худшую сторону, заявка автоматически отменится, а деньги вернутся на счет.
Еще в Tinkoff Invest API мы используем нестандартные типы данных по рекомендации Google. Расскажем подробнее про каждый.
Timestamp — основной тип для передачи времени в формате protoсol-buffers. Это значение в диапазоне интервала дат от 0001-01-01T00:00:00Z до 9999-12-31T23:59:59.999999999Z. Timestamp всегда работает в формате UTC с нулевым смещением и состоит из двух полей целого типа: seconds и nanos.
MoneyValue — используется для параметров, у которых есть денежный эквивалент. Возьмем для примера стоимость ценных бумаг — тип состоит из трех параметров:
currency — строковый ISO-код валюты, например RUB или USD;
units — целая часть суммы;
nano — дробная часть суммы, миллиардные доли единицы.
Quotation — тип, аналогичный MoneyValue, но без информации о валюте. Параметры типа — units и nano. Для корректной работы с ним требуется конвертация в стандартные типы языка программирования, который используется для написания торгового робота. Для Python это преобразование описано в utils.
Как сделать робота
Если вы планируете создать робота самостоятельно, план прост:
Станьте нашим клиентом и создайте токен доступа.
Протестируйте взаимодействие с Tinkoff Invest API через gRPC-клиенты или наш swagger.
Скачайте исторические рыночные данные по инструментам в виде архива. Для загрузки истории котировок можно воспользоваться специальным методом или подготовленными скриптом и справочником figi.
Проработайте и настройте вашу стратегию в нашей песочнице. Для тестирования своего торгового робота в песочнице можно использовать неограниченное количество счетов, которые существуют только в песочнице и не имеют отношения к реальным торгам на бирже.
Переведите робота на боевой контур.
Для тех, кто хочет воспользоваться готовыми роботами, сделали небольшую подборку. В большинстве случаев достаточно следовать инструкции по запуску и добавить свои параметры.
Tinkoff Trading Bot — реализована простая интервальная стратегия. Несложный код поможет начинающим разработчикам быстро запустить, проверить и доработать торговую стратегию под свои цели. Простое ведение статистики через sqllite. Любой желающий может дописывать свои стратегии. Интерфейс простой — только init и start. Фабрика на старте использует стратегии, опираясь на файл конфигурации. Параллельно может работать несколько стратегий для разных figi. Автор робота — @qwertyo
InvestRobot — понятный для запуска робот. В качестве демонстрации представлена одна торговая стратегия, основанная на индикаторе двух скользящих средних. Автор робота — @karpp
Робот на основе объемного анализа для Тинькофф Инвестиций — кластерный анализ и профиль рынка позволяет определить действительную заинтересованность участников рынка, реализован один из методов работы с профилем рынка — реакция на максимальный горизонтальный объем внутри дня за выбранный период. Автор робота — @rteslenko
Вместо заключения — план создания робота на примере работы победителя
Переходим на Tinkoff Trading Bot.
Клонируем ссылку на репозиторий.
Открываем терминал или командную строку, переходим в папку, где будем разворачивать репозиторий.
Вставляем и выполняем команду:
git clone https://github.com/qwertyo1/tinkoff-trading-bot.git
Следуем инструкции из репозитория:
Hidden text
Generate token for your account at the settings #Создаем токен для своего аккаунта в настройках.
Create a file .env with required env variables. You can find an example in .env.example #из файла .env.example делаем файл .env и придаем заданным переменным свои значения.
Create a file instuments_config.json with configurations. You can find an example in instruments_config.json.example #из файла instruments_config.json. делаем файл instuments_config.json. Для легкого старта советуем изменить значение параметра figi на BBG333333333 — «Тинькофф iMOEX».
Далее выполняем следующие команды для создания и запуска виртуального окружения:
pip install virtualenv virtualenv --python=python3.9 venv source venv/bin/activate
Устанавливаем зависимости
pip install -r requirements.txt
Робот запрашивает свечи за последние 10 дней и высчитывает коридор с низшей и высшей ценой. И в случае пересечения границы коридора робот выставляет заявки на покупку или продаж.
Ждем профит!