Перейти к содержимому
Trading Terminal
Личный кабинет
Опубликовано

Основные ошибки бэктестинга в TradingView: чек-лист стратегии

Красивый отчет Strategy Tester ничего не доказывает, пока не учтены будущие данные, комиссия, проскальзывание, ликвидность и модель исполнения внутри бара. Проверяйте сначала достоверность сделок, потом доходность.

TradingViewбэктестингстратегии
Чек-лист проверки бэктеста торговой стратегии в TradingView

Порядок проверки важнее набора метрик. Сначала докажите, что стратегия не видит будущее и исполняет сделки по доступным ценам. Затем добавьте расходы и ограничения. Только после этого анализируйте прибыль, просадку и стабильность.

Быстрый аудит результата

Если на любой вопрос ответ «не знаю», отчет пока нельзя считать рабочим:

  • Использует ли код будущие данные через request.security() или pivot?
  • Меняются ли сигналы после перезагрузки?
  • По какой цене и на каком баре исполняется заявка?
  • Учтены ли комиссия, спред и проскальзывание?
  • Может ли заявленный объем реально исполниться?
  • Проверялись ли соседние параметры и другой период?
  • Есть ли отдельная out-of-sample выборка?

Слои достоверного бэктеста TradingView

1. Lookahead bias: стратегия знает будущее

Это критическая ошибка. Она возникает, когда исторический бар получает значение, которое в тот момент еще не существовало. Типичный пример — финальный close дневной свечи, распространенный на внутридневные бары через barmerge.lookahead_on без правильного смещения.

Также будущее появляется, когда pivot рисуется назад, а стратегия входит в точке разворота, хотя подтверждение пришло через несколько баров.

Проверка проста по смыслу: для каждого входного значения назовите момент его публикации. Вход не может быть раньше. Технические варианты разобраны в статье почему индикатор перерисовывается и в официальном разделе Other timeframes and data.

2. Перерисовывающийся сигнал принят за исторический факт

Условие на незакрытой свече может появиться и исчезнуть. После перезагрузки Strategy Tester видит только финальный OHLC бара. Если реальное решение принималось внутри свечи, историческая модель должна воспроизводить этот режим, а не заменять его красивым close.

Для стратегии по закрытию используйте подтвержденные бары. Для intrabar-логики сохраняйте realtime-наблюдения и тестируйте модель исполнения отдельно.

3. Не учтены комиссии

Частая стратегия может выглядеть прибыльной до добавления комиссии и стать отрицательной после. Укажите тип комиссии в strategy() или свойствах тестера и используйте фактический тариф.

Учитывайте:

  • комиссию за сделку или процент оборота;
  • maker/taker различия;
  • минимальную комиссию;
  • биржевые и клиринговые сборы;
  • funding для бессрочных фьючерсов;
  • заем и дивиденды для short, если применимо.

Официальная документация Strategies показывает параметры commission_type, commission_value и примеры влияния расходов на результат.

4. Проскальзывание задано нулем

Рыночная заявка не обязана исполняться по close сигнального бара. Между расчетом, доставкой и исполнением цена меняется. На стоп-заявках отклонение усиливается во время гэпа.

Проверьте три сценария:

Сценарий Комиссия Проскальзывание Зачем
Базовый Фактическая Обычное для ликвидности Ожидаемая работа
Консервативный Выше фактической 2–3 обычных значения Запас устойчивости
Стрессовый Неблагоприятная Волатильный рынок Граница разрушения идеи

Если небольшое ухудшение расходов уничтожает преимущество, стратегия слишком хрупкая для автоматизации.

5. Игнорируется спред

График часто строится по Last или одной серии, а покупка исполняется по Ask, продажа — по Bid. В Forex и CFD спред может быть основной статьей затрат. На новостях он расширяется.

Тестер с единой OHLC-серией не знает полный исторический стакан. Добавьте консервативное проскальзывание или используйте специализированные данные, если преимущество измеряется несколькими тиками.

6. Неоднозначный путь цены внутри свечи

По OHLC неизвестно, что было раньше: High или Low. Если в одной свече достигнуты и stop, и take profit, порядок меняет результат.

Bar Magnifier использует данные младшего таймфрейма и уточняет путь. В документации стратегии параметр use_bar_magnifier описан как более точный intrabar-режим. Ограничения остаются: младшие бары не дают тикового порядка и не моделируют очередь заявок.

7. Лимитная заявка считается гарантированно исполненной

Касание low уровня покупки еще не доказывает исполнение полного объема. Цена могла коснуться уровня одной небольшой сделкой, перед вашей заявкой могла стоять очередь.

Для консервативной модели требуйте проход цены за лимит на несколько тиков или задавайте параметр проверки limit order. Чем менее ликвиден рынок и крупнее размер, тем осторожнее предположение.

8. Размер позиции не соответствует рынку

