Трендследование в FX: walk-forward или иллюзия?
Суть идеи
Авторы берут три «классики» трендследования — time-series momentum (TSMOM, сигнал от знака прошлой доходности за N дней), скользящее пересечение (fast/slow MA crossover) и channel breakout (цена пробивает максимум/минимум за K дней) — и прогоняют их на семи мажорных FX-парах с 2003 по 2025 год. Ключевое: не один бэктест, а 23 скользящих walk-forward окна с трёхлетним обучением и однолетним тестом. Параметры выбираются на train-окне, применяются на следующем test-окне без пересмотра — это честная попытка имитировать реальный деплой стратегии.
Механизм, на который делается ставка, стандартный: валютные рынки исторически демонстрируют автокорреляцию на горизонтах недели–месяца из-за медленной реакции центробанков, carry-потоков и поведенческих якорей. Трендовый сигнал должен захватывать эту инерцию до того, как она исчезнет.
Важно, что авторы явно смотрят на стабильность параметров между окнами — если оптимальный lookback «прыгает» от 20 до 200 дней от окна к окну, это признак переподгонки, а не реального сигнала. Именно это делает исследование методологически интереснее среднего «мы нашли лучшие параметры».
Применимость к крипте
BTC и ETH — не FX, но трендовые свойства у них сильнее, а не слабее: крипта исторически показывает более выраженную автокорреляцию на дневных горизонтах, особенно в бычьих режимах. Все три метода переносятся один-в-один: TSMOM на дневном споте BTC/ETH, MA-crossover (например, 20/100 или 50/200), channel breakout по rolling high/low.
Дополнительно можно добавить крипто-специфичные фильтры: funding rate как прокси перегрева (высокий фандинг → ослаблять лонг-сигнал), basis CME как индикатор институционального позиционирования. Это не меняет ядро стратегии, но может улучшить режимную фильтрацию.
Одно принципиальное отличие: ликвидность и транзакционные издержки в крипте менее стабильны, чем в spot FX. Slippage на channel breakout в моменты высокой волатильности (например, вокруг экспирации опционов) может съедать значительную часть edge.
Тестируемо ли
Методология ложится на наш Python-движок почти без доработок: rolling-z уже есть, walk-forward с train/test split реализуем стандартно. Нужны дневные OHLCV BTC и ETH (есть с 2017–2018), funding rate (с 2019 по Binance/Bybit), basis CME (с 2017). 23 окна по схеме 3+1 год дадут примерно 5–6 независимых тестовых периодов на крипто-истории — маловато по сравнению с FX, но достаточно для первичной проверки.
Deflated Sharpe нужно считать обязательно: три метода × несколько пар × несколько lookback-вариантов = десятки комбинаций, p-hacking неизбежен без поправки.
Сомнения
FX-история с 2003 года включает несколько полных макро-циклов; крипто-история — максимум два с половиной цикла, и все они происходили в условиях нулевых/низких ставок плюс один цикл ужесточения. Режимная хрупкость здесь острее.
Channel breakout особенно уязвим к data-snooping: параметр K (длина канала) легко подгоняется под известные крупные движения BTC. Если оптимальный K стабильно «находит» март 2020 и ноябрь 2022 — это не сигнал, это подгонка.
Наконец, три метода сильно коррелированы между собой — агрегация их результатов не даёт реальной диверсификации, только иллюзию консенсуса.
Следующий шаг
Прогнать walk-forward (3 года train / 1 год test) на дневном BTC spot с 2017 по 2025: три метода, фиксированная сетка параметров (lookback 20/60/120/200 дней), выбор лучшего на train, применение на test. Посчитать Deflated Sharpe по всем комбинациям. Добавить фильтр: входить в лонг только при funding rate ниже 75-го перцентиля скользящего окна.
Результат бэктеста
Прогнал по спецификации статьи на нашем движке: дневной спот BTC (2017–2026, ~9 лет), три метода × 4 параметра, walk-forward 3 года train / 1 год test (параметр выбирается по Sharpe на train-окне и применяется на следующем без пересмотра), вход t+1, издержки 6 б.п. Deflated Sharpe — с поправкой на 24 реально прогнанных варианта (12 long/short + 12 long-only).
| Метод | IS-best Sharpe (подгонка) | OOS walk-forward | DSR | OOS long-only |
|---|---|---|---|---|
| TSMOM | +0.83 | +0.59 | 0.61 | +0.99 |
| MA-crossover | +0.69 | +0.37 | 0.40 | +0.78 |
| Donchian breakout | +0.66 | +1.03 | 0.91 | +0.94 |
Buy&hold BTC за тот же OOS-период: Sharpe +0.76.
Что подтвердилось. Для TSMOM и MA-crossover — ровно та «иллюзия», о которой предупреждала статья: на train красиво, честный OOS скромнее и не обгоняет buy&hold. Лукахеда и утечки отбора нет — проверял отдельно: реконструкция rolling-high вручную (0 расхождений), сдвиг входа на лишний день (эдж не разваливается — значит сигнал не подсматривает), мутация test-региона (отбор параметра строго причинный).
Где не надо обманываться. Donchian breakout дал OOS +1.03 — цифра честная, но три осторожности, иначе сам попадёшь в ту самую иллюзию:
- Это не «честный OOS обогнал свой in-sample». IS-best 0.66 считается по всей истории (включая медвежку 2018–19), а OOS 1.03 — только по окну с августа 2020, которое её пропускает. Фиксированный
K=120на том же окне даёт даже +1.20 — то есть walk-forward-переключение параметра ничего не добавило, «работает» благоприятный период, а не отбор. - Результат держится на ~6 годовых фолдах и одном активе, и доминируется одним фолдом 2020–21 (Sharpe +2.16); без него OOS падает до ~0.71 ≈ buy&hold. Сам buy&hold на этом окне имеет DSR ~0.87, а корреляция Donchian с ним всего 0.29 — значит высокий DSR в основном это bull-beta режима после 2020, а не уникальный эдж трендследования.
Что реально ценно. Не превышение buy&hold, а защита на падении и шорт-нога: Donchian обошёл медвежку 2022 (+0.01 против −1.29 у B&H) и заработал в шорт в просадке 2026 (+1.41 против −1.41). Вне таких эпизодов шорт-ноги тащат вниз — long-only заметно ровнее.
Итог. Трендследование на BTC само по себе ≈ buy&hold после издержек; заголовочные 1.03 / DSR 0.91 — это эффект удачного окна и режима, а не доказанный структурный эдж. Ценность — в режимной фильтрации (long-only + защита на падении), и её стоит проверять дальше: на ETH, с фильтром по волатильности/позиционированию и с честным учётом числа испытаний. Ровно к этому и призывала статья — и на наших данных это подтвердилось.
Проверка: прогон research_validate.py + независимая адверсариальная верификация харнесса на лукахед (реконструкция сигналов, lag-тест, мутация выборки, пересчёт DSR).