Почему ваш робот из конструктора сливает на реале: 5 ошибок отладки, о которых молчат
Две недели назад я получил сообщение от читателя. Он собрал стратегию в TSLab. Бэктест на трёх годах истории показал фантастику: +280% годовых, максимальная просадка 8%.
Он залил стратегию на демо-счёт. Через месяц результат: минус 12%.
Что пошло не так? Проблема не в конструкторе. Проблема в том, как он тестировал.
Это классическая история. Визуальные конструкторы делают сборку стратегии простой. Но они не делают её корректной. И большинство ошибок происходят не во время сборки, а во время тестирования.
В этой статье — пять грабель, на которые наступают 90% новичков в конструкторах. И как их избежать.
Ошибка #1: Переоптимизация (Curve Fitting)
Что это:
Вы берёте стратегию, запускаете оптимизацию параметров. Пробуете SMA от 10 до 100 с шагом 1. Пробуете RSI от 20 до 80 с шагом 5. Находите комбинацию, которая даёт лучший результат на истории.
Поздравляю: вы только что создали стратегию, которая работает только на этой конкретной истории.
Почему это опасно:
Curve fitting — это когда стратегия подстраивается под исторические данные так сильно, что перестаёт работать на новых. Вы нашли не закономерность рынка, а случайный шум.
Реальный пример:
Оптимизация SMA-кросса на данных 2020-2023. Лучший результат: SMA(37) и SMA(83). Доходность +180% годовых.
Запуск на 2024 году: минус 5%.
Почему? Потому что комбинация 37/83 не имеет логической основы. Это подгонка под шум.
Как распознать:
- Слишком много параметров (больше 3-4)
- Идеальные результаты на истории (200%+ годовых без просадок)
- Параметры выглядят случайными (37, 83 вместо круглых чисел 20, 50)
- Результат резко падает при изменении параметра на 1-2 единицы
Как избежать:
1. Ограничьте количество параметров
Для классического тестирования используйте не более 2 оптимизируемых параметров. Чем меньше — тем лучше.
Простая стратегия живёт дольше. Сложная умирает быстро.
2. Out-of-Sample тестирование
Разделите историю на две части:
- In-Sample (70%): Оптимизация параметров
- Out-of-Sample (30%): Проверка результатов
Если результаты на Out-of-Sample значительно хуже — переоптимизация.
В TSLab: Оптимизируйте на 2020-2022, тестируйте на 2023.
В Designer: Та же логика, вручную меняйте период.
3. Walk-Forward Analysis
Ещё надёжнее: прогоняйте скользящее окно.
Пример:
- Оптимизация на 2020-2021, тест на 2022
- Оптимизация на 2021-2022, тест на 2023
- Оптимизация на 2022-2023, тест на 2024
Если стратегия держится во всех периодах — она робастная.
4. Проверьте стабильность параметров
Постройте heat map результатов оптимизации.
Если лучший результат — единичное “горячее пятно” среди моря красного — это переоптимизация.
Если есть широкое “плато” хороших результатов — стратегия устойчива к изменениям параметров. Это хорошо.
TSLab и NinjaTrader показывают 3D-графики оптимизации. Используйте их.
Ошибка #2: Look-Ahead Bias (Заглядывание в будущее)
Что это:
Ваша стратегия случайно использует информацию, которая ещё не была доступна в момент принятия решения.
Классический пример:
Вы используете индикатор на закрытии свечи, но сигнал генерируется на открытии следующей.
Проблема: когда свеча закрывается, вы уже знаете её High/Low/Close. В реальной торговле — нет.
Где это встречается:
В TSLab:
TSLab считает время свечи как время начала. Если не учитывать это — легко сделать look-ahead.
Пример: Блок “Цена закрытия” на свече N возвращает значение, которое будет известно только после закрытия этой свечи.
Если вы генерируете сигнал на основе Close[0] — это look-ahead. Надо использовать Close[1].
В Designer:
То же самое. Designer работает на закрытых свечах. Если логика строится на текущей свече — проверьте, доступны ли эти данные в реальном времени.
В NinjaTrader:
Strategy Builder имеет опцию “Calculate on bar close”. Если она выключена — сигналы генерируются на каждом тике, включая незакрытые свечи. Если включена — только на закрытии.
Для большинства стратегий нужно “Calculate on bar close = true”.
Как избежать:
- Используйте только закрытые свечи
- Если стратегия на H1, сигнал появляется только после закрытия часовой свечи
- Не используйте данные текущей свечи для генерации сигнала
- Проверьте задержку в данных
- Макроэкономические данные публикуются с задержкой
- Новости появляются не мгновенно
- Финансовая отчётность пересматривается
- Запустите на демо перед боевым тестом
- Если бэктест показывает 100 сделок в месяц, а на демо — 10, проблема в look-ahead
Ошибка #3: Survivorship Bias (Ошибка выжившего)
Что это:
Вы тестируете стратегию на акциях, которые существуют сегодня. Но за три года часть компаний обанкротилась, делистнулась, была поглощена.
В вашем бэктесте их нет. А в реальной торговле они были.
Реальный пример:
Стратегия на российских акциях. Бэктест на 2020-2023. В списке тестируемых акций:
- Сбербанк ✅
- Газпром ✅
- Яндекс ✅
- ТКС Холдинг ✅
Но нет:
- Русал (делистинг в 2022) ❌
- Московская биржа (временный делистинг 2022) ❌
- Акций, которые упали на 90% и пропали с радаров ❌
Ваша стратегия “забыла” про убытки на этих бумагах. Survivorship bias завышает доходность на 1-4% годовых.
Где это встречается:
В TSLab и Designer:
Если вы загружаете список акций через подключение к брокеру — вы получаете только текущие акции. Делистнутых там нет.
В NinjaTrader:
Та же проблема с фьючерсами. Истекшие контракты часто не попадают в бэктест.
Как избежать:
- Используйте базы данных с делистнутыми бумагами
- QuantConnect, Norgate Data предоставляют survivorship-bias-free данные
- Для российского рынка — сложнее, таких баз мало
- Тестируйте на индексе, а не на отборных акциях
- Если стратегия на акциях ММВБ — берите весь индекс ММВБ, а не топ-10
- Проверьте, сколько бумаг исчезло за период теста
- Если тестируете 3 года, а список акций не изменился — проблема
- Добавляйте фильтры ликвидности
- Стратегия не должна торговать акции с оборотом <10 млн рублей в день
- Это снижает риск попасть в бумаги перед делистингом
Ошибка #4: Игнорирование комиссий, проскальзываний и реалий исполнения
Что это:
Бэктест предполагает: вы всегда покупаете по цене, которую хотите. Заявка исполняется мгновенно. Комиссия = 0.
Реальность: комиссии, проскальзывания, задержки, частичное исполнение.
Реальный пример:
Стратегия на минутках. 200 сделок в месяц. Средняя прибыль на сделку: 0.15%.
Комиссия брокера: 0.05% на вход, 0.05% на выход. Итого 0.1% на круг.
Чистая прибыль: 0.15% - 0.1% = 0.05% на сделку.
200 сделок * 0.05% = 10% в месяц. Вроде норм.
Но добавьте проскальзывание 0.03% на сделку. Теперь: 0.15% - 0.1% - 0.03% = 0.02%.
200 сделок * 0.02% = 4% в месяц. Уже не так впечатляюще.
А если спред широкий (неликвидная бумага), проскальзывание 0.1%? Стратегия убыточна.
Как избежать:
1. Настройте комиссии в конструкторе
TSLab: Настройки → Торговля → Комиссии. Укажите реальные комиссии брокера (обычно 0.03-0.05%).
Designer: В окне бэктеста есть поле “Комиссия”. Установите в абсолютных величинах (рубли) или процентах.
NinjaTrader: Strategy → Properties → Commission. Укажите комиссию на контракт.
fxDreema: В сгенерированном MQL-коде нужно добавить проверку спреда вручную.
2. Добавьте проскальзывание (slippage)
TSLab и NinjaTrader позволяют настроить slippage отдельно. Для розничного трейдера на ликвидных бумагах: 1-3 тика.
Для неликвидных: 5-10 тиков или больше.
3. Тестируйте на реальном спреде
Если стратегия торгует внутри спреда (скальпинг) — проверьте, покрывает ли прибыль размер спреда.
Формула простая:
Прибыль на сделку > Комиссия * 2 + Средний спред + Проскальзывание
Если нет — стратегия не выживет на реале.
4. Проверьте количество сделок
Чем больше сделок, тем сильнее влияние комиссий.
100 сделок в год — комиссии не критичны.
1000 сделок в год — комиссии могут съесть всю прибыль.
Правило: Если стратегия даёт <0.5% на сделку после комиссий — она на грани. Малейшее ухудшение рынка убьёт её.
Ошибка #5: Отсутствие Forward Testing
Что это:
Бэктест — это тест на прошлом. Forward test — тест на будущем (но без реальных денег).
Forward testing показывает, как стратегия работает на данных, которые она никогда не видела.
Почему это важно:
Допустим, вы оптимизировали стратегию на 2020-2023. Результаты отличные. Вы запускаете её на реале в 2024.
Проблема: рынок в 2024 может вести себя иначе. Волатильность изменилась. Корреляции сломались.
Forward test на демо-счёте позволяет проверить это до того, как вы потеряете деньги.
Как делать Forward Testing:
1. Запустите на демо-счёте
Минимальный срок: 3-6 месяцев.
Почему так долго? Потому что:
- Нужно поймать разные рыночные режимы (тренд, флэт, волатильность)
- Нужно набрать минимум 50-100 сделок
- Нужно проверить психологическую устойчивость (да, даже на демо)
2. Ведите дневник сделок
Записывайте:
- Вход/выход
- Причину сделки (какой блок сгенерировал сигнал)
- Отклонение от бэктеста (если есть)
Если на демо результаты значительно хуже бэктеста — что-то сломалось. Вернитесь к отладке.
3. Сравните метрики
| Метрика | Бэктест | Forward Test |
|---|---|---|
| Win Rate | 65% | ? |
| Средняя прибыль | 1.2% | ? |
| Средний убыток | -0.8% | ? |
| Максимальная просадка | 12% | ? |
| Количество сделок/месяц | 20 | ? |
Если отклонение больше 20-30% — проблема.
4. Используйте paper trading в платформах
TradingView: Бесплатный paper trading через виртуальный счёт.
AlgoTest: Paper trading с детальной аналитикой.
TSLab/Designer: Запуск на симуляции с реальным подключением к брокеру (но без отправки заявок).
5. Не спешите
Самая частая ошибка: протестировать неделю на демо, увидеть прибыль, залить на реал.
Неделя — это ничто. Нужно минимум 2-3 месяца, чтобы понять, как стратегия ведёт себя в разных условиях.
Чек-лист перед запуском стратегии на реале
Прежде чем нажать “Start” на боевом счёте, пройдитесь по этому списку:
Тестирование
- Стратегия протестирована минимум на 2 годах истории
- Проведён out-of-sample тест (30% истории)
- Количество параметров ≤ 3
- Параметры логически обоснованы (не подгонка под шум)
- Результаты стабильны при изменении параметров на ±10%
Биасы
- Проверено отсутствие look-ahead bias (только закрытые свечи)
- Учтён survivorship bias (или минимизирован фильтрами)
- Добавлены реалистичные комиссии (0.03-0.05%)
- Добавлено проскальзывание (1-3 тика для ликвидных бумаг)
- Стратегия прибыльна после комиссий и проскальзываний
Forward Testing
- Стратегия протестирована на демо-счёте минимум 3 месяца
- Набрано минимум 50 сделок
- Результаты на демо близки к бэктесту (отклонение <30%)
- Ведётся дневник сделок
- Проверена работа в разных рыночных режимах (тренд, флэт, волатильность)
Риск-менеджмент
- Максимальный риск на сделку ≤ 2% депозита
- Максимальная просадка в бэктесте ≤ 20%
- Есть план действий при просадке >15%
- Размер позиции рассчитан исходя из волатильности инструмента
Если хотя бы один пункт не выполнен — не запускайте на реале.
Инструменты для отладки в конструкторах
TSLab
Плюсы:
- Встроенный отладчик с пошаговым выполнением
- Визуализация сделок на графике
- Детальный отчёт по каждой сделке
- 3D-визуализация оптимизации
Минусы:
- Нет автоматического out-of-sample теста
- Проблемы с тиковыми данными
StockSharp Designer
Плюсы:
- Гибкая настройка комиссий и проскальзываний
- Поддержка тиковых и стаканных данных
- Экспорт в C# для глубокой отладки
Минусы:
- Меньше документации по отладке
- Визуализация хуже, чем в TSLab
NinjaTrader Strategy Builder
Плюсы:
- Интеграция с Visual Studio для отладки кода
- Подробные логи исполнения
- Market Replay для пошагового тестирования
Минусы:
- Сложнее настроить для новичка
- Дорого (150 тысяч рублей за lifetime)
fxDreema
Плюсы:
- Генерирует MQL-код, который можно отладить в MetaEditor
- Визуальный тестер MetaTrader
Минусы:
- Ограничения бесплатной версии (10 соединений между блоками)
- Нужно знать MQL для глубокой отладки
Итоги
Визуальные конструкторы делают создание стратегий простым. Но отладка остаётся сложной.
Пять главных ошибок:
- Переоптимизация — подгонка под исторический шум
- Look-ahead bias — использование будущих данных
- Survivorship bias — игнорирование делистнутых бумаг
- Игнорирование комиссий — нереалистичные предположения об исполнении
- Отсутствие forward testing — запуск на реал без проверки на демо
Что делать:
- Ограничьте параметры (≤3)
- Делайте out-of-sample тест
- Проверяйте наличие look-ahead
- Добавляйте реалистичные комиссии и проскальзывания
- Тестируйте на демо минимум 3 месяца
Корректный бэктест — это не про красивые графики доходности. Это про честный ответ на вопрос: “Будет ли это работать на реале?”
Если бэктест показывает 300% годовых — скорее всего, где-то ошибка. Реалистичная доходность для розничного алготрейдинга: 20-50% годовых при просадке 10-20%.
Если ваши результаты сильно лучше — вернитесь к пунктам выше. Что-то пропустили.
Полезные ссылки:
Исследования и источники:
- TradingView: How to Debug Pine Script
- FTMO Academy: Forward Testing of Trading Strategies
- AlgoTest: Paper Trading Guide
- QuantifiedStrategies: Curve Fitting in Trading
- Build Alpha: 3 Ways to Reduce Curve-Fitting Risk
- AlgoTrading101: What is Overfitting in Trading?
- Auquan: Backtesting Biases and How To Avoid Them
- LuxAlgo: Survivorship Bias Explained
- Empirix: Переоптимизация стратегий
- LONG/SHORT: Проверка стратегий на исторических данных
- TSLab Documentation: Работа агента и особые ситуации
- EA Trading Academy: Walk Forward Testing
Обсуждение
Присоединяйтесь к обсуждению в нашем Telegram-чате!