Тестирование торговой стратегии на исторических данных - это проверка заранее сформулированных правил на прошлом рынке с учётом комиссий, проскальзывания и ограничений исполнения. Надёжный бэктест не обещает будущую прибыль: он помогает обнаружить ошибки, оценить риск, сравнить варианты и подготовить независимую проверку на данных, которых система не видела.
Что должен показать бэктест
- Воспроизводимый результат: источник данных, период, таймфрейм, параметры и версия кода зафиксированы.
- Разделение результатов на IS - участок разработки и OOS - участок проверки, не использованный при настройке.
- Влияние комиссий, спреда, проскальзывания, задержек и ограничений ликвидности.
- Не только доходность, но и просадку, волатильность результата, число сделок и устойчивость к изменению параметров.
- Сценарии, при которых стратегия перестаёт работать, включая неблагоприятное исполнение.
Подготовка и валидация исторических данных
Тестирование подходит для систем с формальными правилами входа, выхода и управления позицией. Оно не подходит как единственное основание для реальной торговли, если правила описаны расплывчато, данных недостаточно или результат зависит от ручных решений, которые невозможно воспроизвести.
Для тестирования торговой стратегии на исторических данных зафиксируйте источник котировок, часовой пояс, формат цен, корпоративные события для акций, торговые сессии и способ обработки пропусков. Не смешивайте данные, доступные в момент сделки, с пересмотренными задним числом значениями.
- Проверьте дубликаты, пропуски, разрывы времени и неверный порядок свечей.
- Сверьте несколько случайных участков с исходным поставщиком данных.
- Отделите период разработки от периода проверки.
- Отметьте делистинги, сплиты, дивиденды и смену торговых условий, если они относятся к инструменту.
Формализация торговой системы: правила, параметры и допущения

До запуска бэктестинга торговой стратегии запишите алгоритм так, чтобы другой человек мог реализовать его без уточняющих вопросов. Укажите условия сигнала, момент исполнения, размер позиции, стоп-лосс, тейк-профит, правила повторного входа и действия при отсутствии ликвидности.
Понадобятся:
- исторические данные с известным источником и описанием качества;
- движок или программа для тестирования торговых стратегий;
- список параметров с допустимыми диапазонами;
- модель комиссий, спреда, проскальзывания и задержки;
- правило расчёта размера позиции и максимального риска;
- журнал эксперимента: конфигурация, код, дата запуска и итоговый отчёт.
Пример воспроизводимой конфигурации: один инструмент, один таймфрейм, конкретный период данных, фиксированный часовой пояс, сигнал на закрытии свечи, исполнение на следующей доступной цене, заданная комиссия, консервативное проскальзывание и заранее определённое IS/OOS-разбиение. Источник данных укажите в отчёте ссылкой или точным названием поставщика.
Выбор и настройка бэктест-движка
Выбор инструмента зависит от сложности системы и требований к контролю исполнения. Простая таблица подходит для первичной проверки логики, кодовый движок - для воспроизводимости, а специализированная платформа - для удобной визуализации и моделирования заявок.
| Подход | Когда использовать | Ограничение |
|---|---|---|
| Таблица | Проверка простых правил и расчётов | Сложно моделировать сложные заявки и ошибки исполнения |
| Кодовый движок | Повторяемые эксперименты, комиссии, портфели и отчётность | Требует навыков программирования и контроля ошибок |
| Специализированная платформа | Быстрая визуальная проверка и стандартные сценарии | Нужно изучить ограничения модели данных и исполнения |
Риски и ограничения перед запуском:
- Прошлые результаты не являются прогнозом будущей доходности.
- Ошибки данных или подсматривание в будущее могут искусственно улучшить отчёт.
- Оптимизация на одном периоде повышает риск переобучения.
- Бэктест не гарантирует фактическое исполнение заявок и доступность нужного объёма.
- Определите структуру эксперимента. Задайте инструмент, таймфрейм, период, валюту учёта, торговые часы и начальный капитал. Отдельно запишите IS, validation и OOS-периоды, если используется трёхчастное разбиение.
- Загрузите и очистите данные. Проверьте временные метки, пропуски, дубликаты и единицы измерения. Очистка не должна использовать информацию из будущего периода.
- Опишите модель сигнала. Зафиксируйте, когда индикатор считается доступным и на какой свече появляется сигнал. Запретите обращение к ещё не закрытой свече, если стратегия не моделирует потоковые данные.
- Настройте исполнение. Определите тип заявки, цену исполнения, задержку, спред, проскальзывание, частичное исполнение и реакцию на недостаток объёма.
- Добавьте риск-менеджмент. Задайте размер позиции, максимальную долю капитала, лимит одновременных позиций и действия при серии убытков. Не подбирайте эти правила после просмотра OOS-результата.
- Запустите базовый сценарий. Сохраните конфигурацию и полный журнал сделок. Затем повторите расчёт без изменения параметров, чтобы проверить воспроизводимость.
- Сформируйте отчёт. Сохраните кривую капитала, распределение сделок, просадки, комиссии, периоды без сделок и разделение IS/OOS. Результаты оценивайте по заранее выбранным критериям.
Реалистичное моделирование исполнения: проскальзывание, ликвидность и комиссии
Красивый результат часто ломается после добавления реальных торговых издержек. Модель должна отражать не только направление сделки, но и возможность получить нужную цену и объём.
- Указаны комиссии биржи, брокера или торговой площадки.
- Спред применён отдельно к покупке и продаже, если данные это позволяют.
- Проскальзывание задано явно и проверено в нескольких сценариях.
- Учтены задержка сигнала и момент фактического исполнения.
- Проверено, что размер заявки не превышает доступную ликвидность.
- Смоделированы частичное исполнение, пропуск сделки или ухудшение цены.
- Учтены минимальный размер позиции, шаг цены и ограничения по объёму.
- Проверены гэпы, остановки торгов и периоды резкого расширения спреда.
Метрики доходности, риск-менеджмента и интерпретация результатов

