backtesting.py: обзор для тех, кто кодит
backtesting.py — популярная Python-библиотека для тестирования стратегий кодом. Разбираем, кому она подходит и на что смотреть.
backtesting.py — популярная Python-библиотека для тестирования стратегий кодом. Она даёт гибкость, недостижимую во встроенных тестерах, но требует навыков и дисциплины работы с данными. Разбираем, кому она подходит и на что смотреть.
Что это и как работает
Вы описываете стратегию классом на Python: условия входа/выхода, управление позицией. Библиотека прогоняет её по вашему датафрейму котировок и возвращает метрики (доходность, просадку, число сделок) и графики. Данные вы готовите сами — отсюда и контроль, и ответственность за их качество. Библиотека нарочно минималистична: она даёт каркас, а всё, что касается издержек и реалистичности, ложится на вас.
Плюсы и минусы
Плюсы: гибкость логики, свои источники данных, настраиваемые метрики, интеграция с экосистемой Python (pandas, оптимизация). Минусы: порог входа (нужен код), риск ошибок в реализации, необходимость самому учитывать издержки — спред, комиссии, проскальзывание, — которые библиотека по умолчанию упрощает. По умолчанию мир слишком идеален, и если про это забыть, результат систематически завышен.
Как оценить качество своего бэктеста
Проверяйте, что вы корректно закладываете издержки и не заглядываете в будущее (look-ahead bias). Разделяйте данные на in-sample/out-of-sample, применяйте walk-forward. Помните: гибкость библиотеки облегчает не только честный тест, но и самообман через переоптимизацию. Чем больше свободы в коде, тем легче нечаянно «подсмотреть» будущее — например, использовать в сигнале значение, которое на момент сделки ещё не сформировалось.
Как это выглядит на практике
Вы написали класс стратегии, прогнали — и получили заманчивую кривую. Прежде чем радоваться, добавляете в модель комиссию и спред, а сигнал сдвигаете на бар вперёд, чтобы не торговать по «будущей» цене закрытия. Числа условны, проверяйте на своих данных: нередко после этих двух правок красивый результат заметно тускнеет. Это не поломка — это первый раз, когда бэктест стал честным. Дальше вы делите историю на части, проверяете стратегию на той, что не участвовала в настройке, и только устойчивый результат несёте на форвард-тест.
Частые ошибки
Считать нулевые издержки «нормой по умолчанию». Использовать в сигнале данные текущего бара, которые в реальности ещё не закрылись (look-ahead). Оптимизировать десяток параметров на маленьком куске истории. Радоваться идеальной кривой вместо того, чтобы отнестись к ней с подозрением.
Частые вопросы
Это сложно для новичка в Python?
Базовый пример освоить реально, но за корректность издержек и данных отвечаете вы.
Библиотека сама учитывает спред?
Только если вы его зададите; по умолчанию мир идеальный.
Чем она лучше тестера MT?
Гибкостью и своими данными, а не «большей правдой».
Можно ли ей доверять результат?
Ровно настолько, насколько честны ваши данные и настройки.
Итог
backtesting.py — мощный инструмент для тех, кто кодит и хочет полного контроля над бэктестом, но он требует дисциплины с данными и издержками. Гибкость не отменяет правил честной проверки. Инструменты и обзоры — в нашем каталоге.
Материал носит образовательный характер и не является индивидуальной инвестиционной рекомендацией (не ИИР).
Материал носит информационный характер и не является индивидуальной инвестиционной рекомендацией. Редакционная политика