Устанавливаем пакеты командой:
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
соответственно.
Примеры файлов находятся в репо.
Устанавливаем 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
, работа приложения завершается, выводится статистика.
В этих режимах робот НЕ торгует. Нужны для просмотра информации аккаунтов, настройки сэндбокс-аккаунта, пробной покупки/продажи
python main.py --prod-control
- запуск для ручного управления аккаунтом на продеpython main.py --sanbox-control
- запуск для ручного управления аккаунтом на сэнде
При запуске в этих режимах будут выведены примеры доступных команд. Для выхода - командаq
илиquit