Backtesting: как правильно тестировать торговые стратегии
25.04.2026 · R. B. Atai
Backtesting часто выглядит как самый убедительный этап разработки торговой стратегии: загружаем исторические данные, запускаем правила входа и выхода, получаем кривую капитала, считаем доходность и просадку. Если график растёт, возникает соблазн считать, что стратегия доказана.
На практике backtest доказывает гораздо меньше. Он показывает, как конкретный набор правил вёл бы себя на конкретной версии прошлого при конкретных допущениях о данных, комиссиях, исполнении и доступной ликвидности. Это полезная инженерная проверка гипотезы, но не гарантия будущей торговли. Хороший backtest нужен не для того, чтобы красиво показать прошлую доходность, а чтобы заранее обнаружить хрупкость стратегии.
Что такое backtesting
Backtesting — это воспроизведение торговой логики на исторических данных. В минимальном виде он отвечает на вопрос: что произошло бы, если бы стратегия принимала решения по заранее заданным правилам в прошлом.
Но корректный backtest — это не только сигнал. В него входят:
- торговый universe: какие инструменты стратегия могла видеть в каждый момент времени;
- данные: свечи, сделки, стакан, фундаментальные события, комиссии, календарь торгов;
- правила позиции: размер, плечо, stop, rebalance, ограничения на риск;
- модель исполнения: по какой цене и с какой задержкой заявка считается исполненной;
- журнал расчёта: версия данных, параметры, дата запуска, метрики и исключения.
Если один из этих слоёв подменён удобным предположением, результат быстро становится исследовательской иллюстрацией вместо теста. Например, стратегия на дневных свечах может выглядеть устойчивой, если считать вход по цене закрытия того же бара, на котором был сформирован сигнал. Но если в реальности сигнал становится известен только после закрытия, такая сделка уже использует информацию из будущего.
In-sample и out-of-sample
Одна из базовых защит от самообмана — разделение истории на in-sample и out-of-sample.
In-sample — это участок, на котором исследователь формулирует идею, подбирает параметры, сравнивает варианты фильтров и отбрасывает слабые конфигурации. Out-of-sample — отдельный участок, который стратегия не должна была видеть во время подбора. Его задача — проверить не то, насколько хорошо модель запомнила прошлое, а сохранилось ли у неё поведение на новых данных.
Проблема в том, что формальное разделение само по себе не спасает. Если исследователь много раз возвращается к out-of-sample, смотрит результат, меняет параметры и снова проверяет тот же период, этот участок постепенно превращается во второй in-sample. Поэтому в серьёзном исследовании важна дисциплина эксперимента: заранее фиксировать гипотезу, ограничивать число переборов и хранить историю запусков.
Для стратегий, чувствительных к режимам рынка, часто используют walk-forward подход: параметры оцениваются на одном окне, затем проверяются на следующем, после чего окно сдвигается. Это не делает результат истинным, но лучше имитирует реальность, где стратегия всегда принимает решения с ограниченной историей и без доступа к будущему.
Overfitting
Overfitting — это ситуация, когда стратегия слишком хорошо подстроена под конкретную историческую выборку и поэтому плохо переносится на новые данные. На языке моделирования она выучила не устойчивую закономерность, а особенности уже увиденного периода: случайные всплески, разовый тренд, конкретный порядок событий, локальные аномалии ликвидности.
В backtesting это обычно происходит не одним грубым действием, а серией мелких улучшений. Исследователь меняет период индикатора, добавляет фильтр волатильности, выбирает другой stop, исключает неудобные часы, меняет набор инструментов, сравнивает десятки вариантов и оставляет тот, у которого лучший Sharpe, меньшая просадка или самая красивая кривая капитала. Каждый шаг выглядит рационально, но вместе они могут превратить исследование в подбор ключа к уже известной истории.
Важно, что overfitting — не то же самое, что редкая торговля. Стратегия может совершать мало сделок и при этом быть корректной, если её логика действительно рассчитана на редкие события. Проблема не в количестве сделок само по себе, а в том, что после множества переборов можно выбрать вариант, который случайно идеально совпал с прошлым. Такой backtest отвечает на вопрос "что лучше всего подошло к этой истории", а не "что с высокой вероятностью сохранится вне неё".
Bailey, Borwein, López de Prado и Zhu описывают эту проблему как probability of backtest overfitting: чем больше стратегий и параметров перебирается на одной истории, тем выше шанс выбрать статистическую иллюзию, которая не выдержит реальной торговли. 1 Поэтому важно смотреть не только на лучший результат, но и на распределение результатов вокруг него. Если стратегия работает только в узком наборе параметров, а соседние значения резко ломают PnL, это сигнал хрупкости, а не точности настройки.
Look-ahead bias и survivorship bias
Две ошибки особенно опасны, потому что они часто не видны в итоговой кривой капитала.
Look-ahead bias — это использование информации, которая в момент сделки ещё не была доступна. Он появляется не только в очевидной форме "знаем завтрашнюю цену". Достаточно взять дневной high/low для решения внутри дня, использовать пересчитанные позже фундаментальные данные, применить финальный список индекса к прошлым периодам или нормализовать признаки по всей истории сразу. Результат будет выглядеть аккуратно, но стратегия будет торговать с доступом к будущему.
Survivorship bias — другая форма редактирования прошлого. Если в тест попадают только инструменты, которые дожили до сегодняшнего дня, из истории исчезают банкротства, делистинги, мёртвые токены, закрытые пары и провалившиеся рынки. Исследования по взаимным фондам показывают, что survivorship bias способен заметно искажать оценки средней доходности и persistence. 2 В крипте этот риск ещё грубее: исчезают не только отдельные активы, но и биржи, пары, мосты ликвидности и целые режимы рынка.
Честный backtest должен работать с point-in-time universe: стратегия видит только те инструменты и данные, которые реально существовали на момент решения. Это технически сложнее, но без этого тест часто отвечает на вопрос "как бы торговала стратегия, если бы заранее знала, кто выживет".
Transaction costs, slippage и latency
Чистая кривая капитала без издержек почти всегда переоценивает стратегию. Особенно если система торгует часто, работает на малом edge или использует market orders.
Transaction costs — это комиссии биржи, broker fees, funding, borrow costs, spread и другие прямые расходы. В крипте даже внутри одной биржи комиссии зависят от maker/taker статуса, символа, уровня аккаунта и специальных условий; Binance, например, отдельно описывает типы комиссий и порядок расчёта commission rates. 3 Если backtest ставит нулевую комиссию "для простоты", он тестирует не рынок, а идеальную среду без трения.
Slippage — разница между ожидаемой ценой сделки и фактической ценой исполнения. Она возникает из-за спреда, недостаточной глубины, движения цены во время исполнения и market impact. Для маленького ордера на ликвидной паре slippage может быть почти незаметным. Для крупного ордера или тонкого стакана он может съесть весь ожидаемый edge.
Latency — задержка между появлением сигнала, отправкой заявки и её обработкой площадкой. На среднесрочных стратегиях она может быть второстепенной, но для intraday, arbitrage и market making задержка меняет саму природу теста. Если backtest предполагает мгновенное исполнение по лучшей цене, а реальная система видит стакан через WebSocket, обрабатывает сигнал, проходит через risk checks и только потом отправляет order, результат уже должен учитывать время и очередь. Биржевая документация по WebSocket-потокам показывает, что рыночные данные в реальности приходят как поток сделок и обновлений стакана, а не как готовая идеальная свеча. 4
Paper trading
Paper trading полезен как промежуточный слой между backtest и реальной торговлей. Он проверяет, что стратегия запускается по расписанию, получает данные, формирует сигналы, создаёт заявки, пишет логи, выдерживает перезапуски и корректно считает PnL в режиме, близком к live.
Но paper trading не равен торговле капиталом. В симуляции нет реального воздействия заявки на рынок, нет частичного исполнения в тонком стакане, нет отказов из-за резкого изменения маржи, нет психологического давления и часто нет той же очереди, в которой стоял бы реальный ордер. FINRA в обязательном раскрытии рисков для day trading отдельно подчёркивает, что активная торговля может быть крайне рискованной и требует готовности к значительным потерям. 5 Paper trading помогает проверить механику, но не отменяет эти риски.
Поэтому правильная роль paper trading — не "последнее доказательство прибыльности", а rehearsal production-системы: данные, тайминги, ордера, лимиты, мониторинг, аварийные остановки.
Почему backtest не равен реальной торговле
Backtest работает с прошлым, а реальная торговля происходит в будущем, где меняются ликвидность, конкуренция, волатильность, комиссии, регуляторные условия и поведение участников. Даже если исторический тест был построен честно, он остаётся моделью.
Основные причины расхождения обычно такие:
- рынок меняет режим, и закономерность, найденная на истории, перестаёт работать;
- данные в исследовании чище и полнее, чем данные в live-контуре;
- исполнение в тесте проще, чем реальный order routing, spread, queue position и partial fills;
- стратегия масштабируется хуже, чем кажется на малом объёме;
- комиссии, funding, borrow costs и slippage меняются во времени;
- после запуска меняется поведение автора: отключение после просадки, ручные правки, расширение риска, выборочная остановка сделок;
- конкуренты находят ту же аномалию, и edge сжимается.
Именно поэтому регуляторы и биржевые правила смотрят на автоматизированную торговлю не только как на "алгоритм сигнала", а как на систему с контролями, лимитами, мониторингом и процедурами на случай сбоя. В guidelines ESMA по automated trading отдельно описаны требования к системам, pre-trade и post-trade controls, устойчивости и управлению риском. 6 Для разработчика стратегии это важный вывод: backtest — только один слой проверки, а не вся система.
Что считать хорошим backtest
Хороший backtest не обязан показывать максимальную доходность. Он должен быть воспроизводимым, консервативным и достаточно строгим, чтобы слабая стратегия не прошла только из-за удобных допущений.
Минимальный набор признаков:
- правила стратегии зафиксированы до финального теста, а не переписаны после просмотра результата;
- данные point-in-time: без будущих corporate actions, будущих составов universe и пересчитанных задним числом признаков;
- in-sample и out-of-sample разделены, а out-of-sample не используется как бесконечная площадка для подбора;
- комиссии, spread, slippage, funding и latency включены хотя бы в консервативной модели;
- параметры проверены на устойчивость: соседние значения не должны полностью разрушать стратегию;
- метрики включают не только CAGR, но и max drawdown, volatility, Sharpe/Sortino, turnover, hit rate, tail losses и длительность восстановления;
- тест показывает поведение по режимам рынка, а не только один итоговый график;
- сохраняются версии данных, кода и параметров, чтобы результат можно было повторить.
Для инструментов вроде ai-trader ценность backtesting-контура именно в этом: не в красивой кривой капитала, а в воспроизводимом процессе, где сигнал, данные, риск-лимиты, издержки и live-проверки связаны в одну проверяемую систему.
Итог
Backtesting нужен не для того, чтобы доказать будущую прибыль. Он нужен, чтобы отделить стратегии, которые хотя бы переживают честную историческую проверку, от стратегий, которые держатся на ошибках данных, переоптимизации и нереалистичном исполнении.
Хороший backtest всегда немного разочаровывает: он добавляет комиссии, портит идеальные входы slippage, запрещает смотреть в будущее, возвращает в историю умершие инструменты и показывает просадки, которые не хочется видеть. Но именно поэтому он полезен. Чем раньше стратегия ломается в тесте, тем дешевле эта поломка обходится до реальной торговли.