January 28

TKSBrokerAPI: пишем простой сценарий для торговли на бирже

Введение

В прошлой статье я рассказал про опенсорс разработку — платформу ⚙️ TKSBrokerAPI для работы с Tinkoff Invest API через REST протокол. Также этим инструментом можно пользоваться из консоли или встраивать его в CI/CD-системы для автоматизации рутинных операций на бирже.

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

Неважно какую систему принятия торговых решений о покупке или продаже вы используете. Это может быть технический анализ, нейросети, парсинг отчётов или слежение за сделками других трейдеров. Но всё равно вам потребуется выполнять базовые торговые операции: получать рыночные данные, выставлять лимитные и стоп-ордера, открывать и закрывать сделки по рынку. Модуль TKSBrokerAPI будет выступать как посредник между кодом с логикой торгов и сервисной инфраструктурой брокера, а также выполнять рутинные задачи от вашего имени в брокерском аккаунте.

Схема разработки с помощью TKSBrokerAPI очень простая:

  1. Вы придумываете гениальный торговый алгоритм.
  2. Записываете его пошагово в виде некоторого плана или торгового сценария.
  3. Автоматизируете сценарий на Python при помощи TKSBrokerAPI.
  4. TKSBrokerAPI берёт на себя всю работу с инфраструктурой брокера Тинькофф Инвестиции.
  5. Профит!
Схема разработки с помощью TKSBrokerAPI

С чего начать

Проще всего установить TKSBrokerAPI через PyPI:

pip install tksbrokerapi

Либо скачать код проекта TKSBrokerAPI из GitHub-репозитория.

Перед тем, как использовать API, вам нужно создать аккаунт у брокера Тинькофф Инвестиции. Для аутентификации через API вам также понадобятся токен и идентификатор счёта пользователя. Далее можно ознакомиться с полной документацией по всем доступным свойствам и методам TKSBrokerAPI. Соответствие методов консольным ключам также можно посмотреть в документации в разделе «Основные возможности».

❗ Важное замечание: платформа TKSBrokerAPI не предназначена для высокочастотной (HFT) торговли, из-за системы динамического формирования лимитов для пользователей Tinkoff Invest API. В среднем, это 50–300 запросов в секунду, в зависимости от их типа, что очень мало для требований к скоростям HFT (хотя брокер и даёт несколько рекомендаций по ускорению исполнения поручений). Однако вы вполне можете использовать её для автоматизации своих интрадей, кратко-, средне- и долгосрочных торговых стратегий.

Пример реализации абстрактного сценария

Так как функциональность TKSBrokerAPI достаточно обширная, то не хочется акцентировать внимание на конкретных торговых сценариях, а лишь указать некоторые возможности для их автоматизации. Давайте рассмотрим один сценарий, основанный на сравнении объёмов текущих покупок и продаж в биржевом стакане, и реализуем его при помощи API, без использования дополнительных методов технического анализа.

Действия будут следующие:

  • запросить текущий портфель клиента и определить доступные для торговли средства;
  • запросить стакан цен с глубиной 20 для выбранных инструментов, например, акции с тикерами YNDX, IBM и GOOGL;
  • если инструмент ранее ещё не был куплен, то проверить:
    • если резерв денежных средств (свободный кеш) в валюте инструмента больше, чем 5% от общей стоимости всех инструментов в этой валюте, то проверить:
      • если в стакане объёмы на покупку больше объёмов на продажу минимум на 10%, то купить 1 акцию по рынку и выставить тейк-профит как стоп-ордер на 3% выше текущей цены покупки со сроком действия 1 час;
  • если инструмент имеется в списке открытых позиций, то проверить:
    • если текущая цена уже выше средней цены позиции хотя бы на 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. Наш девиз: Технологии · Знания · Наука (Technologies · Knowledge · Science)

На этом всё, а если у вас появились вопросы по работе платформы TKSBrokerAPI, то вы можете задать их на GitHub в разделе 👉 Issues 👈 (также подписывайтесь на блог разработчиков: t.me/TKSBrokerAPI).

Успехов вам в автоматизации биржевой торговли! И профита! 🚀 😉✌️

⚙ Ссылка на проект: github.com/Tim55667757/TKSBrokerAPI
🎁 Поддержать проект: yoomoney.ru/to/410015019068268