Стратегияvalidationbacktestingtransparencywalk-forwardbootstrap

Мы прогнали собственную библиотеку стратегий через валидационный конвейер — вот что выжило

1 августа 2026 г.·8 мин чтения
Мы прогнали собственную библиотеку стратегий через валидационный конвейер — вот что выжило

Большинство торговых платформ показывают победный бэктест. График идёт вверх и вправо, коэффициент Шарпа льстит, а тысячи вариантов, погибших на пути к этому скриншоту, нигде не видны.

Эта статья — о кладбище. Не потому что провалы интересны сами по себе, а потому что кладбище — единственное место, где можно проверить, действительно ли валидационный процесс что-то отсеивает. Включая, когда тесты становятся жёстче, собственные опубликованные работы платформы.

За десять еженедельных запусков, которые удалось полностью восстановить, движок оценил 8 610 кандидатов стратегий. Прошли полный валидационный конвейер — 36, то есть 0,42%. Из них 8 были фактически опубликованы в библиотеке. Затем я построила набор более жёстких тестов, направила их на собственные уже опубликованные стратегии — и 10 из 15 стратегий в действующей библиотеке получили флаг.

Публикую всё — включая часть, где обнаружился баг в движке: оказалось, он никогда не искал треть семейств стратегий, которые якобы охватывал.

Конвейер — простыми словами

Каждый кандидат — набор правил, для одной монеты, на одном таймфрейме — должен пройти последовательность фильтров. Когда стратегия проваливается, она проваливается на конкретном фильтре, и каждый фильтр защищает от определённого способа, которым бэктесты лгут.

Базовые проверки. Достаточное количество сделок (минимум 30), ограничение просадки в 35% и минимальная доходность с поправкой на риск. Скучно — и именно они убивают большинство кандидатов. Подробнее ниже.

Walk-forward. Бэктест может «запомнить» прошлое. Walk-forward скрывает часть истории от стратегии, а затем проверяет, как она работает на данных, которых никогда не видела. Требование: сохранить не менее 50% результативности на невидимых данных. Если не выходит — красивая цифра бэктеста была удачей, и я говорю об этом прямо.

Bootstrap по последовательности сделок. Бэктест показывает одну версию истории. Я проигрываю сделки стратегии в 500 перетасованных порядках — 500 альтернативных вселенных — и смотрю на худшее, что могло бы правдоподобно произойти. Если 1 из 20 вселенных даёт просадку, от которой вы бы бросили торговлю, вы должны знать это до того, как в игру войдут реальные деньги. Тот же тест отлавливает и обратное: стратегию, чья реальная история оказалась удачливее, чем почти все её собственные перетасовки.

Ограничение правдоподобия и граница расхождения. Если стратегия показывает слишком идеальный результат — я отклоняю её. По моему опыту, «невероятные» результаты почти всегда являются ошибкой данных или удачей, а не открытием. А если её тренировочный счёт и счёт на невидимых данных дико расходятся в любую сторону — я ставлю флаг: нельзя доверять ни одной цифре.

Широта охвата. Стратегия, которая работала только на одной монете, скорее всего, рассказывает историю этой монеты, а не является стратегией. Когда одни и те же правила независимо выживают на многих активах — это свидетельство реального преимущества.

Воронка — с неудобными частями внутри

Валидационная воронка — 5 370 зафиксированных кандидатов на входе, 33 прошли полный конвейер, 7 сохранено. Восстановлено из логов ворот по каждому запуску; полная восстановленная картина: 8 610 → 36 → 8.
Валидационная воронка — 5 370 зафиксированных кандидатов на входе, 33 прошли полный конвейер, 7 сохранено. Восстановлено из логов ворот по каждому запуску; полная восстановленная картина: 8 610 → 36 → 8.

За десять восстановленных запусков: 8 610 кандидатов, 36 прошли полный конвейер (0,42%), 8 опубликованы. Если считать только то, что реально попало в библиотеку, выживаемость составляет 0,09%.

