Две недели назад я получил сообщение от читателя. Он собрал стратегию в 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”.

Как избежать:

  1. Используйте только закрытые свечи
    • Если стратегия на H1, сигнал появляется только после закрытия часовой свечи
    • Не используйте данные текущей свечи для генерации сигнала
  2. Проверьте задержку в данных
  3. Запустите на демо перед боевым тестом
    • Если бэктест показывает 100 сделок в месяц, а на демо — 10, проблема в look-ahead

Ошибка #3: Survivorship Bias (Ошибка выжившего)

Что это:

Вы тестируете стратегию на акциях, которые существуют сегодня. Но за три года часть компаний обанкротилась, делистнулась, была поглощена.

В вашем бэктесте их нет. А в реальной торговле они были.

Реальный пример:

Стратегия на российских акциях. Бэктест на 2020-2023. В списке тестируемых акций:

  • Сбербанк ✅
  • Газпром ✅
  • Яндекс ✅
  • ТКС Холдинг ✅

Но нет:

  • Русал (делистинг в 2022) ❌
  • Московская биржа (временный делистинг 2022) ❌
  • Акций, которые упали на 90% и пропали с радаров ❌

Ваша стратегия “забыла” про убытки на этих бумагах. Survivorship bias завышает доходность на 1-4% годовых.

Где это встречается:

В TSLab и Designer:

Если вы загружаете список акций через подключение к брокеру — вы получаете только текущие акции. Делистнутых там нет.

В NinjaTrader:

Та же проблема с фьючерсами. Истекшие контракты часто не попадают в бэктест.

Как избежать:

  1. Используйте базы данных с делистнутыми бумагами
    • QuantConnect, Norgate Data предоставляют survivorship-bias-free данные
    • Для российского рынка — сложнее, таких баз мало
  2. Тестируйте на индексе, а не на отборных акциях
    • Если стратегия на акциях ММВБ — берите весь индекс ММВБ, а не топ-10
  3. Проверьте, сколько бумаг исчезло за период теста
    • Если тестируете 3 года, а список акций не изменился — проблема
  4. Добавляйте фильтры ликвидности
    • Стратегия не должна торговать акции с оборотом <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-визуализация оптимизации

Минусы:

StockSharp Designer

Плюсы:

  • Гибкая настройка комиссий и проскальзываний
  • Поддержка тиковых и стаканных данных
  • Экспорт в C# для глубокой отладки

Минусы:

  • Меньше документации по отладке
  • Визуализация хуже, чем в TSLab

NinjaTrader Strategy Builder

Плюсы:

  • Интеграция с Visual Studio для отладки кода
  • Подробные логи исполнения
  • Market Replay для пошагового тестирования

Минусы:

  • Сложнее настроить для новичка
  • Дорого (150 тысяч рублей за lifetime)

fxDreema

Плюсы:

  • Генерирует MQL-код, который можно отладить в MetaEditor
  • Визуальный тестер MetaTrader

Минусы:

  • Ограничения бесплатной версии (10 соединений между блоками)
  • Нужно знать MQL для глубокой отладки

Итоги

Визуальные конструкторы делают создание стратегий простым. Но отладка остаётся сложной.

Пять главных ошибок:

  1. Переоптимизация — подгонка под исторический шум
  2. Look-ahead bias — использование будущих данных
  3. Survivorship bias — игнорирование делистнутых бумаг
  4. Игнорирование комиссий — нереалистичные предположения об исполнении
  5. Отсутствие forward testing — запуск на реал без проверки на демо

Что делать:

  • Ограничьте параметры (≤3)
  • Делайте out-of-sample тест
  • Проверяйте наличие look-ahead
  • Добавляйте реалистичные комиссии и проскальзывания
  • Тестируйте на демо минимум 3 месяца

Корректный бэктест — это не про красивые графики доходности. Это про честный ответ на вопрос: “Будет ли это работать на реале?”

Если бэктест показывает 300% годовых — скорее всего, где-то ошибка. Реалистичная доходность для розничного алготрейдинга: 20-50% годовых при просадке 10-20%.

Если ваши результаты сильно лучше — вернитесь к пунктам выше. Что-то пропустили.


Полезные ссылки:

Исследования и источники: