суббота, 1 октября 2022 г.

TKSBrokerAPI: демонстрация некоторых возможностей торговли на бирже через Python API


Поддержать проект: https://yoomoney.ru/to/410015019068268

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

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

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

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

С чего начать

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

pip install tksbrokerapi

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

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

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

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

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

Действия будут следующие:
  • запросить текущий портфель клиента и определить доступные для торговли средства;
  • запросить стакан цен с глубиной 20 для выбранных инструментов, например, акции с тикерами `YNDX`, `IBM` и `GOOGLE`;
  • если инструмент ранее ещё не был куплен, то проверить:
    • если резерв денежных средств (свободный кеш) в валюте инструмента больше, чем 5% от общей стоимости всех инструментов в этой валюте, то проверить:
      • если в стакане объёмы на покупку больше объёмов на продажу минимум на 10%, то купить 1 акцию по рынку и выставить тейк-профит как стоп-ордер на 3% выше текущей цены покупки со сроком действия 1 час;
  • если инструмент имеется в списке открытых позиций, то проверить:
    • если текущая цена уже выше средней цены позиции хотя бы на 2.5%, то выставить отложенный лимитный ордер на весь объём, но ещё чуть-чуть выше (на 0.1%) от текущей цены, чтобы позиция закрылась с профитом с большой вероятностью в течении текущей торговой сессии;
  • после всех торговых операций напечатать в консоль текущее состояние портфеля пользователя.
Для понимания примера сохраните и запустите скрипт под спойлером ниже (или скачайте его по ссылке). Не забудьте перед этим подставить свой token и accountId в разделе инициализации в коде. Большая часть кода подробно прокомментирована и даны ссылки на соответствующие методы API.

Пример кода с торговым сценарием

Пусть вас не пугает кажущаяся сложность и объём кода. На самом деле, его большую часть занимают комментарии с примечаниями и логи, которые можно опустить в реальном проекте, а  оставшийся алгоритм получится небольшим.

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