Идеология
Бот работает только с тем пулом инструментов, который задаст ему пользователь. Мы крайне рекомендуем вам самостоятельно выбирать надежные ценные бумаги, дабы избежать дополнительный рисков в случае непредвиденных ошибок в процессе торговли ботом, связанных, например, с низкой ликвидностью ценной бумаги.
Структура проекта
- .github/ - настройки CI/CD
- .grafana/ - дашборды для Grafana
- cmd - исполняемые файлы
- trade-bot - непосредственно торговый бот
- trade-util - консольная утилита-помощник
- docs/ - документация
- internal - внутрянка проекта
- config - глобальная конфигурация
- loggy - логгер проекта
- metrics - доступные Prometheus-метрики
- proto - автосгенерированные protobuf-контракты
- sdk - обёртка над proto
- trade - вся логика торговли
- breaker - реализация "circuit breaker"
- common - общие компоненты
- strategy - доступные торговые стратегии
- util - преобразования, форматирования, etc
Архитектура
Архитектурно наши торговые стратегии делятся на два типа:
-
Основанная на воркерах (workers). Торговый бот запускает несколько горутин, каждая из которых отслеживает только один переданный по FIGI инструмент, выставляет заявки на покупку и продаётся в соответствии с торговыми индикаторами.
-
Основанная на стримах (streams). Торговый бот слушается один поток для всех переданных в конфиге FIGI и запускает отдельную горутину на каждое необходимое для обработки событие.
Особенности работы
В основе обработки ошибок лежит паттерн Circuit Breaker: если worker/stream начинает получать слишком много ошибок при работе с конкретным инструментом, то он считается "нездоровым" и завершает свою работу.
Торгового бота можно запускать в нескольких инстансах со своим собственным конфигом. Каждый инстанс уникально идентифицирует себя полем "bot_id" в логах и метриках, случайно сгенерированным на старте.
Торговые стратегии, реализуемые ботом, используют достаточно короткие свечи, которые, к сожалению, Tinkoff Invest API не предоставляет на длинных интервалах. В связи с этим в проекте пока не реализован backtest.