Logo

hw98_console_prompt.avif Тестирование торговых стратегий на исторических данных

Достоверный портфельный бэктест. Уровень quant-исследований quant

hamster-bot/tester - Подвинутый инструмент для проведения тестирования своих торговых систем на исторических данных.

    hw98_console_prompt.avif Особенности бэктестера:
  • Прогон сразу нескольких стратегий разных типов на разных таймфреймах одновременно.
  • Всё это с общим балансом. Для понимания как стратегии уживаются на одном кошельке в режиме реального времени.
  • Поддержка тиковых данных. Симуляция поведения стратегии внутри свечи как на торгах в реальном времени.
  • Нет ограничений по входным рыночным данным. Проведение тестирования за любые исторические периоды.
  • Тестирование своей сложной логики которую невозможно точно протестировать готовыми сторонними решениями без костылей.
  • Бэктесты проходят на том же продакшн коде, на котором работает бот в реальном времени.

Реализовано как отдельный коннектор hw98_console_prompt.avif к "бирже" (Mock-объект заменяющий биржу). Таким образом можно протестировать весь ранее написанный код бота. Бот думает, что работает на реальной бирже (ставит ордера, получает баланс и инфу о позициях). А эта виртуальная биржа заглушка всё считает и генерирует отчет.

hw98_console_prompt.avif Рыночные данные для тестирования

Криптовалютные биржи публично делятся историческими рыночными данными. Вот примеры: public.bybit.com, data.binance.vision, public.bitmex.com.
Тестер сам скачивает нужный диапазон данных о торгах и формурует бары для бота. Тестер скачивает до начала теста несного больше данных чтобы проогрузились все индикаторы ТА для стратегии перед началом периода тестирования.
Данные сохраняются в hw98_console_prompt.avif папку tester/data/{symbol}. В эту папку можно подкинуть любые свои данные в CSV формате.


hw98_console_prompt.avif Поведение тестера

С точки зрения бота, тестер - это просто еще одна биржа. Бот подключается к ней и начинает получать бары, выставлять ордера и т.д. Тестер в это время просто эмулирует поведение реальной биржи.
Баланс общий для всех стратегий. Поведение как на фьючерсах BYBIT/BINANCE с кросс маржой. Бот может запросить Wallet или Margin баланс. Margin баланс рассчитывается с учетом всех открытых позиций и unrealized PnL по ним.
Реальное поведение цены. Когда бот запрашивает текущую незавершенную свечу, тестер отдает цену сделки из тиковых данных (и так пока не закнчатся рыночные данные внутри свечи и перейдет к следующей). Таким образом стратегии, которые завязаны на цену внутри свечи (например проскальзывание, трейлинг стопы и т.д.) работают корректно.


hw98_console_prompt.avif Отчёт

По окончании тестирования в hw98_console_prompt.avif папку tester/report сохраняется подробный HTML отчет.
И добавляется запись в reports_history.csv со сводной информацией по тесту для удобного поиска лучших комбинаций параметров при оптимизации стратегий.

    Содержание отчета:
  • Общие метрики всей торговой системы:
    • Начальный и конечный баланс
    • Общая прибыль/убыток в USDT и %
    • Максимальная просадка
    • Количество сделок
    • Процент прибыльных сделок
    • Profit Factor
    Hamster Bot Backtesting
  • Отдельные свечные графики по каждой стратегии. С отметками сделок и визуализацией ТА стратегии. Hamster Bot Backtesting
  • График Margin баланса (с учетом всех открытых позиций и unrealized PnL) и Wallet баланса. Hamster Bot Backtesting
  • График отражающий суммарный размер открытых позиций в USDT (и линия на отдельной оси в % показывающая отношение суммы открытых позиций к Margin балансу)Hamster Bot Backtesting
  • Таблицы со списком всех сделок по каждой стратегии. Hamster Bot Backtesting
  • Список настроек стратегий и параметров тестера
  • Сводная информация по всем стратегиям. Обьем торгов и уплоченная комиссия.Hamster Bot Backtesting


hw98_console_prompt.avif Параметры тестера

файл: 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 - количество параллельных прогонов тестера при переборе параметров. Если производительность компьютера позволяет то получается паралелить процессы без потерь скорости расчета.

Hamster Bot Backtesting

файл: 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)

Hamster Bot Backtesting


hw98_console_prompt.avif Оптимизатор (перебор параметров)

файл: 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"]. Таким же образом можно осуществить перебор пар при тестировании одного файла настроек за раз - но позже будет предложен более удобный вариант перебора.

Hamster Bot Backtesting
Если вы укажете для перебора два параметра например от 1 до 10 с шагом 1, то будет проведено 100! прогонов (10 вариантов первого параметра * 10 вариантов второго параметра). Результаты всех тестов сохраняются в виде отдельных html отчетов и в сводной таблице (reports_history.csv). Это позволяет быстро находить лучшие комбинации параметров для своих стратегий.

Также все стратегии бота доступны в формате PineScript для проведения тестирования на TradingView.