Тестирование торговых стратегий на исторических данных
Достоверный портфельный бэктест. Уровень quant-исследований
hamster-bot/tester - Подвинутый инструмент для проведения тестирования своих торговых систем на исторических данных.
- Прогон сразу нескольких стратегий разных типов на разных таймфреймах одновременно.
- Всё это с общим балансом. Для понимания как стратегии уживаются на одном кошельке в режиме реального времени.
- Поддержка тиковых данных. Симуляция поведения стратегии внутри свечи как на торгах в реальном времени.
- Нет ограничений по входным рыночным данным. Проведение тестирования за любые исторические периоды.
- Тестирование своей сложной логики которую невозможно точно протестировать готовыми сторонними решениями без костылей.
- Бэктесты проходят на том же продакшн коде, на котором работает бот в реальном времени.
Реализовано как отдельный коннектор
к "бирже" (Mock-объект заменяющий биржу). Таким образом можно протестировать весь ранее написанный код бота. Бот думает, что работает на реальной бирже (ставит ордера, получает баланс и инфу о позициях). А эта виртуальная биржа заглушка всё считает и генерирует отчет.
Рыночные данные для тестирования
Криптовалютные биржи публично делятся историческими рыночными данными. Вот примеры: public.bybit.com, data.binance.vision, public.bitmex.com.
Тестер сам скачивает нужный диапазон данных о торгах и формурует бары для бота. Тестер скачивает до начала теста несного больше данных чтобы проогрузились все индикаторы ТА для стратегии перед началом периода тестирования.
Данные сохраняются в
папку tester/data/{symbol}. В эту папку можно подкинуть любые свои данные в CSV формате.
Поведение тестера
С точки зрения бота, тестер - это просто еще одна биржа. Бот подключается к ней и начинает получать бары, выставлять ордера и т.д. Тестер в это время просто эмулирует поведение реальной биржи.
Баланс общий для всех стратегий. Поведение как на фьючерсах BYBIT/BINANCE с кросс маржой. Бот может запросить Wallet или Margin баланс. Margin баланс рассчитывается с учетом всех открытых позиций и unrealized PnL по ним.
Реальное поведение цены. Когда бот запрашивает текущую незавершенную свечу, тестер отдает цену сделки из тиковых данных (и так пока не закнчатся рыночные данные внутри свечи и перейдет к следующей). Таким образом стратегии, которые завязаны на цену внутри свечи (например проскальзывание, трейлинг стопы и т.д.) работают корректно.
Отчёт
По окончании тестирования в
папку tester/report сохраняется подробный HTML отчет.
И добавляется запись в reports_history.csv со сводной информацией по тесту для удобного поиска лучших комбинаций параметров при оптимизации стратегий.
-
Содержание отчета:
- Общие метрики всей торговой системы:
- Начальный и конечный баланс
- Общая прибыль/убыток в USDT и %
- Максимальная просадка
- Количество сделок
- Процент прибыльных сделок
- Profit Factor

- Отдельные свечные графики по каждой стратегии. С отметками сделок и визуализацией ТА стратегии.

- График Margin баланса (с учетом всех открытых позиций и unrealized PnL) и Wallet баланса.

- График отражающий суммарный размер открытых позиций в USDT (и линия на отдельной оси в % показывающая отношение суммы открытых позиций к Margin балансу)

- Таблицы со списком всех сделок по каждой стратегии.

- Список настроек стратегий и параметров тестера
- Сводная информация по всем стратегиям. Обьем торгов и уплоченная комиссия.

Параметры тестера
файл: config_tester.json Можно редактировать файл в текстовом редакторе.
name_comment - комментарий к тесту. Чтобы было удобнее ориентироваться в отчетах.
InitialBalance - начальный баланс для тестирования в USDT
StartDate - дата начала тестирования в формате 2026-02-03T00:00:00
EndDate - дата окончания тестирования в формате 2026-02-13T00:00:00
WarmupDays - количество дней для прогрева перед началом тестирования
MakerFee - комиссия мейкера (0.0001 = 0.01%) Стандартная на BYBIT: 0.00036 = 0,0360%. (инструкция как значительно уменьшить комиссию)
TakerFee - комиссия тейкера (0.0001 = 0.01%) Стандартная на BYBIT: 0.001 = 0,1000%
SlippagePercent - проскальзывание для маркет ордеров (0.0001 = 0.01%)
UpdateData - обновление данных перед тестированием (true/false)
use_logger - использование логгера. Если выкл то ускоряет тестирование (true/false)
max_parallel_runs - количество параллельных прогонов тестера при переборе параметров. Если производительность компьютера позволяет то получается паралелить процессы без потерь скорости расчета.
файл: config_tester.json/report Настройка содержания отчета:
chart_ohlc_height - высота графика OHLC в пикселях
chart_balance_height - высота графика баланса в пикселях
chart_position_height - высота графика размера открытых позиций в пикселях
include_chart_ohlc - включение графика OHLC в отчет (true/false)
include_chart_balance - включение графика баланса в отчет (true/false)
include_chart_position - включение графика размера открытых позиций в отчет (true/false)
include_strategy_settings - включение настроек стратегии в отчет (true/false)
Оптимизатор (перебор параметров)
файл: config_tester.json/parameter_mining Настройка оптимизатора (переборщика параметров):
По умолчанию это пустой список []. список напоняется значенями {"name":"имя_параметра_для_перебора", "start": 1, "end": 10, "step": 0.1, "values": ["strng1", "string2"]}
name - имя параметра для перебора. Можно ввести любую настройку бота. Всего у бота 4 вида конфигов.
1) Настройки стратегии (.json файлы в папке settings_strategy). Тут мы настраиваем: торговую пару, таймфрейм, работу с депозитом и то какая стратегия и на каких настройках будет работать.
Пример: settings[*].mrs2.ma_long.type - перебор параметра type у открывающего ордера стратегии mrs2
2) Настройки api ключа (.json файлы в папке settings_accounts). Тут мы настраиваем общий на весь аккаунт тейк профит по балансу маржи либо ограничитель числа однавременно открытых позиций.
Пример: account[*].close_by_margin.profit - перебор параметра profit опции close_by_margin
3) Общие настройки программы бота (файл settings_program.json). Тут мы настраиваем общий общий множитель лота risk_multiplier
Пример: settings_program.risk_multiplier - перебор параметра risk_multiplier
4) Общие настройки тестера (файлы config_tester.json). Тут мы настраиваем параметры тестера. Например можно прогнать тесты с разными уровнями комиссии.
Пример: config_tester.MakerFee - перебор параметра MakerFee
start - начальное значение параметра
end - конечное значение параметра
step - шаг изменения параметра
values - список значений для перебора (строки). Используется для строковых параметров. Например, для типа скользящей средней ["SMA", "EMA"] или источника цены ["close", "open", "ohlc4"]. Таким же образом можно осуществить перебор пар при тестировании одного файла настроек за раз - но позже будет предложен более удобный вариант перебора.
Если вы укажете для перебора два параметра например от 1 до 10 с шагом 1, то будет проведено 100! прогонов (10 вариантов первого параметра * 10 вариантов второго параметра). Результаты всех тестов сохраняются в виде отдельных html отчетов и в сводной таблице (reports_history.csv). Это позволяет быстро находить лучшие комбинации параметров для своих стратегий.
Также все стратегии бота доступны в формате PineScript для проведения тестирования на TradingView.