6 параллельных агентов · 12 факторов · 2 RED поймано аудитом · 30 hypotheses backlog · Sharpe 1.34 → 5.5-6.5 (×4)
| # | Layer | N | WR | Sh | $/yr | MaxDD | ΔSh |
|---|---|---|---|---|---|---|---|
| 0 | Old PROD: EXIT 09:55, no filters | 8,787 | 59.3% | 3.67 | $6.7K | −$13.2K | — |
| 1 | + EXIT 11:00 BIGGEST | 8,779 | 66.7% | 5.75 | $13.7K | −$12.6K | +2.08 |
| 2 | + QQQ 1:1 hedge (was SPY) | 8,779 | 66.3% | 5.63 | $13.2K | −$9.1K | −0.11 / DD−28% |
| 3 | + Drop BREAK_DN LONG | 8,738 | 66.3% | 5.60 | $13.1K | −$9.1K | −0.03 |
| 4 | + pm_dollar_vol ≥ $1M | 6,186 | 66.7% | 5.62 | $13.8K | −$8.0K | +0.02 |
| 5 | + Sector filters (rank ≤ 4) | 4,647 | 70.1% | 6.54 | $16.6K | −$2.3K | +0.92 |
| 6 | + Skip macro (FOMC LONG, PPI SHORT) | 4,497 | 70.2% | 6.58 | $16.7K | −$2.0K | +0.04 |
| 7 | + SF [10,30] SHORT audit YELLOW | 3,513 | 73.4% | 7.27 | $19.6K | −$1.8K | +0.68 (LA inflated) |
| 8 | + Drop oversold LONG (rsi<30) | 3,489 | 73.4% | 7.28 | $19.6K | −$1.8K | +0.01 |
| 9 | FINAL UNIFIED | 3,489 | 73.4% | 7.28 | $23.8K | −$2.0K | — |
| 10 | Honest after audit fixes | ~2,500 | ~71% | 5.5–6.5 | $18–21K | −$2–3K | realistic |
Старая запись Apr 17 (1 live day, N=142) утверждала "9:55 sacred". Реальный 2y backtest на 6,216 trades: mean +0.48% vs +0.23%, Sharpe 2.28 vs 1.34, $/yr ×2.4.
Winners докатываются +0.41pp до 11:00, losers всё равно не разворачиваются (только 22% turn positive).
QQQ 1:1: +$1.4K/yr, Sh +0.24, MaxDD −19%. Surprise — кто реально выиграл от QQQ:
Top: CCL, AFRM, BTI, NKE, BCS, UAL, AA, DVN — это НЕ tech, а cyclicals/airlines/banks/energy. Spec-tech (HIMS, QBTS, CRWV) — наоборот, проиграли (β > 1, over-hedge).
Если стoк прошёл grade A+/A/B+ НО открылся ниже PM_low → НЕ покупай.
545 таких trades за 2y: WR 33%, mean −0.85%, Sharpe −6.13 (катастрофа).
Простое правило if open < pm_low → SKIP LONG убирает худшие 545 trades.
Гипотеза была "high SF → squeeze → SHORT хуже". Реально обратное:
| SF < 5% | Sh −0.08 (no catalyst) |
| SF 10-30% | Sh 3.00 sweet spot |
| SF > 30% | Sh 2.03 (squeeze начинается) |
⚠️ Snapshot lookahead — wait for historical SI data.
Skip-all-macro = ANTI-pattern! Sh 2.32 → 2.05 (хуже!). Per-event:
| FOMC LONG | Sh −0.31 ❌ skip |
| CPI LONG | Sh +4.65 ✅ |
| PPI LONG | Sh +5.53 ✅ |
| PPI SHORT | Sh −6.34 ❌ killer |
| NFP SHORT | Sh +6.84 ✅ |
| OPEX LONG | Sh +4.71 ✅ |
Правило: skip только FOMC LONG + PPI SHORT. Всё остальное — торгуем.
Стoк отстал от SPY за PM 30min ≥ 0.3% → catch-up на open.
N=1,062 (25% LONG), Sh 7.23, WR 70.6%, mean +1.80%.
Per year: 2024 Sh 8.61, 2025 7.18, 2026 6.03 — стабильно. Не momentum, а mean-reversion к peer group.
Учебник: "RSI > 70 = sell". Реально для 90-min hold:
| RSI < 30 LONG | Sh −3.40, WR 35% ❌ FORBID |
| RSI > 70 LONG | Sh 6.70, WR 68% |
RSI mean-rev работает на multi-day timeframe, не 90-min. Anti-trigger экономит ~$14K/год.
⚠️ RSI>70 boost decay 2024→2026 (-37%). Anti-trigger остаётся, boost снимаем.
Open > PM_high. Стабилен 4 года, но в 2026 lifetime high:
| 2023 | Sh 11.51 |
| 2024 | Sh 10.37 |
| 2025 | Sh 10.33 |
| 2026 ⭐ | Sh 14.85 |
Когда все decay'ят, BREAK_UP усиливается. Plus раскопка нашла PROXIMITY > MAGNITUDE (см. секцию ниже).
| Factor | Issue | Fix |
|---|---|---|
| H Short Float | Finviz snapshot Apr 16 → применяется к 2024 trades = look-ahead. RECURRING TRAP (3-й раз!) | Get historical SI (Polygon /v3/reference/short_interest) ИЛИ skip из PROD |
| E Earnings AMC | 48% events — surprise unknown в 09:30 (announced after-hours) | Restrict к BMO + ann_time < 09:25 only |
| Factor | Issue | Fix |
|---|---|---|
| IMB_SIZE_GATE | All-time median (lookahead 6% trades flip) + multi-year COLLAPSE 4.49→1.06 в Last_6m | Recompute с rolling 60d trailing OR skip entirely |
| D Sector mapping | Finviz snapshot, low risk (sector редко меняется) | Accept c caveat. Long-term: pull historical sector data |
| Factor | 2023 | 2024 | 2025 | 2026 | Last 6m | Verdict |
|---|---|---|---|---|---|---|
| BREAK_UP_LONG | 11.51 | 10.37 | 10.33 | 14.85 | 14.15 | STABLE++ 🏆 |
| Q sector laggard | n/a | 9.42 | 8.47 | 10.39 | 9.35 | STABLE+ |
| P twist top-25 | n/a | 8.17 | 7.44 | 9.43 | 8.46 | STABLE+ |
| E earnings BMO | 7.30 | 7.00 | 7.29 | 7.41 | 6.41 | STABLE |
| Baseline LONG | 8.50 | 9.72 | 8.33 | 10.85 | 9.53 | STABLE+ |
| S rsi<30 forbid | n/a | 4.02 | 9.22 | 6.12 | 8.55 | STABLE (anti) |
| S rsi>70 boost ⚠️ | n/a | 9.82 | 9.62 | 6.16 | 6.68 | DECAY −37% |
| D sector top-3 | n/a | 8.85 | 5.17 | 5.93 | 4.89 | DECAY |
| Baseline SHORT | 8.81 | 3.97 | 3.82 | 3.80 | 3.55 | DECAY |
| IMB_SIZE_GATE ⚠️⚠️ | n/a | 4.49 | 2.41 | 1.46 | 1.06 | COLLAPSE −77% |
| IMB PM_CLOSE | n/a | 3.52 | 1.39 | 0.51 | 0.23 | DEAD |
| Tier | Условия | WR | Sh | Size |
|---|---|---|---|---|
| S+ NEW | mag_intraday 0–0.5% above prev_high | 96.7% | ~13 | 1.5x |
| S | break ≥ 0.3% + gap < 3% + cap ≥ $5B | 95.7% | 19.27 | 1.5x |
| A | flat_gap [-1, +1] | 93.2% | 16.61 | 1.25x |
| B | all BREAK_UP base | 82.5% | 11.0 | 1.0x |
| AVOID | mag_intraday > 1.9% (exhaustion) | 63% | — | 0.25x or skip |
| is_earnings_day | WR падает 60% (skip) |
| Thursday | WR 66.7% (vs 85-88% в других днях!) |
| break_pct > 3% | WR 50% (mega-gap exhaustion) |
| vol_ratio_hod > 3x | WR 64% (pump-dump) |
| pm_hod_distance > 5% | WR 65% (PM rally exhausted) |
| Quartile | Range | WR | mean |
|---|---|---|---|
| Q1 "just barely" | 0.01–0.46% above | 96.7% | +1.98% |
| Q2 | 0.5–0.9% | 88% | — |
| Q3 | 0.9–1.9% | 78% | — |
| Q4 "exploded" | > 1.9% | 63.3% | weaker |
"Just barely broke" > "Exploded above". Big initial move = exhaustion, fade risk.
PM/AH/intraday/5d highs дают одинаковый edge. 20d_high хуже. BREAK_ALL_3 mega = same as BREAK_PM. Институциональная significance НЕ подтвердилась — proximity matters more.
Из 30 hypotheses backlog — выбраны 5 highest ROI / lowest effort.
Гипотеза: ratio auction_money_traded_open / median_auction_money_20d > 3x на open auction = strong directional flow → 11:00 continuation.
Расширение: прямое продолжение IMB_SIZE_GATE finding. Money-side, не shares.
Data: /calculations/median_auction_money_traded_20d + auction realtime (уже есть в auctions_12m.parquet).
Test: split trades by ratio quintile, expect WR boost в top quintile.
Effort: 1 день. Expected gain: Sh +0.5–1.0 если работает (replaces collapsed IMB_SIZE_GATE).
Гипотеза: NVDA/AAPL/TSLA/META/MSFT PM moves (08:55–09:25) дают signal для пиров.
Пример: NVDA +1% PM → SOXX peers (AMD/AVGO/MRVL) likely follow at open. Map ticker → leader → boost LONG если leader strong.
Data: cache_intraday_v3_2y/{NVDA,AAPL,TSLA,META,MSFT}.parquet (уже есть).
Effort: 2 дня (mapping + backtest). Expected gain: Sh +0.5–1.5.
Bonus: разнообразит signal от Q (laggard к SPY) — leader-specific момент.
Гипотеза: Все 12 факторов могут работать только в medium VIX regime. Раздельный test за regimes даст лучшую selectivity.
Regimes:
Test: применить весь stack per-regime, найти regime-specific winners.
Effort: 1 день (data есть, просто splitting). Expected gain: улучшит recent decay (2026 lower VIX-medium может быть проблемой).
Гипотеза: Текущее sizing — flat $1500/$1000/$500 для A+/A/B+. Optimal Kelly fraction разный для каждого tier по WR/payoff.
Расчёт: Kelly = (WR × win_size − loss_rate × loss_size) / win_size. Per-tier: A+ возможно sizing 2x, B+ — 0.7x.
Test: Kelly-sized backtest equity vs flat. Compare CAGR/MaxDD/Sortino.
Effort: 1 день (no new data, чисто sizing logic). Expected gain: Sh +0.3–0.5 + меньше DD.
Bonus: Half-Kelly conservative — already в memory mention'ed для M10R.
Гипотеза: Аналитик upgrade в last 24h → bullish bias на open. Downgrade → bearish.
Data: yf_grading_history.parquet (165K rows, 2011-2026, timestamped — уже есть в memory).
Test:
Effort: 0.5 дня (data ready, simple join). Expected gain: Sh +0.3–0.7.
| Day | Task | Output |
|---|---|---|
| 1 | H1 Auction money pressure | backtest results parquet + verdict |
| 2 | H21 Analyst upgrades 24h | quick result (low effort) |
| 3-4 | H6 Mega-cap leader divergence | mapping + per-leader backtest |
| 5 | H15 VIX regime split | per-regime WR/Sh table all 12 factors |
| 6 | H29 Adaptive Kelly sizing | equity curves comparison |
| 7 | Joint backtest все 5 stacked + audit | final unified scorer v2 |
User authorized switch hedge SPY → QQQ. Apply вручную в файле C:\datum-api-examples-main\broker\config\broker.yaml:
broker/strategies/moc_moo.py:465 жёстко проверяет if self.hedge_cfg.get("instrument") == "SPY" и хардкодит "SPY" в lines 470-482.
После изменения config на QQQ — это код перестанет генерировать hedge order автоматически. Требуется generalize: replace "SPY" → variable из config (1-2 строки edit). User-y решать когда патчить.
Если hedge order вводится manually в TradingApp GUI (а не через broker автоматически) — просто менять ticker SPY → QQQ при ручном вводе. Никакого file edit не надо.