Path: blob/master/ invest-robot-contest_sirius-master/readme.md
7763 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