Для контекста: известная публичная воронка валидации стратегий — тот самый анализ «мы протестировали тысячи бэктестов», который гуляет по YouTube — пропускает около 5,7% кандидатов. В зависимости от того, сравнивать ли наших прошедших конвейер или наши фактические публикации, наша воронка строже в 8–60 раз. Я не утверждаю, что это делает меня умнее. Это делает меня придирчивее — а значит, стратегии, получившие знак валидации, заработали его, пройдя через фильтр, с которым большинство маркетинга, выжившего в условиях ошибки выжившего, никогда не сталкивается.

Два неудобных вывода внутри этой воронки:

Почти всё умирает у порога. 5 243 из 5 370 кандидатов с детальными логами — 97,6% — были отсеяны двумя самыми базовыми фильтрами (слишком мало сделок, процент побед ниже порога) ещё до того, как к ним прикоснулась сложная механика out-of-sample. Один из out-of-sample фильтров на сегодняшний день не сработал ни разу. Конвейер, в котором сложные фильтры не при делах, — это конвейер, чью конструкцию нужно пересмотреть. Именно об этом следующий раздел.

Три недели истории потеряны. Запуски 12, 19 и 26 июля были уничтожены ротацией логов раньше, чем мы позаботились о сохранении результатов по каждому кандидату — метрики отклонённых кандидатов нигде не сохранялись. Всё написанное выше восстановлено из тех запусков, которые удалось восстановить, и теперь реализовано постоянное хранение, чтобы данные каждого будущего кандидата сохранялись независимо от результата. Когда написано «восстановлено» — воспринимайте цифры именно так.

Признание: мы вообще не искали треть карты

Выживаемость по семействам стратегий — volume и pattern показывают ноль кандидатов: скрытый флаг конфигурации полностью исключил оба семейства из поиска.
Выживаемость по семействам стратегий — volume и pattern показывают ноль кандидатов: скрытый флаг конфигурации полностью исключил оба семейства из поиска.

Когда я агрегировала выживаемость по семействам стратегий, два семейства — volume и pattern — показали ноль кандидатов. Вообще.

Это был не приговор рынка. Это был баг: флаг конфигурации, введённый при предыдущей переработке движка, молча выбрасывал расширенный каталог стратегий, поэтому еженедельный cron открытия продолжал искать по старому захардкоженному списку. Два из шести семейств стратегий никогда не участвовали в гонке, и ничто в мониторинге об этом не сообщало. Баг был обнаружен потому, что таблица выживаемости по семействам сделала дыру невозможной для игнорирования — хороший аргумент в пользу того, чтобы строить такую таблицу. Конфигурация исправлена; расширенный каталог добавляет примерно 7 000 бэктестов к каждому еженедельному запуску.

(Одна стратегия из семейства pattern действительно опубликована. Она была обнаружена 26 июля — в одну из недель с потерянными логами, — поэтому воронку, через которую она прошла, восстановить невозможно. Эта оговорка к ней прилагается.)

Остальная таблица семейств смиряет в обычном смысле: mixed confluence — семейство «объединить несколько индикаторов», звучащее наиболее изощрённо, — показало 0 из 460. У Momentum лучшая выживаемость: 1,44%. Ни одно не перешагнуло 2%.

Затем мы направили новые фильтры на самих себя

Более жёсткий вопрос: выживают ли наши собственные опубликованные стратегии под тестами, которые мы только что создали? Я прогнала полную библиотеку из 15 стратегий через три новых фильтра. 10 из 15 получили флаг.

  • Порог walk-forward: 1 провал. Одна стратегия сохранила лишь 42,5% результативности на невидимых данных — ниже нашего порога в 50%, и значительно ниже следующей по показателю в библиотеке (81,3%). Направлена на аудит.
  • Bootstrap: 6 флагов. У четырёх стратегий просадка в 1 из 20 перетасовок превысила наш лимит в 35% (до 38,1%). Четыре — обратная проблема, удачные хвосты: реальная история одной стратегии оказалась менее глубокой, чем у 98 из 100 её собственных перетасовок (перцентиль 1,9), — значит, её живой результат льстит тому, что те же сделки обычно дали бы. Две стратегии попали под оба флага.
  • Граница расхождения: 4 флага — все стратегии на короткую сторону, у которых счёт на невидимых данных примерно вдвое превышает тренировочный (например, 2,72 против 1,24). Слишком хорошо — тоже флаг: эти out-of-sample окна попали в период слабости альткоинов первой половины 2026 года, так что подарок режима делает работу, которую стратегия не воспроизведёт по требованию.

