Skip to content

Trade robot for tinkoff contest

Notifications You must be signed in to change notification settings

alexzaikov/sirius

Repository files navigation

SIRIUS - робот по торговле для конкурса Tinkoff

Установка и базовая настройка

Устанавливаем пакеты командой:
pip install -r requirements.txt

Задаём токены и x-app-name в settings.ini:

x-app-name =   
prod_token =   
sandbox_token =

Тестировалось на python 3.10.4

Запуск

Основные варианты запуска:

  • python main.py --start_trade - запуск в режиме торговли (в том числе на исторических данных)
  • python main.py --prepare_history --prepare_history_days 5 - подготовка файла для тестирования на исторических данных
  • python main.py --reset_robot - сброс статистики торговли и кэша
  • python main.py --sanbox-control - запуск для ручного управления аккаунтом на сэнде
  • python main.py --prod-control - запуск для ручного управления аккаунтом на проде

Подробнее см. ниже.

Описание стратегии

Робот торгует акциями(shares).
Каждые N минут (по умолчанию - 30, можно изменить в настройках) для каждой торгуемой акции делается запрос последних минутных свечей за N последних минут.
Если свечей недостаточно (например, закрыта биржа), то робот не делает ничего. Сигналы на покупку/продажу даются по анализу трёх скользящих средних - быстрая (fast_ma), медленная (slow_ma) и трендовая (trend_ma). Шаг скользящих настраивается.

  • Сигнал на покупку: если fast_ma пересекает снизу вверх и slow_ma, и trend_ma.
  • Сигнал на продажу: если fast_ma пересекает сверху вниз и slow_ma, и trend_ma.

Устанавливаются take_profit и stop_loss в процентах от последней цены покупки. Процент так же можно задать в настройках.

В каждый момент времени робот держит только 1 лот каждого торгуемого актива. То есть, если робот купил какой-либо актив, то докупать он не будет, даже если придёт ещё один сигнал на покупку.
Продажа происходит либо по сигналу, либо по stop_loss/take_profit.

В настройках задаются параметры min_usd и min_rub. Если баланс снизиться ниже этих значений, робот перестанет торговать.

Все TODO по стратегии и по техническому долгу описаны в todos.txt.

Логирование

Логи пишутся в logs.log.
Уровень логирования задаётся настройкой log_level
Уровни логирования: debug, info, warn, error

Настройка

Робот торгует в трёх режимах - sandbox, prod и history_test (настройка mode в settings.ini)
history_test - тестирование эффективности алгоритма на исторических данных.
Для работы каждого режима требуется настроить список торгуемых акций -
файлы ./instruments_history_test, ./instruments_sandbox и ./instruments_prod соответственно. Примеры файлов находятся в репо.

Запуск приложения в режимах торговли (--start_trade) на sandbox и prod

Запуск

Устанавливаем mode в значение sandbox или prod
Запускаем:
python main.py --start_trade

Логика

Робот загружает акции для торговли и делает поллинг с заданным интервалом.
Вся информация о покупках/продажах выводится на экран с уровнем логирования info.

Для остановки робота и завершения работы приложения в консоли требуется набрать команду quit.

При покупке/продаже обновляется статистика trading_info и сохраняется в файл в файле data/trading_info. Там же хранится информация о времени последнего поллинга.

Статистика

Статистика в trading_info ведётся отдельно по каждому инструменту. При следующем запуске робота информация о предыдущей торговле будет учитываться.
Во время работы робота можно ввести команду trading_info. Эта команда выведет текущий результат по каждому инструменту, а так же посчитает итоговый финансовый результат. Если робот держит акцию, то цена будет учтена в итоговой статистике как последняя цена покупки
Для очистки статистики можно запустить приложение с аргументом --reset_robot - python main.py --reset_robot

Тестирование на исторических данных

Запуск

  1. Устанавливаем в настройках mode=history_test
    Инструменты, для которых нужно делать тестирование, будут взяты из instruments_history_test
  2. Для тестирования на исторических данных сначала нужно запустить приложение с параметрами python main.py --prepare_history --prepare_history_days 5
  • 5 - параметр - количество прошедших дней от текущего момента, для которого нужно сформировать файл. Эта команда сформирует файл data/test_history, содержащий исторические данные (значения свечей) для тестирования.
  1. Когда файл подготовлен, можно запускать тестовую торговлю на исторических данных и посмотреть результат: python main.py --start_trade.

Логика

Логика робота в этом режиме максимально приближена к торговле на сэндбоксе и проде.
Робот берёт за стартовую дату самую старую дату из файла data/test_history и эмулирует изменение текущей даты с заданным в настройках поллингом.
Когда достигнута самая свежая дата из data/test_history, работа приложения завершается, выводится статистика.

Вспомогательные режимы --prod-control --sandbox-control

В этих режимах робот НЕ торгует. Нужны для просмотра информации аккаунтов, настройки сэндбокс-аккаунта, пробной покупки/продажи

  • python main.py --prod-control - запуск для ручного управления аккаунтом на проде
  • python main.py --sanbox-control - запуск для ручного управления аккаунтом на сэнде
    При запуске в этих режимах будут выведены примеры доступных команд. Для выхода - команда q или quit

About

Trade robot for tinkoff contest

Resources

Stars

Watchers

Forks