Backtesting и реальность: это идеальное матожидание вам лжёт
Ваш backtest: матожидание 8R. Профит-фактор 3,5. 50 000 $ прибыли на счёте в 10 000 $.
Вы выходите в реал. Первая неделя: матожидание -2R. Профит-фактор 0,4. Счёт минус 12 %.
Что случилось? Ваш backtest соврал.
🚨 Скажем прямо
Большинство backtest — чистая фантазия. В них заложены идеальные исполнения, нулевой slippage, отсутствие спредов и волшебные входы, которых в живом рынке не бывает.
Если ваш backtest выглядит слишком хорошо, чтобы быть правдой, значит, так и есть. Вы подогнались под шум, а не под сигнал.
В этом уроке вы узнаете:
- Почему 90 % backtest разваливаются при выходе в реал
- 4 смертных греха: переобучение, заглядывание в будущее, нереалистичные издержки, ошибка выжившего
- Как моделировать slippage и спреды так, чтобы они и правда отражали реальность
- In-sample против out-of-sample (единственная проверка, которая имеет значение)
⚡ Быстрые шаги на завтра (нажмите, чтобы раскрыть)
- Заложите реалистичные издержки в свой backtest — Учтите 0,03-0,05 % slippage на сделку плюс фактический спред. Если результат рушится, ваше преимущество было выдуманным.
- Разделите данные 70/30 — Оптимизируйте на 70 % данных, проверяйте на тех 30 %, которых никогда не видели. Если out-of-sample не проходит, вы подогнали кривую.
- Торгуйте 30 дней на бумаге, прежде чем выходить в реал — Если бумажные результаты заметно расходятся с backtest, что-то не так. Не выходите в реал, пока они не сойдутся.
Реальный пример: как «идеальный» backtest с матожиданием 1,3R превратился в реале в катастрофу с -0,45R
Предыстория: В марте 2024 года Крис (собирательный пример) после 6 месяцев оптимизации собрал стратегию на пробоях. Backtest выглядел невероятно: матожидание 1,3R, профит-фактор 4,9, 67 % прибыльных, проверено на 2 годах данных SPY (2022-2023). В апреле 2024 года в дело пошли 50 000 $. К июню 2024 года счёт был в минусе на 8 400 $ (-16,8 %). Вот полное вскрытие.
«Идеальный» backtest (данные 2022-2023)
| Показатель | Значение | Что думал Крис |
|---|---|---|
| Всего сделок | 156 | Хорошая выборка |
| Доля прибыльных | 67.3% (105W / 51L) | «Невероятно! Куда выше среднего.» |
| Средняя прибыль / средний убыток | +2.4R / -1R | «Отличное R:R, прибыльные в 2,4 раза крупнее убыточных.» |
| Профит-фактор | 4.9 | «Цифра профессионального уровня.» |
| Матожидание | +1,3R на сделку | «Территория Святого Грааля.» |
| Максимальный drawdown | -8.2% | «Крошечный drawdown. Предельно безопасно.» |
| Общая доходность (2 года) | +$40,600 (+406%) | «Вот оно. Увольняюсь с работы.» |
Как Крис оптимизировал:
- Перебрал 50 периодов EMA (нашёл, что EMA(34) «идеальна»)
- Перебрал 20 множителей ATR для стопов (нашёл, что 1,47× ATR «оптимально»)
- Перебрал 15 уровней цели (нашёл, что 2,8R «лучше всего»)
- Итоговая стратегия: пересечение EMA(34) + стоп на 1,47× ATR + цель 2,8R
- Всего проверено сочетаний: 50 × 20 × 15 = 15 000 вариантов
Чего Крис не заложил в backtest:
- slippage (предположил идеальные исполнения по точным ценам)
- Спред между покупкой и продажей (предположил нулевой спред)
- Комиссии (просто забыл о них)
- Отклонение заявок (предположил 100 % исполнение)
- Проверку out-of-sample (ни разу не проверил на невиданных данных)
Реальность живой торговли (апрель-июнь 2024 года, 10 недель)
| Показатель | Backtest | Реальность в реале | Разница |
|---|---|---|---|
| Доля прибыльных | 67.3% | 51.4% (19W / 18L) | на 15,9 пункта хуже |
| Средняя прибыль | +2.4R (+$1,200) | +1.8R (+$900) | на 25 % меньше |
| Средний убыток | -1R (-$500) | -1.3R (-$650) | на 30 % больше |
| Профит-фактор | 4.9 | 1.46 | обвал на 70 % |
| Матожидание | +1.3R | -0,45R после издержек | -1,75R ОТРИЦАТЕЛЬНО |
| Максимальный drawdown | -8.2% | -21.4% | в 2,6 раза хуже |
| Общая доходность (10 недель) | +9 600 $ по прогнозу | -$8,400 (-16.8%) | разрыв 18 000 $ |
Полная бухгалтерия: куда делись 18 000 $
| Статья издержек | Описание | Влияние |
|---|---|---|
| 1. Переобучение (подгонка кривой) | EMA(34) + 1,47× ATR идеально работали на данных 2022-2023, но были подогнаны под исторический шум. Условия рынка 2024 года = другой шум. | -$6,200 |
| 2. slippage (не был заложен) | В среднем 0,08 % slippage на сделку × 25 000 $ средней позиции × 37 сделок туда и обратно = 1 480 $ издержек на slippage | -$1,480 |
| 3. Спред между покупкой и продажей | Спред SPY 0,01 $ × в среднем 500 бумаг × 37 сделок = 185 $. Опционы (использовались ради плеча) спред = 0,03 $ на бумагу × 100 бумаг в контракте × 20 контрактов × 37 сделок = 2 220 $ общих издержек на спред | -$2,405 |
| 4. Комиссии | Опционы: 0,65 $ за контракт × 20 контрактов × 37 сделок × 2 (туда и обратно) = 962 $ | -$962 |
| 5. Отклонённые заявки | В 8 сделках лимитные заявки так и не исполнились (упущено 5 прибыльных и 3 убыточных). Чистые упущенные возможности: 5 прибыльных по +1,8R упущено (-9R) минус 3 убыточных по -1,3R, которых удалось избежать (+3,9R) = -5,1R = 2 550 $ | -$2,550 |
| 6. Заглядывание в будущее | Код backtest считал вход по close[0] и входил на закрытии той же свечи (в реале невозможно). В реале вход — на открытии следующей свечи. Вход в среднем на 0,3 % хуже = 2 775 $ ухудшения | -$2,775 |
| 7. Задержки исполнения | Задержка платформы + время на проверку заявки = 2-8 секунд. Быстрые пробои успевали уйти в среднем на 0,15 % до исполнения = 1 387 $ slippage из-за задержек | -$1,387 |
| СОВОКУПНОЕ УХУДШЕНИЕ ОТНОСИТЕЛЬНО BACKTEST: | -$17,759 | |
Расчёт:
- Прогноз прибыли по backtest (10 недель): +9 600 $
- Минус издержки ухудшения: -17 759 $
- Ожидаемый результат в реале: -8 159 $
- Фактический результат в реале: -8 400 $ — расчёт сходится с тем, что произошло на самом деле, с точностью до 250 $
Что нужно было сделать: проверка по правилам
| Шаг | Что сделал Крис (неправильно) | Что следовало сделать (правильно) |
|---|---|---|
| 1. Разделение данных | Использовал для оптимизации все данные 2022-2023 | Оптимизировать на 2022 году, а 2023-й отложить для проверки out-of-sample |
| 2. Оптимизация | Перебрал 15 000 сочетаний параметров | Использовать стандартные параметры (EMA 20/50, стопы на 2× ATR). Ограничить перебор менее чем 10 вариантами |
| 3. Моделирование издержек | Предположил нулевые издержки | Заложить 0,10 % slippage + 0,01 $ спреда + 2 $ комиссии на сделку = минимум -30 $ на сделку |
| 4. Проверка на заглядывание вперёд | Использовал закрытие той же свечи и для сигнала, и для исполнения | Сигнал на close[0], исполнение на open[1] (следующая свеча). Реалистичный тайминг. |
| 5. Проверка out-of-sample | Ни разу не проверил на невиданных данных | Проверить на данных 2023 года (нетронутых). Если результат ухудшается больше чем на 30 %, стратегия переобучена |
| 6. Walk-forward | Один-единственный период backtest | Окна оптимизации по 6 месяцев, проверка на следующих 3 месяцах. Повторять со сдвигом вперёд. Смотреть на устойчивость. |
Проверка out-of-sample, которую Крису следовало сделать
Правильный порядок:
- Период in-sample: Оптимизировать только на данных 2022 года (2023-й не трогать)
- Найти параметры: EMA(34) + 1,47× ATR (тот же результат, но получен только по 2022 году)
- Зафиксировать параметры: БОЛЬШЕ НИКАКИХ ИЗМЕНЕНИЙ. Параметры заморожены.
- Проверка out-of-sample: Прогнать ровно эти параметры на данных 2023 года
- Сравнить результаты: Если результат 2023 года ниже 70 % от результата 2022 года, стратегия переобучена
Что бы получилось:
| Период | Матожидание | Профит-фактор | Вердикт |
|---|---|---|---|
| 2022 (in-sample) | +1.4R | 3.1 | Оптимизированный результат |
| 2023 (out-of-sample) | +0.4R | 1.4 | ⚠️ ухудшение на 71 % |
| Вывод: Стратегия сильно переобучена. Матожидание 2023 года — 29 % от матожидания 2022 года. С реалистичными издержками (-30 $ на сделку = -0,15R) чистое матожидание остаётся +0,25R (едва выше нуля). НЕ ЗАПУСКАТЬ. | |||
Урок: backtest Криса был фантазией. Если перебрать 15 000 сочетаний параметров, одно из них гарантированно ляжет на исторический шум идеально. То «идеальное» матожидание в 1,3R было подогнанным мусором. Проверка out-of-sample показала бы это до потери 8 400 $. Backtesting нужен не для того, чтобы найти лучший результат в прошлом, а для того, чтобы найти то, что будет работать дальше. А для этого нужны невиданные данные, реалистичные издержки и полное отсутствие заглядывания в будущее.
Почему ваша идеальная стратегия провалится в реале
Начнём с неудобной правды: если вы оптимизировали стратегию так, чтобы она легла на исторические данные, вы нашли не преимущество. Вы нашли шум.
Подгонка кривой под случайный шум
Что это: Крутить параметры, пока backtest не станет выглядеть идеально
Пример:
- Вы перебираете 100 разных периодов EMA (10, 11, 12… 110)
- EMA(47) даёт в backtest матожидание 4,2R
- Вам кажется, что вы нашли «волшебное число»
Реальность: EMA(47) просто случайно легла на этот конкретный набор данных. А в проверке вперёд? Матожидание -0,8R. Вы выучили шум, а не сигнал.
Лучше: Ограничьте оптимизацию. Берите стандартные параметры. Проверяйте на невиданных данных.
Использовать данные из будущего (в реале это невозможно)
Что это: Код, который «подглядывает» в будущие свечи, чтобы решить сейчас
Пример:
if close[0] > high[5]: # использует 5 БУДУЩИХ свечей
enter_long()
Проблема: В backtesting у вас есть данные из будущего. В реальной торговле — нет.
Реальность: Этот код в реале попросту не может исполниться. Ваш backtest проверяет стратегию, которой не существует.
Лучше: Используйте только те данные, которые доступны в момент решения.
Предполагать идеальные исполнения по идеальным ценам
Допущение в backtest: «Я покупаю ровно по 100,00 $»
Реальность: Рыночная заявка исполняется по 100,12 $ (спред + slippage)
Влияние на 100 сделках:
- Прибыль по backtest: 5 000 $
- Издержки на спред (0,10 $ за сделку): -1 000 $
- slippage (0,05 $ за сделку): -500 $
- Комиссии (2 $ за сделку): -200 $
Реальность: Настоящая прибыль = 3 300 $ (на 34 % меньше, чем в backtest)
Проверять только на выживших
Что это: Делать backtesting только по нынешнему составу S&P 500
Проблема: Вы выбрасываете более 200 бумаг, которые были исключены из листинга или обанкротились
Пример:
- Backtest по списку S&P 500 на 2024 год: матожидание 1,8R, профит-фактор 2,1
- Но за этот период вы были бы в лонге по Hertz (банкротство в 2020-м), по SVB Financial (крах в 2023-м) и по всем остальным именам, ушедшим в ноль.
Реальность: Ваше матожидание не учитывает катастрофические убытки от исключений из листинга. Настоящее матожидание: -0,2R (убыточная система).
💡 момент озарения
Backtest — это не реальность. Это симуляция. И если в вашу симуляцию заложены невозможные допущения, ваши результаты в реале окажутся столь же невозможными.
Скрытые издержки, которые убивают стратегии
Вот что большинство backtest игнорирует — и почему ваш, скорее всего, на 20-40 % оптимистичнее правды:
Шаг 1: смоделировать спред между покупкой и продажей
Что это: Разница между ценой покупки и ценой продажи
Пример:
- SPY покупка: 450,00 $ / продажа: 450,01 $ → спред = 0,01 $
- Вы покупаете: платите 450,01 $ (половина спреда = 0,005 $)
- Вы продаёте: получаете 450,00 $ (половина спреда = 0,005 $)
Издержки за круг: $0.01
Для 1 000 бумаг: 0,01 $ × 1 000 = 10 $ за сделку
100 сделок: 1 000 $ издержек на спред
Шаг 2: смоделировать slippage
Что это: Разница между желаемой ценой и фактическим исполнением
Реалистичный slippage по условиям:
- Обычная ликвидность: 0.01-0.02%
- Волатильные рынки: 0.05-0.10%
- Тонкая ликвидность: 0.10-0.30%
- Крупный размер позиции: 0.20-0.50%
Консервативное допущение: 0,05 % на сделку
Позиция 10 000 $ × 0,05 % = 5 $ slippage с каждой стороны = 10 $ за круг
Шаг 3: смоделировать комиссии
Пример: Interactive Brokers
- 0,005 $ за бумагу, минимум 1 $
- 200 бумаг × 0,005 $ = 1 $ с каждой стороны
- За круг = 2 $
100 сделок: 200 $ комиссий
Шаг 4: итоговые реалистичные издержки
На сделку (за круг):
- Спред: 10 $
- slippage: 10 $
- Комиссия: 2 $
Итого: 22 $ за сделку
Если ваша стратегия приносит 50 $ валовой прибыли за сделку → 28 $ чистыми (на 44 % меньше!)
Пример пересчёта backtest
До и после реалистичных издержек
Стратегия: 100 сделок, в среднем 50 $ прибыли на сделку
Backtest (фантазия):
100 сделок × 50 $ = 5 000 $ прибыли
После реалистичных издержек:
- Валовая: 5 000 $
- Спред: -1 000 $
- slippage: -1 000 $
- Комиссии: -200 $
Чистая прибыль: 2 800 $ (на 44 % меньше)
Единственная проверка, которая имеет значение
Вот как стратегию проверяют профессионалы:
Разделите данные на два периода.
- In-sample (60-70 %): Здесь вы разрабатываете и оптимизируете стратегию
- Out-of-sample (30-40 %): Проверка на НЕВИДАННЫХ данных
🎯 Пример: 6 лет данных (2018-2024)
In-sample: 2018-2022 (оптимизируем здесь)
- Пробуйте разные параметры
- Ищите правила с лучшим результатом
- Оттачивайте логику входа и выхода
Out-of-sample: 2023-2024 (проверяем здесь)
- Прогоните стратегию БЕЗ ЕДИНОГО изменения
- Сравните результат с периодом in-sample
- Похоже → не переобучена!
- Заметно хуже → подогнана под шум in-sample
Красные флаги переобучения
🚩 Признаки того, что ваша стратегия подогнана под кривую
- Шарп выше 3,0: Слишком хорошо, чтобы быть правдой
- Матожидание выше 5R: Крайне редко (проверьте свои допущения об исполнении)
- Всего 20-30 сделок: Выборка слишком мала (статистически бессмысленно)
- Идеальная кривая капитала: Гладкая линия без drawdown (невозможно)
- Проверено только на одном инструменте: Скорее всего, подогнано под этот конкретный режим
- 10 и более оптимизированных параметров: Вы подогнали шум, а не сигнал
Профессиональный метод проверки
In-sample против out-of-sample — это хорошо. Walk-forward — лучше.
Как это работает:
📊 Схема walk-forward
Период 1: Обучение на 2018-2019 → проверка на 2020
Период 2: Обучение на 2019-2020 → проверка на 2021
Период 3: Обучение на 2020-2021 → проверка на 2022
Период 4: Обучение на 2021-2022 → проверка на 2023
Если результат устойчив во всех периодах: Надёжная стратегия
Если результат ухудшается: Переобучена или зависит от режима
🎓 Главное
- Моделируйте реалистичные издержки: Спред, slippage, комиссии (прибыль ниже на 20-40 %)
- Избегайте переобучения: Ограничивайте параметры, проверяйте на нескольких рынках
- In-sample против out-of-sample: Разрабатывайте на 60-70 %, проверяйте на 30-40 %
- Проверка walk-forward: Убедитесь в устойчивости во времени
- Красные флаги: Шарп выше 3,0, матожидание выше 5R, меньше 30 сделок
- Проверьте вперёд, прежде чем идти в реал: Минимум 3-6 месяцев на бумаге
🎯 Практика проверки backtest
Задание: проверьте свою стратегию детектором красных флагов
Возьмите свою текущую стратегию (или ту, которую рассматриваете) и прогоните через проверку:
- Сделайте backtest на 60 % своих данных (in-sample). Запишите: сделки, матожидание, Шарп, максимальную просадку
- Выпишите использованные параметры (EMA, пороги и так далее). Вы подбирали их, перебирая несколько значений?
- Проверьте на оставшихся 40 % данных (out-of-sample). Сравните с результатом in-sample.
- Возьмите проверочную карту из шаблона (8 категорий, максимум 60 баллов)
- Посчитайте свой балл: 50-60 = идём дальше, 40-49 = дорабатываем, ниже 40 = выбрасываем
- Если балл не ниже 50: проведите 30-60 сделок на бумаге, прежде чем выходить в реал
Цель: Ловите подгонку кривой, заглядывание в будущее и нереалистичные допущения ДО того, как они разнесут ваш настоящий счёт. Лучше выбросить плохую стратегию в backtesting, чем потерять настоящие деньги.
🎮 Быстрая проверка
В: Вы делаете backtest стратегии: матожидание 5,2R, коэффициент Шарпа 4,2, проверено на 25 сделках, с EMA(47), потому что она дала лучший результат после перебора 100 разных периодов. Что здесь не так?
Вы делаете backtest стратегии возврата к среднему по SPY с 2010 по 2024 год. Результат: матожидание 2,8R, 68 % прибыльных, 120 000 $ прибыли. В данных только нынешний состав S&P 500 (те бумаги, что в индексе сегодня). В 2025 году вы выходите в реал — и терпите неудачу. Что пошло не так?
Вы делаете walk-forward-проверку стратегии: обучение на 2018-2020, проверка на 2021 (пройдено). Обучение на 2018-2021, проверка на 2022 (пройдено). Обучение на 2018-2022, проверка на 2023 (пройдено). Ни slippage, ни комиссии вы не моделировали. Стоит ли торговать эту стратегию в реале?
В backtesting совершенство подозрительно. Реализм — вот преимущество. Моделируйте издержки, избегайте переобучения, проверяйте вперёд — или проваливайтесь в реале.
Связанные уроки
Мастерство торгового дневника
Отслеживайте результат в реале и сравнивайте его с результатами backtest.
Читать урок →Размер позиции
Задавайте в backtest корректный размер позиции, чтобы результаты были реалистичными.
Читать урок →Распознавание режима
Проверьте стратегию во всех режимах, чтобы убедиться в её надёжности.
Читать урок →⏭️ Дальше
Урок #33: продвинутое управление риском — профессиональные схемы — Изучите критерий Келли, динамический размер позиции и протоколы на случай drawdown.
Только в образовательных целях. Торговля сопряжена со значительным риском убытков. Прошлые результаты не гарантируют будущих.
💬 Обсуждение (0 комментариев)
Загрузка комментариев…
Готовы торговать с Signal Pilot?
Примените полученные знания с профессиональными индикаторами и инструментами анализа рынка в реальном времени.
Вернуться в Signal Pilot →Только в образовательных целях. Торговля сопряжена со значительным риском убытков. Это не финансовая консультация. Прошлые результаты не гарантируют будущих.