Начало работы
Tinkoff Invest Trade Robot - это робот для алгоритмической торговли на бирже Тинькофф Инвестиций посредством Tinkoff Invest API.
Функциональные возможности
- Автоматическая торговля любыми ценными бумагами
- Реализация собственного торгового алгоритма
- Выставление и отмена как рыночных, так и лимитных торговых поручений
- Ведение статистики, выдача краткого результата
- Логирование всех операций, возможность установки уровня логирования
- Подключение визуализации
Запуск робота
- Установите зависимости
python3.10 -m pip install -r requrements.txt
; - Получите токен и сохраните его и ID аккаунта в переменные окружения TINKOFF_TOKEN и TINKOFF_ACCOUNT соответственно;
- Запустите файл main.py
python3.10 main.py
.
Торговая стратегия
В качестве демонстрации представлена одна торговая стратегия, основанная на индиакторе двух скользящих средних. Строятся линии двух скользящих средних, короткого и длинного. Интервалы задаются в параметрах стратегии. При пересечении линий считается, что тренд цены меняется, и нужно либо покупать (в случае, если короткое среднее выше длинного), либо продавать (в обратном случае).
Архитектура проекта
Здесь находится короткое описание архитектуры. Более подробно можно прочитать на странице каждого из модулей.
robotlib/robot.py
TradeRobotFactory
- фабрика роботов
Получает из API параметры ценной бумаги и аккаунта, и используя их создает робота.
TradeRobot
- торговый робот
Выступает в роли прокси между API Тинькофф Инвестиций и торговой стратегией.
При запуске метода trade()
загружает исторические данные, сохраняет их в торговую стратегию,
подписывается на bidirectional-stream необходимой для стратегии биржевой информации. При получении обновлений,
передает их в стратегию, дожидается от нее решения по дальнейшим действиям и исполняет их.
Вся статистика торговых поручений робота записывается в объект типа TradeStatisticsAnalyzer
и возвращается в конце работы
для дальнейшего анализа или сохранения. Также может быть получена в любой момент из robot.trade_statistics
.
В зависимости от режима работы, выставленного в параметрах робота, он может торговать как в песочнице, так и на бирже.
Также робот имеет функцию бэктеста стратегии backtest()
.
robotlib/stats.py
TradeStatisticsAnalyzer
- статистика робота
Используется для записи, хранения и получения статистики, а также генерации отчетов и коротких сводок. Ведение статистики полностью ведется роботом, пользователю рекомендуется использовать только функции сохранения в файл и генерации отчетов.
Для сохранения и чтения из файла есть методы save_to_file(filename)
и read_from_file(filename)
соответственно.
Для генерации отчета используется метод get_report(processors, calculators)
. Пользователям предоставляется возможность
кастомизации отчетов посредством передачи в метод списка процессоров и калькуляторов. Подробнее дальше.
TradeStatisticsProcessorBase
Процессоры должны быть унаследованы от этого класса. Они позволяют преобразовывать таблицу итогового отчета
(например, добавлять столбцы с подсчетом параметров, преобразовывать типы данных и т.д.). Для этого в них необходимо
переопределить метод process(df)
.
Пример реализованного процессора: BalanceProcessor
.
BalanceCalculator
Калькуляторы должны быть унаследованы от этого класса. Они позволяют строить из отчета короткую сводку с важными
показателями (например, максимальная потеря за время торгов, итоговый заработок и т.д.). Для этого в них необходимо
переопределить метод calculate(df)
.
Пример реализованного калькулятора: BalanceCalculator
.
robotlib/strategy.py
TradeStrategyBase
Абстрактный класс (интерфейс) торговой стратегии. Он обрабатывает обновления данных, предоставляемые роботом и
возвращает результат - торговое поручение, которое необходимо реализовать роботу, или список тех, которые надо отменить.
Для этого используется метод decide(market_data, params)
.
Бэктест стратегии работает аналогичным образом, за исключением того, что в нем предоставляются только данные свечей. Для
него необходимо реализовать метод decide_by_candle(candle, params)
.
Примеры реализованной стратегии: RandomStrategy
, MAEStrategy
(описание).
robotlib/money.py
Содержит вспомогательный класс Money
. Он полностью аналогичен классу Quotation
из API Тинькофф Инвестиций, но
с реализованными операторами сложения, вычитания и умножения на число, а также методы преобразования в / из int
,
float
, tinkoff.invest.Quotation
, tinkoff.invest.MoneyValue
.
rootlib/visualization.py
Позволяет подключить наглядную визуализацию курса ценной бумаги, а так же
покупок и продаж робота в произвольную стратегию. Для этого необходимо созать
объект класса Visualizer
, после чего добавлять в него все обновления цены
методом add_price(time, price)
, покупки и продажи методами add_buy(time)
,
add_sell(time)
соответственно.