Не сводите оценку к одной итоговой доходности. Смотрите на результат как на сочетание прибыли, риска, длительности просадок и количества независимых наблюдений.
| Метрика | Что показывает | Как читать |
|---|---|---|
| Доходность | Изменение капитала за период | Сопоставляйте с просадкой, издержками и длительностью теста |
| Drawdown | Снижение капитала от исторического максимума | Оценивайте максимальную и длительные просадки |
| Sharpe | Соотношение результата и изменчивости при выбранной методике расчёта | Уточняйте период расчёта и используемую безрисковую ставку |
| CAGR | Среднегодовой темп роста за полный период | Не заменяет анализ распределения доходности и просадок |
| Количество сделок | Объём статистической базы стратегии | Малое число сделок повышает неопределённость вывода |
Для оценки как протестировать торговую стратегию корректно, сравните базовый сценарий с вариантами комиссий и проскальзывания. Отдельно проверьте, не сформирована ли итоговая прибыль несколькими сделками или коротким благоприятным участком рынка.
Частые ошибки:
- Использование будущих данных через пересмотренные индикаторы или неправильную синхронизацию.
- Оптимизация параметров по всему историческому периоду.
- Игнорирование комиссий, спреда, проскальзывания и налоговых последствий.
- Сравнение стратегий по доходности без учёта просадки и периода восстановления.
- Вывод о надёжности по слишком малому числу сделок.
- Изменение правил после просмотра OOS-результата без нового независимого теста.
- Подмена реального риска средним значением просадки.
Проверка устойчивости: оптимизация, walk‑forward и стресс‑тесты
Оптимизация торговой стратегии на исторических данных должна искать не единственную точку с лучшим результатом, а область параметров, в которой система сохраняет приемлемые свойства. Если небольшое изменение периода индикатора полностью меняет итог, это сигнал возможного переобучения.
- Анализ чувствительности. Измените один параметр в разумном диапазоне и сравните доходность, Drawdown, Sharpe, CAGR и количество сделок.
- Walk-forward. Настройте параметры на скользящем IS-окне, затем проверьте их на следующем OOS-окне. Повторите цикл и объедините только независимые OOS-результаты.
- Стресс-тест. Увеличьте издержки, ухудшите исполнение, измените порядок сделок и добавьте задержку. Метод уместен для оценки запаса прочности.
- Монте-Карло-перестановка. Перемешайте порядок сделок или варьируйте их исходы, чтобы оценить диапазон возможных просадок. Это дополнение к тесту, а не доказательство будущей доходности.
В отчёте по IS/OOS укажите границы периодов, параметры, выбранные на IS, итоговые показатели на OOS и количество итераций настройки. Не выбирайте наиболее красивое OOS-окно из нескольких вариантов без раскрытия этого отбора.
Ответы на типичные сомнения при бэктесте
Можно ли доверять прибыльной кривой капитала?
Только частично. Проверьте качество данных, отсутствие подсматривания в будущее, реалистичность исполнения и независимый OOS-период.
Какой период исторических данных выбрать?
Период должен включать условия, при которых стратегия предполагается применимой, включая разные режимы рынка. Границы периода фиксируют до оценки результата, а не после неё.
Нужно ли учитывать комиссии, если стратегия совершает мало сделок?
Да. Даже редкие сделки могут иметь существенный спред, проскальзывание или минимальную комиссию, поэтому издержки должны быть частью базовой модели.
Достаточно ли одной программы для тестирования торговых стратегий?
Нет, программа лишь реализует модель. Критичны качество данных, корректность кода, правила исполнения и независимая проверка результата другим способом или на другом наборе данных.
Почему OOS-результат хуже IS?
Это может быть нормальным проявлением неопределённости или признаком переобучения. Сравните распределение сделок, чувствительность параметров и стресс-сценарии, не подстраивая правила под уже просмотренный OOS.
Можно ли сразу торговать после успешного бэктеста?
Нет. Сначала проведите бумажное или минимальное по риску наблюдение, проверьте фактические котировки и исполнение, а также заранее определите условия остановки стратегии.

