Тестирование торговых стратегий на исторических данных
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 отчет.
-
Содержание отчета:
-
Общие метрики всей торговой системы:
- Начальный и конечный баланс
- Общая прибыль/убыток в USDT и %
- Максимальная просадка
- Количество сделок
- Процент прибыльных сделок
- Profit Factor
- Отдельные свечные графики по каждой стратегии. С отметками сделок.
- График Margin баланса (с учетом всех открытых позиций и unrealized PnL).
- Таблицы со списком всех сделок по каждой стратегии.
- Список настроек стратегий и параметров тестера
- Сводная информация по всем стратегиям
- Обьем торгов и уплоченная комиссия
Параметры тестера
файл: config_tester.json
InitialBalance - начальный баланс для тестирования
StartDate - дата начала тестирования в формате 2026-02-03T00:00:00
EndDate - дата окончания тестирования в формате 2026-02-13T00:00:00
WarmupDays - количество дней для прогрева перед началом тестирования
MakerFee - комиссия мейкера (0.0001 = 0.01%)
TakerFee - комиссия тейкера (0.0001 = 0.01%)
SlippagePercent - проскальзывание для маркет ордеров (0.0001 = 0.01%)
UpdateData - обновление данных перед тестированием (true/false)
Также все стратегии бота доступны в формате PineScript для проведения тестирования на TradingView.