598 / 691WFA

Walk-forward Analysis

Анализ с последовательным продвижением во времени

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

Walk-forward Analysis — хронологическая оценка процедуры, которая выбирает или настраивает правила на более ранних данных и применяет их к последующим тестовым периодам. Роли отбора и тестирования сдвигаются во времени, при этом текущее решение не должно знать следующий результат.

Walk-forward Analysis продвигает историческое моделирование во времени: по имеющимся данным выбирается или настраивается правило, затем оценивается его применение на следующем отрезке. QuantConnect описывает периодическую оптимизацию по завершающему окну прошлых данных. Наше редакционное различие: оценивается заранее описанный процесс обновления параметров, а не только один неизменный набор. В правило входят также момент следующего выбора, его цель и набор кандидатов. Более точная подгонка к недавним данным сама по себе не подтверждает лучший будущий результат. [QuantConnect — Walk Forward Optimization]

QuantConnect предупреждает, что период поиска лучших параметров становится частью данных разработки. Ретроспективное применение выбранного победителя к этому периоду не является честной проверкой тогдашнего решения. Поэтому наш протокол завершает отбор до начала следующего тестового отрезка. Его данные не должны влиять на текущего победителя. Когда отрезок закончился и информация действительно доступна, она может по заранее заданной процедуре участвовать в более позднем отборе; ранее записанные тестовые решения при этом не меняются. [QuantConnect — Optimization Parameters]

TimeSeriesSplit создаёт хронологически упорядоченные обучающие и тестовые индексы; по умолчанию он постепенно расширяет прошлую обучающую выборку и позволяет ограничить её размер. Наше различие: скользящее окно сохраняет выбранную длину истории, а расширяющееся — фиксированное начало. Длина окна и частота обновления являются частью проекта, а не свободными поправками после просмотра результатов. Для сопоставимости метрик отрезков документация требует равноотстоящих наблюдений; при нерегулярных данных нужно учитывать фактический календарный интервал. [scikit-learn — TimeSeriesSplit]

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

Документация scikit-learn предупреждает, что нормализация, заполнение пропусков или отбор признаков могут передавать тестовую информацию в модель. Параметры этих преобразований следует обучать только на обучающей части, а затем применять к тестовой. Наша проверка повторяет это разделение при каждом сдвиге окна. Предварительное вычисление среднего по всему набору не исправляется последующим разделением готовой таблицы. Необходимо сохранять также версию данных и фактический момент их доступности. [scikit-learn — Common Pitfalls: Data Leakage]

QuantConnect выделяет модель, определяющую цену и количество исполнения, которая может включать spread и Slippage. Наше требование для объединения тестовых отрезков — последовательно учитывать капитал, открытые позиции и издержки смены правила. Обучающая прибыль не прибавляется к результату последующего теста, а перекрывающиеся тестовые периоды нельзя без объяснения учитывать несколько раз. При переносе позиции нужно описать переход между конфигурациями. Наша модель ниже, напротив, завершает каждый период без позиции. [QuantConnect — Trade Fills: Key Concepts]

Бейли и соавторы описывают рост риска ложных открытий при повторном поиске на одних данных. Наш вывод для Walk-forward Analysis: если по полученной тестовой последовательности менять длину окон, цель или кандидатов и повторять весь расчёт, последовательность уже влияет на разработку. Недостаточно назвать её независимой. Отчёт должен перечислять все испытанные протоколы и отделять возможную дополнительную проверку, ещё не использованную ранее. Само продвижение во времени не является оценкой вероятности переобучения или автоматической статистической гарантией. [Bailey et al. — The Probability of Backtest Overfitting]

NFA подчёркивает, что гипотетические результаты не отражают реальную торговлю и полный эффект ликвидности, проскальзывания и поведения при реальном убытке. Поэтому наш отчёт Walk-forward Analysis сохраняет границы окон, кандидатов, оценки отбора, выбранные конфигурации и результаты последующих отрезков с учётом издержек. Сумме нужен контекст риска, числа наблюдений и сравнения в одинаковых условиях. Небольшой отрицательный пример не доказывает общую неэффективность метода, как и положительная сумма не доказывает будущее торговое преимущество. [NFA — Use of Promotional Material Containing Hypothetical Performance Results]

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

Выбирать по прошлому, оценивать лишь следующий период

Наша вымышленная модель использует шесть периодов одинаковой длины с номерами от 1 до 6 и два заранее заданных варианта A и B. Их чистые результаты при одинаковом фиксированном размере равны A [4, -1, 2, -3, 5, -2] USD и B [1, 2, 1, 1, -2, 4] USD. Каждый результат становится доступен только после завершения соответствующего периода, включает все модельные издержки и заканчивается без открытой позиции. Дополнительных издержек перехода, долга и денежных потоков нет. Заранее установленная процедура всегда суммирует последние три завершённых периода, выбирает большую сумму и применяет победителя лишь в следующем периоде; при равенстве она выбрала бы A. Окна отбора — [1, 2, 3], [2, 3, 4] и [3, 4, 5], последующие тесты — [4, 5, 6]. Суммы отбора A равны [5, -2, 4] USD, а B — [4, 4, 0] USD, поэтому последовательно выбираются A, B и A. В общий тестовый результат входят только [-3, -2, -2] USD, суммарно -7 USD. Начальные тестовые денежные средства перед периодом 4 составляют 1000 USD, конечные — 993 USD; размер не меняется в зависимости от денежных средств. Обучающие результаты не прибавляются к счёту, каждый тестовый отрезок учитывается только один раз. Схема показывает сдвиг окон отбора и последующие тесты, а не реальную рыночную историю или вероятность будущего успеха.

Для полной картины прочитайте эту статью вместе с Backtesting, Overfitting, Look-ahead Bias, Trading Plan, Trading Journal. На эту статью также ссылаются Backtesting, Overfitting, Look-ahead Bias, Survivorship Bias.

01Может ли старый тестовый период позже войти в обучение?

Да, если он уже закончился, информация доступна и заранее определённый протокол это допускает. Но он не должен задним числом менять отбор или результат, записанный для этого периода.

02Устраняет ли Walk-forward Analysis переобучение?

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

DOC · 001QuantConnect — Walk Forward OptimizationДокументация ↗DOC · 002QuantConnect — Optimization ParametersДокументация ↗DOC · 003scikit-learn — TimeSeriesSplitДокументация ↗DOC · 004scikit-learn — Common Pitfalls: Data LeakageДокументация ↗DOC · 005QuantConnect — Trade Fills: Key ConceptsДокументация ↗DOC · 006Bailey et al. — The Probability of Backtest OverfittingПервичный источник ↗DOC · 007NFA — Use of Promotional Material Containing Hypothetical Performance ResultsДокументация ↗
Сначала источники · Не является инвестиционной рекомендацией