Бэктест — эксперимент с зафиксированными правилами, данными и моделью исполнения, а не поисковик самой красивой кривой капитала. Каждый проверенный параметр, просмотренный график и отброшенная идея переносят информацию из тестовой выборки в исследовательский процесс.
Зафиксируйте исследовательский вопрос
До результатов запишите экономическую гипотезу, universe, момент наблюдения, вход, выход, размер, расходы и критерий прохождения. «После необычно сильного минутного движения при стабильной глубине ликвидные контракты частично возвращаются за пять минут» — опровержимо. «Найти прибыльные настройки RSI» — подгонка.
Используйте только известное в момент решения
- Формируйте сигнал на закрытом баре, если продакшен действительно не использует intrabar-события.
- Правильно сдвигайте rolling-признаки: текущий high, ставка фандинга и ранг universe могут быть неизвестны.
- Стройте списки символов point in time, включая делистинги и провалы, где доступны данные.
- Учитывайте изменение спецификаций контрактов, листинг, точность и периоды обслуживания.
- Разделяйте mark, index, last trade и book price по их реальному назначению.
Смоделируйте полную стоимость торговли
Чистый PnL = ценовой PnL − комиссии maker/taker − спред − impact − фандинг/займ − ликвидационные и операционные потери. Проскальзывание зависит от стороны, срочности, объёма и глубины, а не от удобной константы. Отклоняйте или задерживайте ордера, нарушающие историческую точность, минимум и свежесть данных.
При наличии только свечей используйте консервативные сценарии: исполнение на следующем баре, неблагоприятный спред и несколько уровней проскальзывания. Нулевые расходы и сделка по тому же close не доказывают исполнимость.
Выберите симулятор под стратегию
| Модель | Подходит | Не доказывает |
|---|---|---|
| Векторные бары | Медленные сигналы и широкий скрининг | Очередь, intrabar-путь и частичные исполнения |
| События баров/сделок | Жизненный цикл ордера и условная логика | Точную сделку без допущений о стакане |
| Реплей стакана | Краткосрочное исполнение | Исторический приоритет в очереди без message data |
Проверяйте вперёд, а не случайным перемешиванием
Временные ряды упорядочены. Используйте раннее окно исследования, более позднее окно проверки и walk-forward folds: выбирайте по прошлому, оценивайте на следующем невидимом периоде. Добавляйте gap, если метки или позиции пересекают границу. Сохраните финальный holdout или начните paper-историю без отбора.
Метрики, раскрывающие распределение
- Ожидание: win rate × средняя прибыль − loss rate × средний убыток после расходов.
- Profit factor: валовая прибыль ÷ модуль валового убытка с числом сделок.
- Максимальная просадка и восстановление: риск траектории, а не только финальный доход.
- Оборот, экспозиция и ёмкость: сколько исполнения требует результат.
- Хвостовой убыток и серии: риск выживания.
- Атрибуция: long/short, символ, режим, когорта входа и причина выхода.
Добавляйте bootstrap-интервалы по достаточно независимым блокам, а не считайте каждую минуту новой выборкой. Положительная оценка с широким интервалом через ноль — неопределённость, а не доказанное преимущество.
Учитывайте число проверенных идей
Лучший из сотен вариантов без преимущества будет выглядеть убедительно по случайности. Записывайте все эксперименты, используйте грубую сетку, предпочитайте устойчивое плато одиночному оптимуму и снижайте доверие по мере роста поиска. Многократно просмотренный holdout больше не out of sample.
Bailey, Borwein, López de Prado и Zhu формализуют проблему в работе The Probability of Backtest Overfitting: обычный holdout также ломается после масштабного отбора стратегий.
Ворота допуска до живого капитала
- Положительное ожидание после расходов более чем в одном рыночном режиме.
- Допустимая просадка при стрессовых расходах и задержанном исполнении.
- Результат не объясняется одним символом, стороной, месяцем или выходом.
- Стабильность соседних параметров и walk-forward folds.
- Paper/shadow использует тот же путь кода и записывает отклонённые возможности.
- Операционные лимиты, мониторинг и критерий отката определены до активации.
Прохождение не доказывает будущую прибыль. Оно разрешает собирать более чистые forward-данные при минимальном риске — это следующий этап исследования, а не его конец.