Перейти к содержимому
Бэктест-инструменты 3 мин чтения Опубликовано 4 августа 2026

backtesting.py: обзор для тех, кто кодит

backtesting.py — популярная Python-библиотека для тестирования стратегий кодом. Разбираем, кому она подходит и на что смотреть.

Редакция ForexSignalTrader Проверка фактов и оценка по методике · кто это

backtesting.py — популярная Python-библиотека для тестирования стратегий кодом. Она даёт гибкость, недостижимую во встроенных тестерах, но требует навыков и дисциплины работы с данными. Разбираем, кому она подходит и на что смотреть.

Что это и как работает

Вы описываете стратегию классом на Python: условия входа/выхода, управление позицией. Библиотека прогоняет её по вашему датафрейму котировок и возвращает метрики (доходность, просадку, число сделок) и графики. Данные вы готовите сами — отсюда и контроль, и ответственность за их качество. Библиотека нарочно минималистична: она даёт каркас, а всё, что касается издержек и реалистичности, ложится на вас.

Плюсы и минусы

Плюсы: гибкость логики, свои источники данных, настраиваемые метрики, интеграция с экосистемой Python (pandas, оптимизация). Минусы: порог входа (нужен код), риск ошибок в реализации, необходимость самому учитывать издержки — спред, комиссии, проскальзывание, — которые библиотека по умолчанию упрощает. По умолчанию мир слишком идеален, и если про это забыть, результат систематически завышен.

Как оценить качество своего бэктеста

Проверяйте, что вы корректно закладываете издержки и не заглядываете в будущее (look-ahead bias). Разделяйте данные на in-sample/out-of-sample, применяйте walk-forward. Помните: гибкость библиотеки облегчает не только честный тест, но и самообман через переоптимизацию. Чем больше свободы в коде, тем легче нечаянно «подсмотреть» будущее — например, использовать в сигнале значение, которое на момент сделки ещё не сформировалось.

Как это выглядит на практике

Вы написали класс стратегии, прогнали — и получили заманчивую кривую. Прежде чем радоваться, добавляете в модель комиссию и спред, а сигнал сдвигаете на бар вперёд, чтобы не торговать по «будущей» цене закрытия. Числа условны, проверяйте на своих данных: нередко после этих двух правок красивый результат заметно тускнеет. Это не поломка — это первый раз, когда бэктест стал честным. Дальше вы делите историю на части, проверяете стратегию на той, что не участвовала в настройке, и только устойчивый результат несёте на форвард-тест.

Частые ошибки

  • Считать нулевые издержки «нормой по умолчанию»
  • Использовать в сигнале данные текущего бара, которые в реальности ещё не закрылись (look-ahead)
  • Оптимизировать десяток параметров на маленьком куске истории
  • Радоваться идеальной кривой вместо того, чтобы отнестись к ней с подозрением

Итог

backtesting.py — мощный инструмент для тех, кто кодит и хочет полного контроля над бэктестом, но он требует дисциплины с данными и издержками. Гибкость не отменяет правил честной проверки. Инструменты и обзоры — в нашем каталоге.

Когда код даёт то, чего не даст готовый тестер

Главное преимущество программного бэктеста — контроль над процедурой. Вы сами задаёте модель издержек, порядок исполнения заявок, правила разделения выборки и метрики. В готовых тестерах эти вещи зашиты, и понять, как именно смоделировано исполнение внутри свечи, обычно невозможно. Для стратегий, чувствительных к деталям, разница между двумя подходами оказывается принципиальной.

Второе преимущество — воспроизводимость. Скрипт с фиксированными данными и параметрами даёт одинаковый результат сегодня и через год, а прогон в терминале зависит от истории, подгруженной у брокера в этот момент. Для исследования, к которому вы планируете возвращаться, это решающий фактор: без воспроизводимости нельзя сравнить две версии стратегии.

Третье — доступ к произвольным метрикам. Ожидание на сделку, распределение результата, поведение в разных рыночных режимах, стабильность параметров при сдвиге — всё это считается несколькими строками, тогда как в готовом тестере вы ограничены его набором отчётов. Именно здесь код окупается быстрее всего.

Ограничения тоже реальны. Качество данных остаётся вашей ответственностью: бесплатные источники содержат пропуски и ошибки, а тиковые данные приходится покупать. Модель исполнения, написанная самостоятельно, содержит ваши же допущения, и они оптимистичны по умолчанию — начинающие почти всегда забывают про спред в момент публикации данных и про то, что стоп исполняется хуже уровня.

Практический порядок работы: сначала грубая проверка идеи на дневных данных, где ошибки моделирования минимальны, затем уточнение на минутных с реальными издержками, затем разделение выборки и проверка вне неё. Форвард-тест у брокера остаётся обязательным этапом независимо от качества кода: он проверяет не логику, а условия исполнения.

И про выбор между кодом и готовым решением. Если вы не программируете, освоение библиотеки займёт больше времени, чем даст выигрыш в точности; в этом случае разумнее взять готовый тестер и компенсировать его ограничения аккуратной процедурой. Разобранные нами инструменты — в категории тестеров стратегий.

Что задать в собственном бэктесте

  • Модель издержек: спред, комиссия, своп в значениях вашего брокера, а не средних.
  • Порядок исполнения внутри свечи: что срабатывает первым при касании и стопа, и цели.
  • Разделение выборки на оптимизационную и проверочную с самого начала.
  • Метрики: ожидание на сделку, просадка по эквити, число сделок, распределение результата.
  • Проверку устойчивости: сдвиг каждого параметра на шаг в обе стороны.
  • Фиксацию версии данных и параметров, чтобы результат был воспроизводим.

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

И про типичную ошибку в самописном бэктесте: заглядывание в будущее. Она возникает незаметно — например, когда решение на текущей свече принимается по значению индикатора, посчитанному с учётом её закрытия, или когда стоп и цель на одной свече обрабатываются в удобном порядке. Результат получается недостижимо хорошим, и обнаруживается это только на живом счёте. Защита простая: явно проверять, что в момент решения используются только данные, доступные до него, и обрабатывать одновременное срабатывание стопа и цели пессимистично — в пользу убытка.

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

Это сложно для новичка в Python?

Базовый пример освоить реально, но за корректность издержек и данных отвечаете вы.

Библиотека сама учитывает спред?

Только если вы его зададите; по умолчанию мир идеальный.

Чем она лучше тестера MT?

Гибкостью и своими данными, а не «большей правдой».

Можно ли ей доверять результат?

Ровно настолько, насколько честны ваши данные и настройки.

Материал носит образовательный характер и не является индивидуальной инвестиционной рекомендацией (не ИИР).

Материал носит информационный характер и не является индивидуальной инвестиционной рекомендацией. Редакционная политика

Читайте также