Path: blob/master/ invest-robot-contest_sirius-master/readme.md
5925 views
SIRIUS - робот по торговле для конкурса Tinkoff
Установка и базовая настройка
Устанавливаем пакеты командой:
pip install -r requirements.txt
Задаём токены и x-app-name в settings.ini
:
Тестировалось на 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
Тестирование на исторических данных
Запуск
Устанавливаем в настройках
mode=history_test
Инструменты, для которых нужно делать тестирование, будут взяты изinstruments_history_test
Для тестирования на исторических данных сначала нужно запустить приложение с параметрами
python main.py --prepare_history --prepare_history_days 5
5 - параметр - количество прошедших дней от текущего момента, для которого нужно сформировать файл. Эта команда сформирует файл
data/test_history
, содержащий исторические данные (значения свечей) для тестирования.
Когда файл подготовлен, можно запускать тестовую торговлю на исторических данных и посмотреть результат:
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