🎯 Déjà-vu Iter 2 — Pattern Library + 3y OOS

Сегодня 2026-04-24 · Регим R4 — growth fade · 3-year OOS на 49→42 фичах (без futures)
Спецификация: «несколько похожих дней с множественными совпадениями MOO-print или post-open расхождениями» — реализовано.
📌 Главный честный вывод: «несколько похожих дней с одинаковым pattern shape» — это редкое явление. Только R0 (panic risk-off) даёт 12 стабильных направленных паттернов из 50 тикеров. В спокойных режимах индивидуальное поведение тикеров доминирует над регимом — magnitude (CI-bootstrap) работает, но shape (named pattern) систематически воспроизводится только в стрессе. Это и должно быть в дашборде «прописано» — paper trade R0-only сценарий самый реалистичный.

Сегодняшний регим R4 (growth fade) — что говорят паттерны

today's cluster
R4
arkk-0.9 xly-0.8 qqq-0.8 spy-0.8 xlk-0.8 xlc-0.7
похожих дней в 3y истории
171
Достаточно для bootstrap, но shape-pattern не стабильны при таком разнообразии
stable shape-patterns сегодня
0
В R4 ни один тикер не достигает 60% направленной стабильности — нужны magnitude-сигналы

R0 (panic risk-off) — единственный регим с воспроизводимыми pattern'ами

В R0 (всего 36 panic-дней за 3 года) тикеры демонстрируют систематический gap-down → bounce. Если завтра рынок откроется в R0 — это самые надёжные deja-vu сигналы.
TickerAvg patternStable % Mean gapMean 25м → 11:00→ closeDirectionОписание
SQMOO_GAP_DOWN_BOUNCE 60%-1.46%+1.15% +1.47%+0.83% LONG открылся с гэпом ВНИЗ и развернулся ВВЕРХ — bounce
PGPOST_OPEN_RUN_UP 75%+0.00%+0.51% +0.44%+0.25% LONG открылся ровно, в первые 25 мин ВВЕРХ — defensive bounce
XLPFLAT (но stable) 67%-0.07% +0.31%+0.26% LONG Defensive consumer staples bounce
XRTFLAT (но stable) 65%-0.30% +0.27%+0.80% LONG Retail bounce — 2x close vs 11:00 (продолжается)
HYGFLAT (но stable) 65%-0.06%+0.16% +0.13%+0.22% LONG High-yield bond bounce — credit normalization
GLDFLAT (но stable) 64%+0.42% -0.21%-0.21% SHORT Gold gap-up в panic, к 11:00 fade — risk-on перевешивает
XOMFLAT (но stable) 61%-0.27%-0.09% +0.30%+0.41% LONG Energy oversold bounce
CVXFLAT (но stable) 61%-0.29%-0.34% +0.19%+0.21% LONG Same dynamic as XOM
WMTFLAT (но stable) 61%-0.10%+0.49% +0.26%+0.34% LONG Defensive bounce
USOFLAT (но stable) 61%-0.71%-0.05% +0.35%+0.49% LONG Oil oversold
EWJFLAT (но stable) 61%-0.26%+0.23% +0.17%+0.51% LONG Japan bounce
VLOFLAT (но stable) 60%-0.27%+0.32% +0.26%+0.68% LONG Refiner oversold

Stable% = доля дней где знак ret_to_1100 совпадает со знаком средней. ≥60% = considered stable. 12 из 50 тикеров проходят порог ТОЛЬКО в R0 — в R1-R4 паттерны слишком разнообразны.

5 регимов 3-year OOS (без futures фич, k=5 KMeans)

R0 · n=36
Panic risk-off
vxx+2.6 spy-2.2 xlf-2.2 tlt-spy+2.0 qqq-2.0 vix+1.9
12 stable patterns
R1 · n=259
Yield-curve normal
t10y2y+0.9 dgs2-0.8 nfci-0.8 hyoas-0.7 arkk_5d+0.3
0 stable patterns
R2 · n=114
Risk-on rally
spy+1.4 xly+1.3 qqq+1.3 arkk+1.2 xlf+1.2 xlk+1.2
1 stable pattern
R3 · n=222
Yield-curve flat / inverted
t10y2y-1.0 nfci+0.8 dgs2+0.8 hyoas+0.6 vix-0.6
0 stable patterns
R4 · n=171 · СЕГОДНЯ
Growth fade
arkk-0.9 xly-0.8 qqq-0.8 spy-0.8 xlk-0.8 xlc-0.7
0 stable patterns

Walk-forward 3y OOS (11 кварталов покрыто)

moo_to_1100

