597 / 736BT

Backtesting

Историческое тестирование стратегии

Backtesting проверяет торговые правила на прошлых данных. Он помогает выявить ошибки и расходы, но историческая прибыль сама по себе не доказывает, что стратегия будет работать дальше.

Backtesting моделирует результаты заранее определённых торговых правил на исторических данных при выбранных предположениях об исполнении сделок и расходах.

Пётр замечает, что за днём роста иногда следует ещё один подъём. Вместо покупки по наитию он записывает правило и применяет его к старым ценам. Это и есть Backtesting: проверка идеи на прошлом. Результат описывает выбранную модель, а не деньги, действительно заработанные Петром. Bailey et al. объясняют, почему привлекательный исторический результат следует отличать от надёжной проверки стратегии. [1]

Пётр вправе использовать только информацию, доступную до сделки. Если правило опирается на цену закрытия дня, нельзя на её основании купить утром того же дня. QuantConnect называет такую ошибку Look-ahead Bias: будущая информация проникла в прошлое решение. Для публикуемых данных важен момент выхода, а не только описываемый период; позднейшие исправления тоже ещё не были известны. Поэтому наш пример использует завершённые предыдущие закрытия и только следующую цену открытия. [2]

Выбор лишь рынков или компаний, сохранившихся до сегодняшнего дня, создаёт другое искажение. QuantConnect называет его Survivorship Bias и иллюстрирует использованием нынешнего состава индекса в прошлом. В данных Bitcoin важны также биржа, перебои и метод формирования цен. Котировка одного сервиса не обязательно была достижима на другом. Ошибки можно исправлять, сохраняя след изменений; удаление неудобных обвалов изменило бы сам исследуемый вопрос. [2]

Программа должна определить, когда, по какой цене и в каком объёме исполнится ордер. Для этого нужны модели исполнения, описанные QuantConnect. Касание цены на графике не доказывает, что весь объём можно было купить по ней. Реальные ордера могут исполняться частично; готовые модели этой платформы в backtest предполагают полное исполнение. Нужно проверить и давность котировки, и ликвидность — возможность найти контрагента для сделки. [3]

Slippage — разница между ожидаемой и полученной ценой исполнения; она может помочь трейдеру или навредить. QuantConnect описывает её моделирование. Также учитываются комиссии и, когда применимо, финансирование и прочие расходы стратегии. Уже включённый в цену расход нельзя вычитать повторно. Нулевой Slippage — предположение, а не установленное свойство реального рынка. Повторение теста с худшим исполнением и большими расходами помогает понять, сохраняется ли вывод. [4]

Если Пётр подгоняет правило на данных, по которым оценивает успех, он сдаёт экзамен с известными ответами. Сначала нужно выделить более ранние данные для разработки, а более поздние — для проверки. TimeSeriesSplit из scikit-learn помогает сохранить этот порядок. Сам он не предотвращает утечку информации при подготовке данных, пересечение целевых периодов или повторную настройку. Изменив правило после просмотра проверки, Пётр использовал и эти данные для разработки. [5]

Среди множества настроек одна может выглядеть прекрасно случайно. Показывая только победителя, мы скрываем число попыток. Bailey et al. исследуют Backtest Overfitting: подгонку стратегии под особенности конкретной истории. Записывайте проверенные параметры, периоды и рынки, а не только лучшую кривую. Авторы предлагают отдельную процедуру оценки вероятности этой проблемы; простое разделение данных её не заменяет. Наш пример такую оценку не вычисляет. [1]

Честный отчёт позволяет восстановить данные, версию правил, сделки, расходы и убыточные периоды. Стратегию для сравнения нужно оценивать при сопоставимых предположениях. Американская NFA также отмечает преимущество знания прошлого и отсутствие опыта настоящих финансовых потерь в гипотетических результатах; её рекламные правила относятся к определённым членам. Backtest помогает отвергнуть идею или изучить её глубже. Даже верный расчёт не доказывает, что она сработает на другом рынке или в реальной торговле. [6]

ПримерПРИМЕР · BT

Правило, которое можно проверить вручную

Возьмём собственный вымышленный пример с одинаковыми по длительности периодами A, B, C и D. Начинаем с денежными средствами 1000 USD, без открытой позиции, долга, пополнений и выводов. Две цены закрытия перед A равны [100, 100] USD/BTC. Цены открытия A–D — [101, 103, 102, 105] USD/BTC, а закрытия — [102, 101, 104, 103] USD/BTC. Правило покупает 1 BTC в начале периода только тогда, когда последняя завершённая цена закрытия выше предыдущей; в конце того же периода продаёт всю позицию. Сигналы равны [0, 1, 0, 1]: 1 означает сделку, а 0 — её отсутствие. Предполагаем полное исполнение точно по этим ценам, без спреда и Slippage, и единственный расход: комиссию 0.1 USD за каждую покупку и продажу. В B покупаем за 103 USD и продаём за 101 USD; в D покупаем за 105 USD и продаём за 103 USD. Валовые результаты периодов — [0, -2, 0, -2] USD. Четыре исполненные покупки и продажи вместе стоят 0.4 USD, поэтому чистые результаты — [0, -2.2, 0, -2.2] USD. Общий валовой результат равен -4 USD, чистый — -4.4 USD, а конечные денежные средства — 995.6 USD. График показывает чистый вклад каждого периода, не баланс счёта или вероятность прибыли. Пример проверяет порядок информации и учёт; он не использует реальные данные, не оптимизирует настройки и ничего не прогнозирует.

Для полной картины прочитайте эту статью вместе с Trading Plan, Trading Journal, Slippage, Overfitting, Walk-forward Analysis. На эту статью также ссылаются Technical analysis, OHLCV, Timeframe, Candlestick chart.

01Означает ли прибыльный backtest, что стратегия позволит заработать?

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

02Можно ли вычесть все комиссии только в конце?

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

DOC · 001Bailey et al. — The Probability of Backtest OverfittingПервичный источник DOC · 002QuantConnect — Research GuideДокументация DOC · 003QuantConnect — Trade Fills: Key ConceptsДокументация DOC · 004QuantConnect — Slippage: Key ConceptsДокументация DOC · 005scikit-learn — TimeSeriesSplitДокументация DOC · 006NFA — Use of Promotional Material Containing Hypothetical Performance ResultsДокументация
Обновлено: Сначала источники · Не является инвестиционной рекомендацией