Загрузка данных
Phase 4 — направленный движок. Реализую три предиктора и гейт голосования, но один пункт требует честного решения сразу, как и раньше с овернайтами.
Про «Индекс рынка»: генерировать случайный синтетический IMOEX я не буду — это впрыснет бессмысленный предиктор и результат нельзя будет интерпретировать. Но у меня есть кое-что лучше реального IMOEX-файла: четыре из пяти бумаг (SBER, GAZP, LKOH, GMKN) — крупнейшие составляющие самого IMOEX. Поэтому я строю равновзвешенный индекс из корзины, причём для каждой бумаги — leave-one-out (индекс из остальных четырёх), чтобы предиктор «поводыря» не подсматривал в собственную цену торгуемого тикера. Это настоящий рыночный breadth-сигнал, а не фейк. И все три предиктора считаются строго на данных, известных к моменту сигнала (никакого look-ahead).
Добавляю индекс и гейт в харнесс.Взвешивая честный вывод: направленный край не обнаруженВзвешивая честный вывод: направленный край не обнаруженPF и t численно подросли (t: 1.60→2.20, нижняя граница ДИ 1.04 — формально перешагнула значимость). Но прежде чем это праздновать, два противоречия требуют вскрытия: число сделок ВЫРОСЛО (187→240) при добавлении фильтра, а сигнальный hit-rate остался ~49% (ниже 50!). Проверю вклад загрязнённого SMLT и чистый пул.Выявил артефакты в результатах и отклонил гипотезу направленного преимуществаВыявил артефакты в результатах и отклонил гипотезу направленного преимуществаПроверка вынесла однозначный вердикт. Копирую обновлённый харнесс (с направленным движком) и излагаю честно — это не то, на что мы надеялись.Ran a command, read a fileRan a command, read a fileНаправленный движок реализован: три предиктора (Value Shift, Close-vs-POC, leave-one-out индекс из корзины как реальный IMOEX-прокси), гейт голосования ≥2/3, все без look-ahead. Прогнал пул по пяти бумагам против baseline. Прямой ответ на твой вопрос — нет, математическое ожидание из зоны шума мы не вытащили, и вот почему, с цифрами.
Сначала то, что выглядит как успех. На пуле всех пяти бумаг гейт поднял trade-level метрики: PF 1.29→1.36, Net +7.6%→+12.4%, t-стат 1.60→2.20, и бутстрап PF 95% ДИ сдвинулся до [1.04, 1.76] — формально PF=1 вышел из интервала. Если остановиться здесь, можно объявить победу.
Но два противоречия ломают эту картину.
Противоречие 1: hit-rate НЕ сдвинулся. Это твой главный критерий — увести направленную точность из 50% в зону преимущества. Чистый сигнальный форвард-тест (неперекрывающийся) говорит:
baseline hit-rateс гейтом hit-rateH=1648.79%49.35%H=3247.64%48.67%
Точность как была ~49%, так и осталась — и она ниже 50%. Три предиктора не сделали направление пробоя чаще правильным. Знаковая форвард-доходность гейтнутых сигналов +0.057% (H=16) — по-прежнему в разы ниже барьера издержек 0.18%. На уровне самого сигнала движок ничего не дал.
Противоречие 2: число сделок ВЫРОСЛО (187→240) при добавлении фильтра. Фильтр, который блокирует сигналы, не должен увеличивать сделки. Причина: при «одной позиции за раз» блокировка одних пробоев освобождает робота для других, более поздних. То есть baseline и гейт — это разные последовательности сделок, а не «те же минус отсечённые». Рост PF частично от этой перетасовки, а не от лучшего отбора направления.
И решающая проверка — откуда взялась значимость:
пулNPFwint-статPF 95% ДИзначимо?все 5 (с SMLT)2401.3637.9%2.20[1.04, 1.76]формально дасвежие 4 (без SMLT)1971.2536.0%1.44[0.91, 1.67]НЕТтолько SMLT431.9646.5%2.03[1.05, 3.59]да
Вся «значимость» держится на SMLT — бумаге, на которой мы четыре фазы и разрабатывали стратегию (она не out-of-sample на уровне дизайна). SMLT даёт 42% всей прибыли пула. Убираешь её — на четырёх честных именах остаётся PF 1.25, t=1.44, ДИ [0.91, 1.67], PF=1 внутри → незначимо. t=2.20 на всех пяти — это SMLT перетянул через порог.
Почему так, и это согласуется со всем разбором. Три предиктора — Value Shift, Close-vs-POC, индексный импульс — все моментум-семейства и скоррелированы с самим пробоем (пробой VAH обычно случается, когда POC растёт, закрытия выше POC, рынок выше EMA). Поэтому гейт в основном подтверждает собственное направление пробоя, а не добавляет независимую информацию. А продолжение после пробоя — монета (Phase 3.3). Подтверждать монетку коррелированными с ней сигналами — значимости не создаёт. Тот мизер положительной знаковой доходности, что есть, — это положительная асимметрия от редких крупных движений (волатильность), и он ниже издержек.
И поверх всего — multiple testing на уровне проекта: мы прогнали M5, M15, свинг, дневной стоп, пивотный стоп, фрикционный фильтр, конфлюэнтность, теперь три предиктора с голосованием. t=2.20, едва перешагнувший 1.96 после ~8 итераций дизайна, — ровно тот пограничный ложноположительный результат, который порождает перебор гипотез. Дефлированный на число попыток порог сильно выше 2.2.
Итог. Hit-rate остался ~49%, не сдвинулся в преимущество. Значимость на trade-level — артефакт загрязнённого SMLT (на свежих именах t=1.44, незначимо) и перетасовки сделок. Сигнальная знаковая доходность ниже издержек. Из зоны шума не вышли.
Что это значит трезво: направленную гипотезу AVVM мы теперь проверили с двух сторон — сырой форвард-тест и направленный движок из трёх предикторов, — и она не выживает ни там, ни там. Добавлять ещё моментум-предикторы того же семейства бессмысленно: они снова будут скоррелированы с пробоем. Если двигаться дальше по направлению — предикторы должны быть ортогональны профилю/моментуму (поток ордеров, опционный скью, межрыночные/новостные катализаторы — то, что не выводится из той же цены и объёма), и проверка обязана идти на имени, ни разу не тронутом в разработке, со значимостью, дефлированной на число попыток. Но априори теперь сильно отрицательный.
Честная рекомендация: единственный доказанный актив здесь — детектор волатильностного режима, и он относится к другому классу (длинная гамма / расширение диапазона), а не к направленному лонг-шорту. Хочешь — развернём харнесс в эту сторону (тест: растёт ли реализованная волатильность/окупается ли длинный стрэддл на входе в TREND_IMPULSE), либо принесём ортогональный направленный предиктор и прогоним его через тот же честный фильтр. Что выбираешь?