Моментум с гистерезисом: меньше шума, меньше оборота
Суть идеи
Landolfi предлагает не новый источник альфы, а новую «сантехнику» вокруг старого моментума. Ключевых элемента два.
Первый — percentile-rank с разделением по знаку. Вместо того чтобы сравнивать текущий return с абсолютным порогом, каждый положительный ход ранжируется только против исторических положительных ходов, каждый отрицательный — только против отрицательных. Это убирает асимметрию распределения: у BTC, например, хвосты вверх и вниз принципиально разные по форме, и единый z-score их смешивает.
Второй — гистерезисная полоса. Сигнал не переключается, пока ранг не пробьёт верхний порог входа И не упадёт ниже нижнего порога выхода. Между ними — «мёртвая зона», в которой позиция остаётся неизменной. Механизм прямой: моментум-сигналы на дневном горизонте часто осциллируют вокруг порога, генерируя оборот без реальной смены режима. Гистерезис — это буфер, который требует «убедительного» разворота, прежде чем закрыть позицию.
Валидация у автора — сетка параметров (lookback, ширина полосы), что честнее одиночного in-sample fit, но всё равно требует OOS-проверки.
Применимость к крипте
BTC/ETH — идеальный полигон: высокая волатильность означает, что наивный моментум-сигнал переключается слишком часто и транзакционные издержки съедают альфу. Гистерезис здесь не косметика, а необходимость.
Наши ряды позволяют собрать всё напрямую: дневные и часовые returns BTC/ETH, rolling-z уже в движке. Percentile-rank по знаку реализуется как две отдельные эмпирические CDF — одна для r > 0, другая для r < 0 — на скользящем окне. Режимный фильтр логично подключить через ATM IV или реализованную волатильность: в периоды экстремальной vol (например, IV > 90-го перцентиля) моментум исторически ломается, и сигнал стоит глушить.
Замена акционного контекста на крипту: нет дивидендов, нет корпоративных событий, зато есть funding rate как прокси перегрева — его можно добавить как дополнительный фильтр входа.
Тестируемо ли
Да, высокая готовность. В нашем Python-движке: (1) считаем sign-split percentile-rank на rolling окне 30/60/90 дней, (2) задаём гистерезисную полосу как пару порогов (entry_pct, exit_pct), (3) прогоняем walk-forward с expanding window, (4) считаем Deflated Sharpe по сетке параметров.
Чего нет напрямую: тиковых данных для точного учёта спреда на разворотах — но на дневном горизонте это не критично. Для часового горизонта нужно добавить реалистичный slippage (0.05–0.1% на сделку).
Сомнения
Сетка параметров — это всё ещё in-sample оптимизация, даже если она шире одной точки. Число независимых моментум-режимов в истории BTC невелико: рынок прошёл через 3–4 структурных цикла, и красивый backtest может просто подогнаться под 2020–2021 bull run. Гистерезисная полоса добавляет два свободных параметра поверх lookback — риск переподгонки растёт нелинейно. Отдельный вопрос: работает ли percentile-rank лучше обычного z-score после учёта транзакционных издержек, или выигрыш исчезает?
Следующий шаг
Прогнать walk-forward на дневных returns BTC (2018–2024): sign-split percentile-rank с lookback=60 дней, гистерезисная полоса (entry=0.75, exit=0.40), режимный фильтр по ATM IV (выключать сигнал при IV > 80-го перцентиля). Сравнить Deflated Sharpe против baseline наивного моментума (raw z-score, тот же lookback). Если разница < 0.1 SR после издержек — идея не окупает сложность.
Результаты тестов
Дописано 25 августа 2026 — прогон «Следующего шага» на нашем движке и данных. Сама статья выше не менялась.
Спека выполнена буквально: дневные BTC и ETH, sign-split percentile-rank, гистерезисная полоса (0.75, 0.40), режимный гейт по ATM IV выше 80-го перцентиля, walk-forward с expanding-окном, Deflated Sharpe против наивного z-score того же lookback, порог решения «разница < 0.1 SR — идея не окупает сложность». Сверх буквы: сетка из 2160 конфигураций на актив, два режима (long/short и long/flat), лестница издержек 0–20 б.п., три эмпирических нуля и синтетический мир, в котором статья верна по построению.
Данные — Binance, дневные закрытия 2017-08-17 … 2026-08-24 (перп со спот-бэкфиллом левее сентября 2019), фандинг перпа по фактическим выплатам (в среднем +10.6% годовых у BTC и +12.5% у ETH — постоянный налог на лонговую ногу), DVOL Deribit с марта 2021. Окна: ART 2018–2024 (буква спеки), POST 2025-01 … 2026-08 (истинный OOS к её же окну) и полная история. Решение по данным на закрытии дня d, сделка днём d+1.
Как ингредиенты вообще сравнивать
Главная методическая проблема спеки: percentile-rank живёт в шкале [0, 1], а z-score — в сигмах, и «порог 0.75» в них значит разное. Пороги сравнимы только после приведения к одной шкале, поэтому все три трансформа отдают score ∈ [−1, +1] как одну и ту же величину — квантиль хода в его собственной истории:
gauss_z— 2·Φ(z) − 1, параметрический двойник перцентиля (это и есть «наивный z-score» статьи);pool_pct— 2·ECDF(m) − 1, перцентиль-ранг без разделения по знаку;sign_pct— +ECDF₊(m) при m > 0 и −ECDF₋(m) при m < 0, идея статьи.
Так «top 25% ходов вверх» у sign-split и «верхние 12.5% всех ходов» у пула — это один и тот же порог 0.75, и разница в результате принадлежит ингредиенту, а не шкале. Горизонт хода K ∈ {1, 5, 20, 60, 90} дней, окно ранга W ∈ {30, 60, 90, 252}. Слово «lookback = 60» в спеке читается двояко (горизонт хода или окно ранга), поэтому оба прочтения прогнаны отдельно и обозначены явно.
Наивному семейству дали свои ручки снижения оборота — порог, длину K, ширину W и EMA-сглаживание скора. Без этого сравнение нечестно: гистерезис снижает оборот, но снижать оборот умеет и голый порог.
Премиса: съедают ли издержки альфу
Статья исходит из того, что «наивный моментум переключается слишком часто и транзакционные издержки съедают альфу», а значит гистерезис «не косметика, а необходимость». На дневной крипте это просто арифметически не так. Годовая волатильность в окне спеки — 69% у BTC и 88% у ETH; оборот 50 единиц в год при 6 б.п. стоит 3.0% годовых, то есть 0.04 SR у BTC и 0.03 у ETH.
| издержки, б.п. | лучший конфиг БЕЗ полосы, BTC | ETH |
|---|---|---|
| 0 | +1.08 | +1.08 |
| 6 | +1.07 | +1.05 |
| 20 | +1.05 | +0.97 |
Лучший наивный конфиг теряет при переходе от нулевых издержек к 20 б.п. 0.03 SR у BTC и 0.11 у ETH; медианный конфиг семейства — 0.13 и 0.10. Съедать тут нечего: поиск и без всякого гистерезиса выбирает конфигурации с оборотом 4–50 в год. Необходимости в полосе на этом горизонте нет — вопрос только в том, добавляет ли она что-нибудь сверх.
Ингредиент 1: разделение ранга по знаку
Прямое парное сравнение — тот же K, то же W, та же полоса или порог, меняется только трансформ (ART, long/short, 6 б.п., ~700 пар):
| контраст | BTC ΔSR | доля Δ>0 | ETH ΔSR | доля Δ>0 |
|---|---|---|---|---|
| sign_pct − pool_pct | +0.030 | 0.54 | +0.083 | 0.63 |
| sign_pct − gauss_z | +0.026 | 0.54 | +0.094 | 0.62 |
| pool_pct − gauss_z | −0.006 | 0.47 | +0.011 | 0.51 |
На OOS-окне 2025–2026 знаки переворачиваются: у BTC sign_pct − gauss_z = −0.157 (доля 0.37), у ETH −0.106 (0.38). Разброс между парами (p10…p90 от −0.23 до +0.31 у BTC) в разы больше самих средних.
Ингредиент при этом не бездействует: позиции sign_pct и pool_pct расходятся на 3–35% дней (тем сильнее, чем длиннее K и короче W). И асимметрия, на которую ссылается статья, у BTC действительно есть — но она меняет знак с горизонтом: скошенность логарифмического хода −0.98 на одном дне, −0.44 на пяти, +0.18 на двадцати, +0.62 на девяноста. То есть единый z-score «смешивает» разные хвосты сильнее всего на однодневном горизонте — ровно там, где ход предсказывает завтрашний день с ОБРАТНЫМ знаком (см. ниже), а на горизонтах, где моментум вообще имеет смысл, смешивать почти нечего.
Ингредиент 2: гистерезисная полоса
Механизм реализован и работает как обещано: полоса снижает оборот в среднем на 16–17 единиц в год (проверено на всех 12 парах порогов — исключений нет). Вопрос в том, что она даёт по деньгам. Парная выгода против того же порога входа, тот же скор:
| издержки, б.п. | BTC, mean Δ(полоса − порог) | ETH |
|---|---|---|
| 0 | +0.019 | +0.033 |
| 2 | +0.029 | +0.041 |
| 6 | +0.049 | +0.057 |
| 10 | +0.069 | +0.073 |
| 20 | +0.118 | +0.113 |
Выгода строго монотонна по издержкам и обращается в ноль при нулевых издержках. То есть полоса не улучшает сигнал — она экономит комиссию. Это ровно то, чем она заявлена, но тогда её надо сравнивать не с тем же порогом, а с любым другим способом торговать реже.
При равном обороте преимущество исчезает. Фронтир (максимум нетто-SR внутри каждой из 12 корзин оборота): на BTC лучший конфиг без полосы выше лучшего с полосой в 11 корзинах из 12, медианная разница −0.13 SR; на ETH — ничья, 6 корзин из 12 и медиана −0.02.
Более чувствительная форма того же вопроса — матчинг каждого конфига с полосой на ближайший по обороту наивный (±10%): средняя Δ = −0.58 у BTC и −0.69 у ETH, доля выигрышей 1–3%. (Здесь один конфиг сравнивается с максимумом по корзине, то есть статистика смещена против полосы; насколько именно — показано ниже эмпирическим нулём.) Если наивному семейству запретить EMA и оставить только голый порог — то есть сравнивать ровно так, как предлагает статья, — картина не меняется: матчинг-Δ = −0.49 (BTC) и −0.49 (ETH), доля выигрышей 7% и 14%.
Нуль, который решает вопрос
Парная выгода полосы (+0.05 при 6 б.п.) выглядит маленькой, но положительной. Чтобы понять, значит ли она хоть что-нибудь, тот же контраст прогнан в двух синтетических мирах: iid-перестановка реальных пар (доходность, фандинг) — распределение и снос сохранены точно, погибла только временная структура; и марковский мир, где статья верна по построению — скрытый устойчивый режим средней длительности 30 дней плюс наблюдательный шум, из-за которого наивный порог обязан дребезжать.
BTC, окно ART, 100 перетасованных и 30 режимных миров:
| мир | 0 б.п. | 6 б.п. | 20 б.п. | матчинг-Δ (6 б.п.) |
|---|---|---|---|---|
| реальный | +0.012 | +0.043 | +0.112 | −0.454 |
| iid-перестановка | −0.003 ± 0.052 | +0.034 ± 0.052 | +0.117 ± 0.053 | −0.429 ± 0.112 |
| скрытый режим | +0.007 ± 0.054 | +0.046 ± 0.054 | +0.135 ± 0.054 | −0.434 ± 0.111 |
Три вывода сразу.
Первый: реальные данные неотличимы от перетасованных — pEmp 0.42 при 0 б.п., 0.45 при 6 и 0.56 при 20 (у ETH 0.16 / 0.18 / 0.23). При 20 б.п. реальная выгода полосы даже ниже, чем в перетасованном ряду.
Второй, более неприятный для самой конструкции: в мире, где режим существует и полоса обязана помогать, гросс-выгода тоже +0.007, то есть ноль. Наш парный контраст не различает мир с режимом и мир без него — значит, отрицательный результат по нему нельзя читать как «режима нет»; он читается как «этот контраст меряет только сэкономленную комиссию». MDE парной статистики — 0.13 SR при наблюдаемых значениях 0.01–0.06.
Третий: во всех девяти конфигурациях режимного мира (идеальный SR 0.5/1.0/2.0 × длительность режима 10/30/60 дней) лучший конфиг с полосой оказался ниже лучшего без неё — на 0.01–0.17 SR. Даже там, где дребезг реален, EMA-сглаживание и широкий порог гасят его не хуже полосы.
Буквальный «следующий шаг» — уверенный минус
Самое буквальное прочтение спеки (ранг дневного хода против 60-дневной истории того же знака, полоса 0.75/0.40) даёт SR −1.05 у BTC и −1.07 у ETH в окне 2018–2024, pEmp 0.98 против ротационного нуля. Причина не в полосе, а в горизонте: предиктивный IC ранга однодневного хода против завтрашней доходности отрицателен и значим — −0.045 (p = 0.02) у BTC и −0.067 (p = 0.00) у ETH. На одном дне крипта возвратна, и конструкция торгует строго против измеренного знака.
Полоса там вдобавок не работает вовсе: у K = 1 её оборот 160 в год против 161 у голого порога на том же скоре, а «мёртвая зона» удерживает позицию всего 5% дней. Гистерезис гасит колебания вокруг порога, но бессилен против знакопеременного сигнала: вход в противоположную сторону всегда открыт при |score| ≥ entry.
Два других прочтения lookback ведут себя пристойнее (K = 20 / W = 60: SR +0.61 у BTC и +0.77 у ETH; K = 60 / W = 252: +0.57 и +0.05), но ни одно не проходит family-wise порог.
Правило самой статьи
«Если разница < 0.1 SR после издержек — идея не окупает сложность». Считаем Δ авторского конфига против наивного z-score того же lookback во всех ячейках (2 актива × 3 окна × 3 прочтения lookback = 18):
| K=1 / W=60 | K=20 / W=60 | K=60 / W=252 | |
|---|---|---|---|
| BTC 2018–2024 | −0.33 | +0.32 | −0.11 |
| BTC 2025–2026 | −0.76 | −0.05 | −0.80 |
| BTC полная | −0.33 | +0.22 | −0.23 |
| ETH 2018–2024 | +0.26 | +0.21 | −0.35 |
| ETH 2025–2026 | +0.09 | −0.40 | +0.11 |
| ETH полная | +0.20 | +0.17 | −0.21 |
Порог берут 7 ячеек из 18 — и каждый раз разные. Конфиг, прошедший на BTC 2018–2024, проваливается на нём же в 2025–2026 и на ETH. Правило работает как подбрасывание монеты.
Семейство целиком
Приговор выносит ротационный max-T по всем 2160 конфигам (500 круговых сдвигов, издержки и обороты сохранены):
| лучший SR | pEmp | p_max | E[max SR | H₀] | DSR | |
|---|---|---|---|---|---|
| BTC 2018–2024 | +1.07 | 0.020 | 0.696 | 0.98 | 0.111 |
| BTC полная | +1.11 | 0.000 | 0.052 | 0.85 | 0.353 |
| ETH 2018–2024 | +1.09 | 0.010 | 0.410 | 0.97 | 0.070 |
| ETH полная | +1.02 | 0.004 | 0.176 | 0.84 | 0.072 |
Ни одна ячейка не проходит family-wise. И тот же ответ приходит с другой стороны: лучший из 2160 конфигов на перетасованном BTC даёт в среднем SR 0.93 при p95 = 1.23 — наши 1.07 сидят внутри (pEmp 0.20). Перебор сеткой сам по себе рисует «стратегию» не хуже найденной.
Walk-forward expanding (IS ≥ 365 дней, OOS 91, 32 фолда): argmax-склейка +0.59 у BTC и +0.25 у ETH против +0.82 и +0.74 у buy & hold на том же отрезке (склейка начинается на год позже начала истории); равновзвешенное всё семейство — +0.33 и +0.08. Выбор конфига на истории проигрывает пассивной покупке, что для long/short-конструкции с полурыночной экспозицией — приговор.
Отдельная оговорка про long/flat: он выглядит лучше (лучший SR 1.46 у BTC), но половина такого бэктеста — тождественно buy & hold: long/flat моментум ≡ ½·B&H + ½·знаковая стратегия. B&H в том же окне даёт 0.75.
Что всё-таки шевельнулось
Sign-split на горизонте 60 дней — как предиктор, а не как стратегия. IC ранга против завтрашней доходности: +0.037 (p = 0.04) у BTC и +0.041 (p = 0.01) у ETH, тогда как пул-перцентиль (+0.011 / +0.014) и z-score (+0.015 / +0.021) незначимы. Знак и горизонт совпали на двух активах — это единственное место, где разделение по знаку что-то дало. Но испытаний 15 на актив (5 горизонтов × 3 трансформа), поправка на них съедает значимость, а в SR это не конвертируется: конфиги K = 60 дают +0.57/+0.05 с p_max ≈ 0.99.
Третий, вскользь упомянутый ингредиент — гейт по волатильности — интереснее первых двух. Глушение сигнала в верхнем квантиле воли (нуль фильтра — циклический сдвиг только гейта, скважность сохраняется):
| актив, гейт | база | с гейтом | Δ | pEmp |
|---|---|---|---|---|
| ETH, RV20 > 80 пк | +1.03 | +1.12 | +0.09 | 0.087 |
| ETH, DVOL > 80 пк | +0.35 | +0.70 | +0.35 | 0.027 |
| BTC, DVOL > 80 пк | +0.69 | +1.12 | +0.43 | 0.000 |
| BTC, RV20 > 80 пк | +1.07 | +1.00 | −0.07 | 0.443 |
Знак чаще положительный, но выборка DVOL начинается в 2021 году, тестов 16, и на BTC два гейта дают противоположные ответы. Это кандидат на отдельный прогон, а не результат.
Контроли и верификация
Мощность теста: внедрённый в реальные доходности моментум-эдж амплитудой 10 б.п./день поднимает лучший SR с 1.07 до 1.33, 40 б.п. — до 2.36. Мощность конструкции (мир со скрытым режимом): описана выше — конструкция ловит режим (SR растёт с его силой), но преимущества полосы не находит даже там, поэтому вывод формулируется как «контраст меряет комиссию», а не как «режима нет».
Лукахед: future-shock (скор строится из ходов, сдвинутых на 5 дней в будущее) поднимает SR авторского конфига с +0.73 до +3.21 — проводка на месте. Лаговый профиль корреляции скора с доходностью: −1 день +0.228, тот же день +0.239, следующий +0.052 — ряд смотрит строго назад.
Независимый верификатор (verify_hysteresis_momentum.py, 16 проверок, реализация с нуля) прошёл 16 из 16: sign-split ранг, посчитанный наивным циклом по окну, совпал с векторной версией побитово (max|Δ| = 0.0); гистерезис, реализованный явным конечным автоматом, совпал с векторным трюком из двух forward-fill на всех 12 парах порогов без единого расхождения; P&L, посчитанный на pandas, совпал с матричным; оборот совпал; цены сверены с независимо скачанным спотовым рядом Binance (медианное относительное расхождение 0.04%, корреляция дневных доходностей 0.9999). Отдельная проверка механизма: полоса обязана снижать оборот против порога = entry — выполнено во всех 12 парах.
Вердикт
Обе «сантехнические» идеи статьи на дневной крипте не подтверждаются.
Разделение перцентиль-ранга по знаку даёт +0.03 SR у BTC и +0.08 у ETH в окне спеки, меняет знак на OOS-окне и неотличимо от перетасованного ряда (pEmp 0.34). Пул-перцентиль без разделения знака не отличается от обычного z-score вовсе — то есть дело не в «разделении», а в том, что перцентильная шкала как таковая ничего не добавляет.
Гистерезисная полоса делает ровно то, что заявлено — снижает оборот на 16–17 единиц в год, — и ровно этим исчерпывается: её выгода равна нулю при нулевых издержках и линейно растёт с ними. При равном обороте она проигрывает наивному конфигу в 97–99% пар (86–93%, если наивному семейству запретить EMA и оставить голый порог), причём проигрывает и в синтетическом мире, построенном специально под неё. Сама премиса — «издержки съедают альфу» — на дневном горизонте при воле 69–88% годовых количественно неверна: лучший наивный конфиг теряет на 20 б.п. всего 0.03–0.11 SR.
Собственное правило статьи («меньше 0.1 SR — не окупает сложность») выполняется в 7 ячейках из 18 и каждый раз в разной, а всё семейство из 2160 конфигураций не проходит family-wise порог ни на одном активе ни в одном окне (p_max 0.05–0.70, DSR 0.07–0.35) и не отличается от лучшего конфига на перетасованных данных.
Единственное, что заслуживает продолжения, — не первый и не второй ингредиент, а третий, упомянутый в спеке одной строкой: глушение моментума в верхнем квантиле волатильности. И отдельно — наблюдение, что sign-split ранг на 60-дневном горизонте показал значимый предиктивный IC на обоих активах, не превратившийся в Sharpe.
Скрипты: research_hysteresis_momentum.py (прогон), research_hysteresis_extra.py (дискриминирующая статистика, IC, буква сравнения), verify_hysteresis_momentum.py (верификация).
Дополнение: гейт по волатильности прогнан отдельно
Хвост выше («кандидат на отдельный прогон») закрыт в тот же день — вердикт отрицательный.
Хинт в таблице выше мерялся неправильно, и это стоит сказать прямо: база там была выбрана (argmax из 2160 конфигов), а ΔSharpe от гейта путает два эффекта — «моментум ломается в шторм» и «гейт срезает экспозицию именно в дни с высокой σ, то есть уменьшает и знаменатель». Отдельный прогон сделан на фиксированных базах и с пассивным контролем.
Конструкция. Базы не выбираются: TSMOM_K = знак K-дневной логдоходности, K ∈ {20, 60, 90}; конфиг статьи; постоянный лонг (контроль на vol-managed бету) и та же траектория экспозиции со случайным знаком (контроль «гейт работает от тайминга экспозиции, а не от сигнала»). Первичная ячейка объявлена заранее: TSMOM_60 + RV20, трейлинг-перцентиль по 400 наблюдениям (семантика прод-индикатора), порог 80, глушить верх. Сетка — 48 гейтов (4 меры волы × 2 окна × 3 порога × 2 направления). Правило решения тоже объявлено заранее: гейт признаётся живым, только если механизм показан значимо, ΔSharpe проходит нуль фильтра, знак одинаков на BTC и ETH и эффект переживает выравнивание риска.
Механизм: не подтверждается. Вола-нормированный IR по квинтилям трейлинг-перцентиля (TSMOM_60):
| квинтиль (ср. вола) | BTC: IR стратегии | hit | ETH: IR стратегии | hit |
|---|---|---|---|---|
| 1 (32% / 45%) | +0.95 | 0.486 | +1.34 | 0.487 |
| 2 (44% / 59%) | +1.19 | 0.519 | +2.14 | 0.518 |
| 3 (53% / 72%) | +0.20 | 0.519 | +1.01 | 0.519 |
| 4 (64% / 84%) | +2.30 | 0.545 | +1.21 | 0.547 |
| 5 (89% / 117%) | +0.73 | 0.530 | −0.35 | 0.505 |
Ключевая деталь — точность знака в шторм не падает: 0.530 против 0.486 в тихом квинтиле у BTC, 0.505 против 0.487 у ETH. Сигнал угадывает направление не хуже; хуже становится размер потерь на тех днях, когда он ошибся. Это описание хвоста, а не поломки сигнала.
Формально: DiD «(моментум верх − низ) − (пассив верх − низ)» у первичной базы даёт −1.30 CI95 [−3.53, +0.67] на BTC и −0.97 [−2.75, +0.76] на ETH; непрерывная форма (наклон по перцентилю) — −0.34 [−4.38, +2.99] и −1.01 [−4.81, +2.56]. Знак везде «в сторону статьи», ноль везде внутри CI.
Бэктест: значимость есть, но не там, где механизм.
| без гейта | с гейтом | Δ | pEmp (нуль фильтра) | |
|---|---|---|---|---|
| BTC, TSMOM_60 | +0.74 | +0.83 | +0.09 | 0.124 |
| ETH, TSMOM_60 | +0.69 | +1.01 | +0.32 | 0.007 |
| BTC, постоянный лонг | +0.66 | +0.43 | −0.22 | 0.827 |
| ETH, постоянный лонг | +0.64 | +0.71 | +0.07 | 0.180 |
| BTC/ETH, случайный знак | −0.62 / +0.45 | −0.74 / +0.44 | −0.12 / −0.01 | 0.843 / 0.383 |
Пул по двум активам: +0.20 при общем нуле (одинаковый сдвиг гейта на обоих) pEmp = 0.008; family-wise по сетке из 48 гейтов ETH проходит (pMax 0.007), BTC — нет (0.157). Медиана Δ по сетке отрицательна на обоих активах (−0.14 и −0.17), доля положительных 0.38 и 0.46; направление статьи всё же лучше зеркального (mute-high +0.04 / +0.15 против mute-low −0.53 / −0.75).
Три проверки, которые эту значимость снимают.
Потолок. В синтетическом мире, где слом привязан ровно к тому же порогу, что и гейт (то есть гейт попадает в режим идеально), полное обнуление моментума в шторме даёт всего:
| слом | SR моментума в тихом / в шторм | ΔSharpe гейта |
|---|---|---|
| нет | +0.74 / +0.60 | −0.03 |
| половина | +0.99 / +0.12 | +0.10 |
| полный | +0.85 / +0.17 | +0.09 |
| разворот | +0.87 / −0.31 | +0.19 |
| сильный разворот | +0.71 / −1.02 | +0.32 |
Наблюдаемые на ETH +0.32 соответствуют миру, где моментум в верхнем квинтиле имеет SR около −1.0. Измеренный там IR — −0.35, и его CI накрывает ноль. ΔSharpe требует поломки втрое большей, чем та, которую видно напрямую.
Эпизоды. Гейт выключает позицию 53 раза на BTC и 38 на ETH (18% дней). Джекнайф по эпизодам: один отрезок 8 марта — 4 апреля 2020 даёт 149% всего прироста BTC и 60% ETH, топ-3 эпизода — 257% и 98%. Без 2020 года пул падает с +0.20 до +0.05 (BTC +0.00, ETH +0.10). По годам знак пляшет: у BTC Δ отрицательна в 4 годах из 9, у ETH — в 4 из 9.
Выравнивание риска. Непрерывное масштабирование 1/σ забирает половину: у ETH Δ гейта падает с +0.32 до +0.16 поверх вола-таргета, у BTC с +0.09 до +0.03. Но и сам вола-таргетинг держится на том же эпизоде — без 2020 он даёт +0.05 (BTC) и +0.11 (ETH) при разбросе по годам от −0.81 до +0.76. Рекомендовать его как «правильную форму гейта» на этих данных нельзя.
Мощность. Механизм-тест слаб: в мире, где моментум в шторм ломается ПОЛНОСТЬЮ, DiD и наклон ловят это в 0–17% миров. CI статистики — ±3–5 IR-единиц при эффекте порядка 1–1.5, то есть для приговора механизму нужно примерно вдесятеро больше истории. Поэтому формулировка отрицательного результата — «не проверяемо на нашей выборке», а не «опровергнуто». Проверено и обратное: калибровка CI честная — при циклически сдвинутом перцентиле доля ложных значимостей 3% и 5% из 60 прогонов.
Вердикт по хвосту. Собственное пре-регистрированное правило не выполнено: механизм не показан ни на одном активе, BTC не проходит нуль фильтра, а весь пул держится на одном месяце 2020 года. То, что осталось после снятия этого месяца (+0.05 Sharpe), не окупает лишнюю степень свободы. В прод не идёт ни бинарный гейт, ни его непрерывная форма. Единственное, что стоит забрать из прогона как знание: в верхнем квинтиле волы у моментума не портится точность знака — портится распределение потерь, и это вопрос сайзинга, а не фильтра.
Верификатор verify_vol_gate.py — 14 проверок, 14 пройдено (трейлинг-перцентиль циклом против векторного, DiD и наклон независимо на pandas и явном МНК, калибровка CI на сдвинутом перцентиле, скважность гейта на белом шуме, гейт «из будущего» обязан быть лучше честного — +0.48 против +0.32).
Скрипты: research_vol_gate.py, verify_vol_gate.py.