598 / 736WFA

Walk-forward Analysis

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

Walk-forward Analysis проверяет регулярно обновляемую стратегию: выбирает правило по уже известным данным, оценивает в следующем периоде и повторяет процесс.

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

У Петра несколько вариантов торгового правила. Он хочет использовать тот, который лучше работал в недавнем прошлом. Walk-forward Analysis позволяет пройти эту идею по шагам: выбрать по известной истории, записать следующий результат и выбрать снова. QuantConnect описывает такое периодическое обновление. Проверяется и способ выбора, а не только неизменный вариант. Поэтому кандидаты, критерий и срок нового пересмотра должны быть определены заранее. [1]

Если Пётр выбрал вариант за его прошлую прибыль, эта же прибыль не подтверждает выбор независимо. QuantConnect объясняет, что такие данные уже относятся к разработке. Честный вопрос: как вариант сработал после выбора? Текущий тест не должен выбирать собственного победителя. Когда период завершён и результаты доступны, установленная заранее процедура может использовать их для более позднего выбора. Это не переписывает ранее записанное решение. [2]

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

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

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

После отдельных тестов результаты нужно правильно объединить. QuantConnect описывает модели цены и объёма исполнения, способные учитывать спред и Slippage. Затем нашей оценке нужен последовательный учёт: не добавлять прибыль разработки на тестовый счёт и не считать пересекающиеся тесты повторно без объяснения. При смене варианта укажите, что происходит с открытыми позициями, капиталом и расходами перехода. Пример ниже упрощает ситуацию: каждый период заканчивается без позиции. [5]

Пётр может менять окна, цели или кандидатов до получения красивого теста. Тогда тестовый ряд уже использован для разработки. Bailey и соавторы исследуют случайные успехи при многократном поиске на одних данных. Записывайте все испытанные процедуры и отдельно обозначайте дальнейшую проверку на ещё не использованной истории. Само продвижение во времени не является статистической гарантией или оценкой вероятности переобучения — чрезмерной подгонки к прошлым данным. [6]

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

ПримерПРИМЕР · 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Документация
Обновлено: Сначала источники · Не является инвестиционной рекомендацией