Walk-forward анализ: единственный метод бэктеста, который не врёт
Стандартный бэктест меряет, работала ли стратегия на данных, на которых вы её проектировали. Walk-forward анализ меряет, сработала бы она в реальном времени, против данных, которых вы ещё не видели. Эти два числа обычно сильно расходятся. Первое сообщает большинство опубликованных track record. Второе: то, что вы реально бы заработали. Расстояние между ними — это переобучение, и именно поэтому большинство стратегий, которые шикарно выглядят на бумаге, теряют деньги в живой торговле.
Какую проблему решает walk-forward
Представьте, что вы строите крипто-стратегию в мае. Бэктестите её на данных с января по апрель, подгоняете параметры, чтобы всё смотрелось красиво, и кривая эквити восхитительна. Запускаете в июне и видите, как она три месяца подряд теряет деньги. Что произошло?
Вы проектировали против данных, которые уже были у вас. Параметры подстроились под структуру рынка именно того периода: его режим волатильности, его конкретные движения, его шум. Когда июнь и июль пришли с другой структурой, ваши тонко подогнанные параметры перестали быть оптимальными. Они были заточены под рынок, которого больше нет.
Это центральная проблема разработки стратегий. Данные, которые можно бэктестить, это прошлое. Данные, на которых вы реально будете торговать, это будущее. Они статистически связаны, но не идентичны. Оптимизация на прошлом не переносится автоматически.
Walk-forward анализ: методология, созданная, чтобы честно измерить это расстояние. Сделанный правильно, результат walk-forward — самое близкое приближение к тому, что стратегия сделала бы в живой торговле, без преимущества взгляда назад.
Механика
Процедура состоит из трёх шагов, повторяющихся по всему набору данных:
- In-sample (IS) окно: : блок данных, скажем, 90 дней. На нём вы подгоняете параметры, выбираете фильтры, калибруете пороги или обучаете модели.
- Out-of-sample (OOS) окно: : следующий блок, скажем, 30 дней, которого вы никогда не касались. Вы применяете к этому OOS-окну свою оптимизированную на IS стратегию без изменений и записываете результаты.
- Сдвиг вперёд: : сдвиньте всё на одно окно вперёд. Прошлый OOS входит в следующий пул IS. Переоптимизируете, снова оцениваете на следующем OOS-блоке.
Повторяете это по всему набору данных. В конце склейка всех OOS-результатов и есть walk-forward кривая эквити. Именно это число приближает запуск в реальном времени.
Наглядно:
Day 0────90────120────210────240────330────360
IS-1 OOS-1
IS-2 OOS-2
IS-3 OOS-3
...
Walk-forward curve = OOS-1 + OOS-2 + OOS-3 + ...
Каждый OOS-блок — «будущие» данные относительно используемых параметров. Вы никогда не заглядываете вперёд. Вы никогда не перенастраиваете стратегию на данных, на которых её уже оценили.
Соотношение IS/OOS
Какой длины должно быть каждое окно? Практические соглашения:
- IS:OOS = 3:1 : частая отправная точка. 90 дней на подгонку, 30 дней на оценку. Данных хватает, чтобы надёжно подогнать, и при этом за год получается много OOS-блоков.
- Минимум 6 walk-forward сдвигов. : меньше, и шум малой выборки доминирует над walk-forward кривой эквити. Для выводов нужно 6+ независимых OOS-блоков.
- OOS должен содержать хотя бы 30-50 сделок. : меньше, и доминирует индивидуальная удача. Весь смысл walk-forward в том, чтобы усреднить удачу.
Для высокочастотных стратегий с множеством сделок в день подходит IS-30д/OOS-10д. Для низкочастотных событийных стратегий с 5 сделками в месяц нужны куда более длинные окна: IS-180д/OOS-60д или больше. Принцип неизменен: достаточно IS, чтобы подогнать, достаточно OOS, чтобы честно измерить.
Что показывает walk-forward
Когда прогоняете walk-forward на типичной стратегии из разряда «шикарно выглядит в бэктесте», проявляются три паттерна:
1. Резкая деградация IS → OOS. Sharpe IS 2,5, Sharpe OOS 0,4. Это подпись переобучения. Стратегия подстроилась под шум IS; реального предсказательного эджа у неё нет. Реальные эджи деградируют на ~30-50% с IS на OOS из-за честного шума. Деградация больше: обычно переобучение.
2. Непостоянный OOS от сдвига к сдвигу. OOS-1 это +5%, OOS-2 это −3%, OOS-3 это +8%, OOS-4 это −2%. OOS-блоки скачут дико. Стабильного эджа нет; есть чувствительность параметров к смене режима. Реальный эдж даёт в целом ровные OOS-блоки.
3. Переоптимизация резко меняет параметры. В IS-1 ваш лучший набор: RSI 14, порог 0,6. В IS-2 это RSI 8, порог 0,4. Параметры прыгают, потому что «лучшие» параметры подстраиваются под конкретный шум IS. У стабильных стратегий оптимальные параметры устойчивы между IS-окнами.
Любой из них — предупреждение. Двое сразу означают, что стратегия переобучена. Трое означают, что реального эджа нет: вы всего лишь построили подгонятель кривой.
Честный рабочий процесс
Если хотите честно валидировать крипто-стратегию, порядок действий:
- Сначала гипотеза. Запишите, что, по-вашему, сработает и ПОЧЕМУ, до того как посмотрите на данные. «Думаю, токены с растущим open interest и отрицательным фандингом вернутся к среднему, потому что шорты выжимает.»
- Зафиксируйте параметры заранее. Выберите порог OI 5%, отсечку фандинга −0,05%, холд 8 часов. Пока не оптимизируйте.
- Одинарный проход по истории. Прогоните ровно эти параметры на 6+ месяцах исторических данных. Если у стратегии нет положительного ожидания на исходных параметрах, ваша гипотеза неверна. Не подстраивайте.
- Если положительно, делаем walk-forward. Теперь можно перебирать параметры в IS, оценивать на OOS, делать сдвиг вперёд. Результат walk-forward — то, что вы реалистично захватили бы.
- Живой пейпер на тех же параметрах. Прогоните выбранные walk-forward параметры на пейпере 30-60 дней. Сравните с ожиданием по OOS. Совпало → рассмотрите живую торговлю малым размером. Разошлось → walk-forward что-то не уловил (проскальзывание, изменения микроструктуры).
Первый шаг самый важный и тот, что большинство пропускает. Если начинаете с исследования данных и поиска паттернов, вы уже переобучились. «Паттерн», который вы находите, отчасти реальный эдж, отчасти случайный шум, который просто оказался в исторической выборке. Развидеть увиденное нельзя.
Частые ошибки walk-forward
Даже исследователи, применяющие walk-forward, могут делать это неправильно:
1. Заглядывание вперёд в фичах. Ваша фича включает значение, посчитанное на будущих данных. Пример: индикатор «тренда» на 200-периодной скользящей средней, центрированной на текущем баре. Средняя берёт 100 баров до И 100 после, поэтому значение индикатора на текущем баре зависит от будущих баров. В OOS вы решите, что это работает, потому что тренд смотрится отлично. В реальном времени индикатор не определён.
2. Выживаемость в юниверсе. Ваши IS-данные отфильтрованы до монет, ликвидных на Binance сейчас. Но за период монеты листились и делистились. Ваш OOS оценивает только выжившие монеты. Запуск в реальном времени включал бы монеты, которые потом делистнулись. У IS и OOS одинаковый перекос, поэтому walk-forward результат смотрится хорошо, но занижает реальный риск.
3. Повторный walk-forward. Прогнали walk-forward, видите OOS Sharpe 0,7. Подкручиваете стратегию «чтобы разобраться с провалами» и запускаете снова. Теперь OOS Sharpe 1,1. Подкручиваете ещё. OOS 1,5. После 20 итераций у вас «стратегия» с walk-forward Sharpe 2,5. Но вы фактически использовали OOS-данные как сигнал для настройки: это больше не OOS. Вы переобучились на мета-уровне.
4. Только один набор данных. Ваш walk-forward результат: на акциях США 2010-2024. Смотрится отлично. Запускаете на европейских акциях. Не работает. Walk-forward измерил обобщение по ВРЕМЕНИ, но не по РЫНКУ. Всегда, когда возможно, валидируйте на нескольких наборах данных.
5. Без моделирования издержек исполнения. Walk-forward при 0% проскальзывания и 0% комиссий даёт другие результаты, чем при 0,2% проскальзывания и 0,08% комиссий. Многие стратегии, прибыльные при 0%, теряют деньги при реалистичных издержках. Всегда моделируйте издержки.
Почему большинство опубликованных бэктестов пропускают walk-forward
Три причины:
1. Он портит громкую цифру. In-sample Sharpe 2,8 превращается в walk-forward Sharpe 0,9. Честный результат рассылки не продаёт. Раздутый продаёт.
2. Он требует в 10 раз больше работы. Обычный бэктест прогоняется один раз. Walk-forward с 12 сдвигами прогоняется 12 раз, с переоптимизацией на каждом шаге. Для стратегии с сотнями параметров это дорого вычислительно и операционно. И это единственный способ узнать, работает ли ваша стратегия.
3. Большинство стратегий его не проходят. Селекционный перекос в публикациях жёсткий: стратегии, проваливающие walk-forward, никогда не публикуют. Те, что публикуют, либо прошли walk-forward, либо пропустили его. Если track record явно не описывает методологию walk-forward, считайте, что её пропустили.
Тревожные признаки walk-forward, о которых стоит спросить
Если кто-то показывает вам бэктест, вот диагностические вопросы:
- «Какое разбиение IS/OOS?» Если разбиения нет, это не walk-forward, а одиночная in-sample подгонка. Почти наверняка переобучено.
- «Сколько walk-forward сдвигов?» Меньше 6: доминирует шум малой выборки. Цифра OOS Sharpe ненадёжна.
- «Насколько менялись параметры между IS-окнами?» У стабильных стратегий устойчивые оптимумы. Дикие скачки параметров означают, что стратегия чувствительна к режиму.
- «Какой OOS Sharpe против IS Sharpe?» Деградация меньше 30% = сильно. 30-60% = нормально. Больше 60% = IS-результат в основном шум подгонки.
- «Сколько в среднем сделок на OOS-блок?» Меньше 30 сделок на OOS-блок означает, что результаты определяет удача отдельных сделок.
- «Какое проскальзывание и комиссии моделировались?» Если ноль или нереалистично, бэктест — вымысел.
Честные ответы на эти вопросы отличают стратегию, которую валидировали, от той, которую просто подогнали.
Walk-forward именно в крипте
Три специфичных для крипты момента:
Смена режимов быстрая. У акций структура режима многолетняя. Крипто-режимы могут развернуться за недели. 12-месячный walk-forward в крипте пересекает несколько режимов (бык/медведь/пила/событийный). Это на самом деле плюс: проверяется, переживает ли стратегия смену режима. Пятилетние walk-forward в стиле акций слишком всё сглаживают. Крипто-walk-forward должны сохранять вариацию на уровне режимов.
Микроструктура важнее. Исполнение в крипте может давать проскальзывание 0,5-2% на small-cap во время новостных событий. Walk-forward с выходами по средней цене без реалистичного исполнения завышают доходность. Используйте path-dependent симулятор, который моделирует спред bid-ask и стоимость его пересечения.
Выживаемость — серьёзный перекос. Сотни крипто-монет листились и делистились за последние пять лет. Walk-forward на монетах, листингованных сейчас, смещён. Используйте набор данных без перекоса выживаемости (со снятыми с торгов символами по цене делистинга) или примите, что ваши результаты завышают на 10-30%.
Наша методология, коротко
Мы прогоняем walk-forward на каждой стратегии, которую запускаем. Наша стандартная схема для направленных стратегий класса NEVA на перпах с USDT-маржой:
- IS: 30 дней, скользящее
- OOS: 10 дней
- Частота сдвига: еженедельно
- Проскальзывание: 0,2% RT (туда-обратно)
- Комиссии: 0,08% RT (среднее maker/taker Binance)
- Фандинг: 0,005% за каждые 8ч холда
- Сайзинг: 2% эквити × 5× плеча = 10% номинала на сделку
- Лимит одновременности: 2 позиции разом
- Path-dependent симуляция: разрешение свечей 1 минута, SL и TP проверяются внутри бара
Это даёт walk-forward кривые эквити, которые примерно отражают то, что захватил бы живой запуск, за вычетом несмоделированной дисперсии исполнения. Когда живой результат затем совпадает с walk-forward в пределах ±30%, мы считаем стратегию валидированной. Когда нет, разбираемся, что walk-forward упустил.
Итого
Стандартный бэктест меряет, умеете ли вы подгонять прошлые данные. Walk-forward анализ меряет, нашли ли вы что-то реальное. Первое легко и ничего не значит. Второе дорого и информативно. Большинство опубликованных крипто-стратегий сообщают первое и выдают это за второе.
Если вы строите или оцениваете стратегию, делайте walk-forward. Если кто-то показывает track record, спросите про методологию walk-forward. Если её не могут объяснить конкретно, считайте громкую цифру вымыслом.
Дисциплина walk-forward отличает исследование, которое переживает контакт с живыми рынками, от того, что смотрится шикарно, пока ваши деньги не на столе. Математика беспощадна; процедура давно известна; единственное препятствие: работа сделать её правильно. Пропустите работу, и оплатите это открытие по самой дорогой цене.
Ведут трейдеры, которые делают walk-forward на каждой стратегии
Мы небольшая квант-команда из ЕС. Торгуем вживую, публикуем свою research и документируем то, что не сработало. Как распознать поддельные бэктесты · path-dependent симуляция · бесплатные email-курсы.