N сигналов1,563
Mean PnL+0.069%
Sharpe (raw)+0.84
Sign-flip p0.021
Block-bootstrap CI[-0.23, 1.95]
HHI (квартальный)0.119 ✓
Verdictborderline FAIL (Sh<1)

moo_to_close

N сигналов1,977
Mean PnL+0.115%
Sharpe (raw)+0.97
Sign-flip p0.0045
Block-bootstrap CI[-0.09, 2.00]
HHI (квартальный)0.131 ✓
Verdictborderline FAIL (Sh<1)

12m OOS показал Sh 2.12 (May 06), 3y OOS даёт Sh 0.97 — реальный edge меньше, но p=0.005 на 1977 сигналах — статистически значимый. HHI ≪ 0.4 → equity не сосредоточен в одном квартале. CI lower bound -0.09 — на грани нуля; нужно ужесточение фильтра.

Sensitivity sweep (k × fit_pool × seed = 36 конфигов × 2 окна = 72 строки)

moo_to_close mean Sh
+1.14
across 36 configs
moo_to_close p<0.05 fraction
33%
12 / 36 configs
stable (k, fit_pool) пары
15 / 24
Sh>0 across all 3 seeds
best robust config
k=7, fit=90
close: Sh_min=1.62 across seeds

Edge не seed-specific. Sweep подтверждает что регим-классификатор устойчив: средний Sharpe ≥1 в half of (k, fit_pool) cells, треть конфигов имеют p<0.05. Best robust config k=7, fit_pool=90 на close window даёт min Sh 1.62 across 3 seeds (max 2.66) — это реально устойчивое преимущество.

Per-fit_pool means: 90→Sh 0.89 / 120→1.05 / 180→1.49. Длинный fit_pool лучше.

Per-k means (close): 4→0.64 / 5→1.21 / 6→0.84 / 7→1.89. k=7 лучше k=5 для close window.

Семь именованных pattern'ов (что описывается в дашборде по тикерам)

PatternУсловияTrade directionОписание
MOO_GAP_UP_FADE gap >+1% AND first-25м <-0.3% (или to_1100 <-0.3%) SHORT открылся с гэпом ВВЕРХ и ушёл ВНИЗ — fade с MOO до 11:00
MOO_GAP_UP_CONTINUE gap >+1% AND first-25м >+0.3% LONG открылся с гэпом ВВЕРХ и продолжил расти — momentum
MOO_GAP_DOWN_BOUNCE gap <-1% AND first-25м >+0.3% (или to_1100 >+0.3%) LONG открылся с гэпом ВНИЗ и развернулся ВВЕРХ — oversold bounce
MOO_GAP_DOWN_CONTINUE gap <-1% AND first-25м <-0.3% SHORT гэп ВНИЗ + продолжение падения
POST_OPEN_RUN_UP |gap| ≤ 1% AND first-25м >+0.5% LONG ровный open, но в первые 25 мин пошёл ВВЕРХ — post-open momentum
POST_OPEN_RUN_DOWN |gap| ≤ 1% AND first-25м <-0.5% SHORT ровный open, в первые 25 мин ВНИЗ — early-day weakness
FLAT_DAY ни gap ни move не превышают порогов HOLD ровный день без выраженного движения

В классификаторе если intraday-1m данных нет на дату (covers ~500 days only), fallback на MOO→11:00 с 1.5x повышенным порогом.

Сравнение всех итераций

ПодходOOS daysN сигналов Sh (close)p HHIVerdict
Iter 1 — Analog matcher cosine top-K=102181,991 -0.330.76 0.31FAIL
Iter 2a — Regime classifier k=5 (12m)130401 +2.120.022 0.71*PASS Sh+p
Iter 2b — Regime classifier 3y (no futures)6701,977 +0.970.0045 0.131borderline
Sweep (k=7, fit_pool=90, best robust)~150~250 +2.19 (mean of 3 seeds)≤0.08 stable

* HHI 0.71 на 130-day OOS = только 2 квартала, gate структурно неприменим. 3y вариант (670 OOS days) даёт честный HHI 0.131 — well below 0.4 gate.

Что описано в дашборде (запрос пользователя)

Caveats и что НЕ сделано

Generated 2026-05-07 · 53/53 unit tests pass · 3y walk-forward · advisory only · raw PnL no slippage
Code: tools/dejavu_advisor/ (regimes.py + patterns.py + run_iter2_extended.py) · Data: iter2_extended_walkforward.parquet (1977 rows) · iter2_regime_avg_shapes.parquet (209 rows) · iter2_sensitivity.parquet (72 rows)