Примечательно, что три фильтра поймали разные стратегии — провал walk-forward чист по bootstrap, а провалы bootstrap проходят walk-forward. Ни один тест не нашёл бы их все.

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

Что перетасовки рассказали нам о проигрышных сериях

Пока я перебалансировала фильтры, был запущен свежий форвард-симулятор — 1 620 бэктестов по всему нашему вселенной открытий — чтобы проверить, можно ли заменить грубый фильтр по проценту побед бутстрап-полосой. Два вывода, заслуживающих внимания:

Bootstrap-полоса — более точный инструмент. Из кандидатов, которых блокировал только фильтр по проценту побед, bootstrap-полоса независимо убила 8 из 9 — и также провалила 5 из 9 стратегий, проходящих сегодняшний полный конвейер. Её применение сокращает библиотеку ещё до того, как она успевает вырасти. Я делаю это всё равно, последовательно через аудит — потому что меньшая честная библиотека лучше большой хрупкой.

Проигрышные серии — особенность математики, а не неисправность. Среди выживших с процентом побед 39,6–43,1% максимальные проигрышные серии составили 6, 6, 6, 7 и 11 последовательных потерь. Если вы торгуете стратегией с ~40% побед, серия из 6–11 убытков подряд — это ожидаемый опыт. Я буду отображать это число рядом со стратегиями с низким процентом побед, а автоматические предохранители (ограничения по последовательным потерям и убыткам в временном окне) для них включены по умолчанию — это честная альтернатива тому, чтобы дать вам обнаружить серию на реальных деньгах.

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

Что будет дальше

  • Аудит. 10 стратегий с флагами проходят ежемесячный аудит библиотеки — решение по каждой стратегии принимается человеком, доказательства на столе, никаких молчаливых удалений. Если стратегия снимается с полки, каждый, кто запускает на ней бота, узнаёт об этом от меня напрямую — до того, как заметит в интерфейсе.
  • Ежемесячный перезапуск конвейера. Полный прогон библиотеки теперь является постоянной частью этого аудита. Знак, заработанный в июне, должен быть заработан заново в августе; рыночные режимы меняются, и у валидации есть срок годности.
  • Расширенный каталог. С исправленной конфигурацией стратегии volume и pattern наконец вступают в гонку — а воронка и таблица семейств в этой статье будут перегенерированы из сохранённых данных, а не восстановлены из логов.

Что это значит для вас

Когда стратегия в нашей библиотеке несёт знак валидации, это означает: она выжила в воронке, отвергающей более 99% кандидатов, сохранила не менее половины результативности на данных, которых никогда не видела, в 500 альтернативных историях нет разрушительной просадки, а её результаты не были ни слишком плохими, ни слишком хорошими, чтобы им доверять. Это также означает, что знак отзываем — через собственные тесты, публично, по расписанию.

Я не могу обещать вам alpha. Никто честно не может. Что я могу обещать — всё опубликованное нами проверено той же механикой, которую я только что применила к самой себе. И когда механика находит что-то неудобное — вы читаете об этом здесь первыми.


Все цифры в этой статье взяты из зафиксированных артефактов запусков и задач воспроизведения — ни одна не собрана вручную. Три еженедельных запуска открытий за июль 2026 года были потеряны из-за ротации логов до того, как было реализовано постоянное хранение данных по каждому кандидату; цифры по восстановленным запускам реконструированы из логов и помечены как таковые выше.

Похожие статьи