TKSBrokerAPI: пишем простой сценарий для торговли на бирже
Введение
В прошлой статье я рассказал про опенсорс разработку — платформу ⚙️ TKSBrokerAPI для работы с Tinkoff Invest API через REST протокол. Также этим инструментом можно пользоваться из консоли или встраивать его в CI/CD-системы для автоматизации рутинных операций на бирже.
С помощью TKSBrokerAPI вы можете реализовать на языке Python любой торговый или аналитический сценарий. В сегодняшней статье я хочу показать для разработчиков некоторые возможности этого инструмента, на примере абстрактного торгового сценария.
Неважно какую систему принятия торговых решений о покупке или продаже вы используете. Это может быть технический анализ, нейросети, парсинг отчётов или слежение за сделками других трейдеров. Но всё равно вам потребуется выполнять базовые торговые операции: получать рыночные данные, выставлять лимитные и стоп-ордера, открывать и закрывать сделки по рынку. Модуль TKSBrokerAPI будет выступать как посредник между кодом с логикой торгов и сервисной инфраструктурой брокера, а также выполнять рутинные задачи от вашего имени в брокерском аккаунте.
Схема разработки с помощью TKSBrokerAPI очень простая:
- Вы придумываете гениальный торговый алгоритм.
- Записываете его пошагово в виде некоторого плана или торгового сценария.
- Автоматизируете сценарий на Python при помощи TKSBrokerAPI.
- TKSBrokerAPI берёт на себя всю работу с инфраструктурой брокера Тинькофф Инвестиции.
- Профит!
С чего начать
Проще всего установить TKSBrokerAPI через PyPI:
Либо скачать код проекта TKSBrokerAPI из GitHub-репозитория.
Перед тем, как использовать API, вам нужно создать аккаунт у брокера Тинькофф Инвестиции. Для аутентификации через API вам также понадобятся токен и идентификатор счёта пользователя. Далее можно ознакомиться с полной документацией по всем доступным свойствам и методам TKSBrokerAPI. Соответствие методов консольным ключам также можно посмотреть в документации в разделе «Основные возможности».
❗ Важное замечание: платформа TKSBrokerAPI не предназначена для высокочастотной (HFT) торговли, из-за системы динамического формирования лимитов для пользователей Tinkoff Invest API. В среднем, это 50–300 запросов в секунду, в зависимости от их типа, что очень мало для требований к скоростям HFT (хотя брокер и даёт несколько рекомендаций по ускорению исполнения поручений). Однако вы вполне можете использовать её для автоматизации своих интрадей, кратко-, средне- и долгосрочных торговых стратегий.
Пример реализации абстрактного сценария
Так как функциональность TKSBrokerAPI достаточно обширная, то не хочется акцентировать внимание на конкретных торговых сценариях, а лишь указать некоторые возможности для их автоматизации. Давайте рассмотрим один сценарий, основанный на сравнении объёмов текущих покупок и продаж в биржевом стакане, и реализуем его при помощи API, без использования дополнительных методов технического анализа.
- запросить текущий портфель клиента и определить доступные для торговли средства;
- запросить стакан цен с глубиной 20 для выбранных инструментов, например, акции с тикерами YNDX, IBM и GOOGL;
- если инструмент ранее ещё не был куплен, то проверить:
- если резерв денежных средств (свободный кеш) в валюте инструмента больше, чем 5% от общей стоимости всех инструментов в этой валюте, то проверить:
- если инструмент имеется в списке открытых позиций, то проверить:
- если текущая цена уже выше средней цены позиции хотя бы на 2.5%, то выставить отложенный лимитный ордер на весь объём, но ещё чуть выше (на 0.1%) от текущей цены, чтобы позиция закрылась с профитом с большой вероятностью в течении текущей торговой сессии;
- после всех торговых операций напечатать в консоль текущее состояние портфеля пользователя;
- пауза и повтор всех действий выше, пока длится рабочее время биржи.
Чтобы разобраться в примере, запустите скрипт ./docs/examples/scenario1.py. Перед запуском замените token
и accountId
в коде на свои.
Скрипт написан на Python и реализует торговый алгоритм шаг за шагом. Код содержит комментарии и ссылки на методы API, что упрощает изучение. Не обращайте внимания на объём: большая часть — это пояснения и логи, которые можно убрать или упростить в реальном проекте. Основной алгоритм останется компактным и понятным — в нём используется классическая императивная парадигма программирования.
- Это линейный скрипт — команды выполняются последовательно.
- Параметры задаются в начале, затем идут торговые операции.
- Плюс подхода: простота. Всё сразу видно, как в инструкции.
- Минус: если логика сложная (много условий и ветвлений), код станет запутанной «портянкой».
Альтернатива — использовать парадигму ООП (объектно-ориентированного подхода к программированию). Если не нравится линейный стиль, тот же сценарий можно переписать с помощью классов.
- Создайте класс
TradeScenario
, унаследовав его отTinkoffBrokerServer
. - В качестве полей класса задайте имена констант из первого примера.
- Каждый шаг алгоритма оформите отдельным методом (например,
_GetPortfolio()
,_CalculateFreeFunds()
,_GetOrderBook()
,_OpenBuyMarketPosition()
,_OpenSellMarketPosition()
и другие). - В методе
run()
объедините вызовы этих методов. - В блоке
if __name__ == "__main__":
при запуске скрипта создайте объект класса, задайте параметры и вызовитеrun()
.
- Код станет модульным — части можно будет тестировать отдельно.
- Сложные сценарии будет проще читать и изменять.
Пример ООП-реализации смотрите в скрипте ./docs/examples/scenario1a.py.
На этом всё, а если у вас появились вопросы по работе платформы TKSBrokerAPI, то вы можете задать их на GitHub в разделе 👉 Issues 👈 (также подписывайтесь на блог разработчиков: t.me/TKSBrokerAPI).
Успехов вам в автоматизации биржевой торговли! И профита! 🚀 😉✌️
⚙ Ссылка на проект: github.com/Tim55667757/TKSBrokerAPI
🎁 Поддержать проект: yoomoney.ru/to/410015019068268