Тестер легко покупает объем, превышающий реальный оборот бара. Он не моделирует собственное влияние на цену.

Введите ограничения:

  • доля от среднего объема;
  • максимальный номинал позиции;
  • минимальный размер лота;
  • шаг количества;
  • доступная маржа;
  • лимит риска на сделку и на портфель.

Сравните символ TradingView с точным брокерским инструментом. Различия источников данных описаны в статье почему котировки отличаются.

9. Параметры подобраны по всей истории

Если период средней выбран после просмотра результата на 2018–2026 годах, этот же период нельзя считать независимым тестом. Стратегия уже подстроена под данные.

Разделите историю:

  1. train — разработка идеи;
  2. validation — выбор устойчивого диапазона;
  3. test — единственная финальная проверка;
  4. forward — наблюдение после решения о запуске.

Не возвращайтесь к test после неудачи и не называйте его независимым повторно.

10. Выбран лучший пик, а не устойчивая область

Оптимизатор может найти период 37, который случайно идеален, тогда как 36 и 38 дают убыток. Такой пик редко переживает новый рынок.

Стройте карту соседних параметров. Хороший кандидат находится на плато: небольшое изменение периода, стопа или фильтра не разрушает результат.

11. Слишком мало независимых сделок

Сто сделок не всегда означают сто наблюдений. Если они приходятся на один тренд или коррелированные инструменты, эффективная выборка меньше.

Проверьте результат по:

  • годам и рыночным режимам;
  • long и short отдельно;
  • символам;
  • волатильности;
  • времени суток;
  • источникам прибыли.

Если вся доходность создана тремя выбросами, медианная сделка и стабильность важнее среднего.

12. Survivorship bias и меняющийся состав рынка

Тест сегодняшнего списка акций в прошлом исключает компании, которые обанкротились или были исключены. Скринер задним числом выбирает победителей.

Для портфельных стратегий нужен исторический состав universe и корректные corporate actions. На крипторынке похожая ошибка возникает при тесте только монет, доживших до текущего дня.

13. Неправильные сессии и часовой пояс

Фильтр «торговать на открытии» зависит от биржевого времени, перехода на летнее время, праздников и коротких сессий. Фиксированный UTC offset может сдвигаться относительно площадки.

Используйте биржевой часовой пояс и проверяйте конкретные даты переходов. Визуально отметьте разрешенную сессию на графике.

14. Метрики читаются без распределения риска

Net Profit, Win Rate и Profit Factor недостаточны. Добавьте:

  • максимальную и типичную просадку;
  • длительность восстановления;
  • средний выигрыш и убыток;
  • хвост худших сделок;
  • последовательности убытков;
  • экспозицию;
  • результат после расходов;
  • чувствительность к удалению лучших сделок.

Высокий процент побед с редким огромным убытком может маскировать риск разорения.

Рабочий протокол проверки

Этап 1. Достоверность данных

Проверьте тикер, сессию, тип свечей, корпоративные действия, rollover и requested data.

Этап 2. Доступность информации

Удалите lookahead, честно учтите pivot delay, подтвердите сигнал и момент принятия решения.

Этап 3. Исполнение

Задайте комиссию, спред, проскальзывание, Bar Magnifier, объем и правила лимитных заявок.

Этап 4. Устойчивость

Проверьте соседние параметры, разные режимы, out-of-sample и stress costs.

Этап 5. Forward test

Запустите paper или минимальный размер, сохраняйте все сигналы и отклонения. Алерты и webhook должны иметь журнал. Обзор их механики есть в статье как работают алерты.

Вывод

Хороший бэктест не тот, где выше доходность, а тот, где можно объяснить происхождение каждой сделки и каждого допущения. Уберите будущие данные, задайте реалистичное исполнение, отделите разработку от проверки и испытайте расходы. После этого Strategy Tester становится инструментом отбора гипотез, а не генератором красивых кривых.

Частые вопросы

Какой процент прибыльных сделок считается хорошим?

Сам по себе процент ничего не говорит. Стратегия с 35% прибыльных сделок может быть устойчивой при большом среднем выигрыше, а с 80% — опасной из-за редких крупных убытков. Оценивайте распределение результатов и риск.

Нужно ли включать комиссию и проскальзывание?

Да. Значения должны соответствовать месту исполнения и типу заявки. Для чувствительной стратегии полезно проверить базовый, умеренный и стрессовый сценарии расходов.

Что дает Bar Magnifier?

Он использует данные младшего таймфрейма для более детального моделирования движения внутри бара. Это снижает неоднозначность порядка High и Low, но не превращает исторический тест в тиковый симулятор реального стакана.

Как понять, что стратегия переоптимизирована?

Признаки — узкий лучший набор параметров, резкое ухудшение на соседних значениях, зависимость от нескольких сделок и провал на отложенном периоде. Ищите устойчивую область, а не единственную вершину.