Entry MOC 16:00 day D → exit MOO 09:30 next day. PM exits underperform (avoid).
Universe: mcap≥$2B, price≥$5, $vol≥$5M. Score: 6 factors (composite).
Train: 36 days (2026-03-31 → 2026-05-21)
| Side | Tier | N | WR% | avg % | Sharpe |
|---|---|---|---|---|---|
| LONG (green close) | A+ | 16 | 81.2 | +0.722 | +10.4 |
| LONG (green close) | A | 1260 | 61.2 | +0.654 | +3.44 |
| COUNTER (LONG on red) | A+ | 6 | 100.0 | +2.099 | +21.9 |
| COUNTER (LONG on red) | A | 843 | 73.5 | +0.833 | +7.06 |
OOS test (daily-only factors): 124 days 2025-10 → 2026-03
| Tier | Train Sharpe | OOS Sharpe | OOS WR | Verdict |
|---|---|---|---|---|
| LONG A | +3.44 | +0.81 | 47% | Edge weaker but survives |
| COUNTER A | +7.06 | -0.08 | 49% | Disappears without intraday features |
Key insights
- Best DOW for LONG: Tue (Sh 6.99) | worst: Fri (-0.39)
- Best DOW for COUNTER: Wed (Sh 11.2), Mon, Tue
- FOMC days: torgovat ONLY COUNTER (Sh +9.51); LONG fails on FOMC
- VIX: edge only при VIX mid/high (VIXY >35). Avoid VIX low.
- SHORT mirror: НЕ работает — red closes отскакивают overnight
- Best single factor: late-day volume ratio >1.5x avg (institutional accumulation)
research_moc3/AUDIT.md for look-ahead audit.
| ID | Name | Tier | Dir | Exit | Holdout Sh | Notes |
|---|---|---|---|---|---|---|
| Q003 | opening_cross_dev | ELITE | SHORT | TPSL | 4.50 | 09:30 only (open_px gap up ≥0.5%) |
| I012 | pt_ratio_low | ELITE | SHORT | TPSL | 4.21 | analyst tgt ≤95% prev_close |
| Q004 | opening_cross_dev | ELITE | LONG | TPSL | 3.95 | 09:30 only (open_px gap dn ≤-0.5%) |
| J015 | pm_high_break | ELITE | LONG | TPSL | 2.87 | pm_close ≥99% pm_high |
| K014 | prev_5d_ge015 | ELITE | SHORT | TPSL | 2.55 | prev_5d_ret ≥15% |
| K013 | prev_5d_ge010 | ELITE | SHORT | TPSL | 2.40 | prev_5d_ret ≥10% (=K004) |
| K012 | prev_5d_ge005 | STRONG | SHORT | TPSL | 2.10 | prev_5d_ret ≥5% |
| K015 | prev_5d_ge020 | STRONG | SHORT | TPSL | 1.85 | prev_5d_ret ≥20% |
| K016 | 3d_pump_exhaust | STRONG | SHORT | TPSL | 1.60 | prev_3d_ret ≥15% |
| G006 | tlt_5d_neg | STRONG | SHORT | HOLD | 1.50 | TLT 5d ret ≤-2% (macro, not per-tk) |
| Month | N (all) | WR % (all) | PnL $ (all) | N (S+M) | WR % (S+M) | PnL $ (S+M) |
|---|
| Ticker | Window | Decision | Tier | N | Mean % | CI 95% [lo … hi] | ETF overlay |
|---|
Today's pair states (07:00 ET PM ret vs prev close)
| Pair | Date | ETF A · ret | ETF B · ret | Divergence | Leader | Interpretation |
|---|
broker/data/agent_feed/*.md · runs nightly 22:00 ET via schtask · LLM never touches order path (Apr 29 directive)
Drift history (last entries)
| Date | Max level | dejavu | moo1100_v2 | earn_pead |
|---|
Recent commentary
Node status
PM open
+$637
+$127
+$716
+$467
+$563
+$90
+$296
MOO exit
| Gate | Threshold | Logic | Status |
|---|---|---|---|
| Price (entry close) | ≥ $5.00 | no penny stocks | ACTIVE |
| $-PM-volume (soft floor) | ≥ $1,000,000 | price × pm_vol_cumul at entry bar | ACTIVE |
| Market cap (if known) | ≥ $300M | finviz; leveraged ETFs / new listings pass-through | ACTIVE |
| ADV (avg daily volume) | ≥ 500K shares | finviz; if NaN — pass | ACTIVE |
| Earnings exclusion | ±1 calendar day | skip if next/prev earnings date within 1d | ACTIVE |
| MIN_GRADE | B+ (score ≥ 0.25) | scoring_pm_moo_v2 weighted-vote normalized | ACTIVE |
| ETF tier sizing | skip 0.5x calm | max(|SMH-QQQ|,|ARKK-QQQ|) gate | ACTIVE |
| MAX positions/day | ∞ (unlimited) | BP-bounded only, no slot cap | ACTIVE |
| Unknown-ticker policy | PASS | leveraged ETFs (SOXS/SOXL/TQQQ/...) — keep, $-vol gate их режет если illiquid | CONFIGURED |
| News blackout (FDA/M&A/lawsuit/...) | — TBD — | TTN integration pending; see roadmap below | DESIGN |
| Borrow availability (SELL leg) | — TBD — | need broker API (IBKR / Webull / ...) | DESIGN |
| Per-pos size | BP req (Reg-T 50%) | BP req (PM ~25%) | Daily exposure (avg) | Total P&L (34d) | Avg per day | Best day | MaxDD | Monthly (21d) |
|---|---|---|---|---|---|---|---|---|
| $200 | $16K | $8K | $14K | +$1,986 | +$58 | +$271 | -$49 | +$1,226 |
| $500 | $40K | $20K | $35K | +$4,965 | +$146 | +$677 | -$122 | +$3,065 |
| $1,000 (baseline) | $79K | $40K | $70K | +$9,931 | +$292 | +$1,354 | -$243 | +$6,135 |
| $2,000 | $159K | $79K | $140K | +$19,862 | +$584 | +$2,708 | -$486 | +$12,270 |
| $5,000 | $397K | $199K | $348K | +$49,655 | +$1,460 | +$6,770 | -$1,215 | +$30,675 |
| $10,000 | $793K | $397K | $697K | +$99,310 | +$2,921 | +$13,540 | -$2,430 | +$61,350 |
| $25,000 | $1.98M | $0.99M | $1.74M | +$248,275 | +$7,302 | +$33,850 | -$6,075 | +$153,350 |
Линейность: Sharpe 11.88 на любом размере. Limit — BP и market impact (см. audit liquidity).
Прицел при $1K/pos: ~$40-80K BP → Monthly ≈ $6.1K. При $5K/pos: ~$200-400K BP → $30.7K/мес.
Scale-up rule: вверх по успеху — добавлять по +50% pos_size каждые 30 trading-days в плюс с MaxDD < 50% allocated capital.
| Config | Days | Trades | PnL$ | Sharpe | MaxDD$ | WR-d |
|---|---|---|---|---|---|---|
| BASELINE (hold to MOO) | 34 | 2,371 | $+9,931 | 11.88 | -$243 | 79% |
| WITH cover V3+V4 | 34 | 2,371 | $+19,900 | 15.87 | -$50 | 91% |
| Δ (cover impact) | — | 0 | $+9,970 (+100%) | +3.99 | +$193 (5×) | +12pp |
cover_v3_buckets.json, cover_v4_beta_stats.json.
V3 — Bucket-based expected move
| Dimension | Tiers | Source |
|---|---|---|
| Market Cap | mega (>$100B) / large ($10-100B) / mid ($2-10B) / small ($300M-2B) / micro (<$300M, filtered out) | finviz Market Cap |
| Volatility (ATR14%) | low (<2%) / mid (2-5%) / high (5-10%) / extreme (>10%) | finviz Volatility, или compute из daily bars |
| PM-gap size at entry | small (0.3-2%) / medium (2-5%) / large (5-10%) / extreme (>10%) | stock_ret_cumul at entry bar |
| Grade | A+ vs A vs B+ | scoring_pm_moo_v2 |
Cover triggers:
• paper P&L ≥ p75 of bucket → soft cover (manual confirm)
• paper P&L ≥ p90 of bucket → AUTO-cover (signal exhausted)
Time-decay overlay (V5): threshold ×= (1 - 0.5 × hold_pct), где hold_pct = (now - entry) / (9:30 - entry). На 8:00 после 5:00 entry (60% held) → cover-threshold = 70% × p75.
V4 — β-excess normalization (signal extinction) — для β-сигналов
beta_excess_2sig (β-excess |σ|>2). Логика:• На entry:
beta_excess_sigma_entry = +3.2σ (например)• На каждом окне после entry: recompute
beta_excess_sigma• Когда
|beta_excess_sigma_now| < 0.5σ → signal extinguished → AUTO-coverWhy: Strategy зашла в short overshoot. Когда overshoot нормализовался (β-сигма в нуле) — мы получили что хотели, держать дальше = unconditional drift к MOO. Закрываемся.
Combined cover decision
bucket = classify(position)
p75_threshold = bucket_stats[bucket]['p75'] * (1 - 0.5 * hold_pct)
p90_threshold = bucket_stats[bucket]['p90'] * (1 - 0.5 * hold_pct)
if position.paper_pnl_pct >= p90_threshold:
COVER_AUTO # hard target hit
elif position.paper_pnl_pct >= p75_threshold:
COVER_SOFT # show as candidate, 1-click confirm
# V4 overlay для β-signals
if position.signal_type == 'beta_excess_2sig':
if abs(position.current_beta_excess_sigma) < 0.5:
COVER_AUTO # signal extinguished
Estimated lift: +0.3-0.8 Sharpe + улучшение DD (фиксация прибыли до post-open volatility spike).
| News type | Why skip | Skip window | Severity |
|---|---|---|---|
| FDA approval / denial / CRL | Discrete event, ±20-50% moves, no mean-reversion | day-of + next 2 days | CRITICAL |
| M&A target (deal announce) | Pinned to deal price, no fade possible; for SELL = guaranteed loss | until deal closes/breaks | CRITICAL |
| M&A acquirer (rumor or announce) | -5-15% gap not fade, real signal | ±1 day | CRITICAL |
| Bankruptcy filing | -50-90% gap; can't borrow for SELL | indefinite | CRITICAL |
| Going concern / delisting | Same as bankruptcy class | indefinite | CRITICAL |
| Drug trial results (Phase 1/2/3) | Biotech, ±30-80% moves, all-or-nothing | day-of + next 1 day | HIGH |
| Guidance pre-announce | ±5-15% gap, real info | ±1 day | HIGH |
| SEC investigation / lawsuit (major) | Trust shock, -5-20% gap, not noise | day-of + next 2 days | HIGH |
| Stock offering / dilution announce | -5-10% gap, sustained | ±1 day | HIGH |
| Cyber-breach / data leak (announced) | -5-15% gap, sustained 1-3 days | ±1 day | HIGH |
| CEO/CFO resignation/firing | -5-15% gap, real signal | ±1 day | HIGH |
| Recall (product/safety) | -3-15% gap, sector dependent | ±1 day | HIGH |
| Analyst major rating change (Sell→Buy or vv) | Per memory: analyst upgrade + gap>10% = WR 12.5% trap | ±1 day if gap>5% | MEDIUM |
| Insider buying large ($1M+) | Bullish signal, fade SHORT not great | ±1 day for SELL only | MEDIUM |
| Activist investor 13D filing | +5-20% gap, real signal | ±2 days | MEDIUM |
| Earnings (already handled by calendar) | Discrete event, IV-collapse PM | ±1 day ✓ ACTIVE | DONE |
| Reverse split | Mostly handled by price filter ($5+ excludes) | implicit | PARTIAL |
Implementation plan:
1. Pull TTN news feed for previous 24h before each PM session start
2. Classify each news item by type (rules + LLM tag where rules ambiguous)
3. Build per-ticker blacklist for the day: any CRITICAL type in last 24h → skip 7 days; any HIGH type → skip 1 day; MEDIUM → SELL-only filter
4. Backtest separately: how many picks would be killed? Estimated 10-20% based on TTN volume during PM-MOO universe
5. Live integration: pre-session pass → blacklist → into accumulator filters
✅ Early-cover — закрыть в плюс не дожидаясь MOO
Правила (предлагаются):
- Hard target: paper P&L ≥ +2.5% для SELL fade → cover
- Time decay: ≥ +1.5% и до MOO осталось < 30 min → cover (less time, less downside)
- Reversal signal: position SELL и текущий score уже SKIP / direction flipped → cover
Cover mechanics:
- Закрываем stock на bid (если SELL → buy to cover) или ask (если BUY → sell to close)
- Соответствующий QQQ hedge тоже снимаем
- Slippage ~1c per share (vs zero на MOO auction)
Expected lift: ~+0.3-0.5 к Sharpe если правильные пороги — большие гэйнеры фиксируются до возможного pullback на open auction (volatility пиковая в первые 5min торгов). Нужен backtest.
🔄 Flip — развернуться в обратную сторону
Правила (предлагаются):
- Перескор позиции на каждом окне (5:00→6:00→6:45→...)
- Если
new_direction != current_directionANDnew_score ≥ 0.50→ FLIP - OR: paper P&L < -1% AND opposite direction signal A+ → FLIP (stop+reverse)
Mechanics:
- Close existing position (cover SELL / sell BUY) at current bar close
- Open opposite position SAME notional
- Both legs of QQQ hedge нужно перевернуть тоже
Expected behavior: в данных у нас 487 SELL / 11 BUY — flip-кандидаты редки. Возможно < 20 flips за 34 дня. Edge от каждого может быть значительный если убирать кат tail-losers (типа CMPX -67%).
1. Бэктест early-cover на 5-min intraday bars (есть в features_pm_v2) — порог +2.5% / +3% / +4%
2. Бэктест flip — re-score каждой позиции на каждом окне
3. Combined: early-cover + flip + unlimited
4. UI: добавить в live-box ещё одну колонку «COVER NOW» и «FLIP» для активных позиций
| Scenario | Logic | 34d cum P&L | Final pos$ | Bumps |
|---|---|---|---|---|
| Fixed $1K (baseline) | no scaling, linear | $+9,931 | $1,000 | — |
| Conservative ramp (1.5×) | ×1.5 каждый раз когда cum ≥ $3K, $7.5K, $14K, $22K, $32K, $45K | $+16,501 (+66%) | $3,375 | 3 |
| Aggressive ramp (2×) | ×2 каждый раз когда cum ≥ $5K, $15K, $30K, $60K, $100K | $+14,542 | $2,000 | 1 |
| Weekly streak ramp (1.25×) | ×1.25 после каждой серии 5 winning days | $+16,121 | $2,441 | 4 |
| Continuous compound | pos = $1K × (1 + cum/$10K)^0.6 — smooth | $+12,752 | $1,638 | smooth |
Без replace-low (greedy): что не так
В 5:00 утра трейдер набирает 15 позиций. Среди них — пара marginal picks со score 0.30-0.45 (formally A grade, на пороге). Они проходят фильтр потому что нужно набрать 15 слотов.
Дальше до 9:30: появляются сильнее сигналы на 6:45 / 7:30 / 8:00 — обычно с накопившимся volume, чистым momentum, выраженной β-excess. Score 0.85-1.00 (A+).
Greedy этих новых не возьмёт — «книга полная, мимо». И marginal picks дают катастрофические убытки (см. CMPX -67% / -$673 в 04-27 бэктесте).
С replace-low: как работает
На каждом окне сравниваем новых кандидатов с слабейшим в текущей книге. Если score новый > score слабейший → SWAP.
Слабый pick из 5:00 (CMPX score 0.44) вытесняется сильным A+ из 7:30 (MXL score 0.85). В книге остаётся только высококачественные позиции.
Когда swap происходит
| Условие | Action | Пример |
|---|---|---|
| Δ score ≥ 0.35 | AUTO-swap | drop SNXX(0.37)→add CCC(1.00), Δ=+0.63 |
| score_new ≥ 0.85 AND score_old ≤ 0.50 | AUTO-swap | A+ заменяет marginal A |
| 0.15 ≤ Δ score < 0.35 | Manual (1-click) | RGTI(0.75) ↔ MSTZ(0.48), Δ=+0.27 |
| Δ score < 0.15 | Не показывать (шум) | |
| Книга < 15 позиций | Просто добавить, без swap | free slot, no contest |
Эффект на бэктесте
| Metric | Greedy | Replace-low | Δ |
|---|---|---|---|
| Total P&L | $+2,545 | $+2,896 | +$351 (+13.8%) |
| Sharpe | 8.21 | 9.41 | +1.20 |
| CI lower (2.5%) | +3.57 | +5.97 | +2.40 |
| MaxDD | -$223 | -$167 | $56 меньше |
| WR days | 71% | 79% | +8pp |
| A+ picks | 204 | 361 | +157 (×1.8) |
| Window | Bar | is_8am | Trades | P&L $ | Avg ret % | WR % | Note |
|---|---|---|---|---|---|---|---|
| 5:00 | 04:55 | — | 62 | +637 | +0.92% | 61% | Best edge/trade, но slots сдают позднее |
| 6:00 | 05:55 | — | 46 | +127 | +0.34% | 59% | Слабее 6:45 |
| 6:45 | 06:40 | — | 60 | +716 | +1.07% | 63% | Workhorse — highest edge |
| 7:30 | 07:25 | — | 83 | +467 | +0.45% | 55% | Reliable mid-session |
| 8:00 | 07:55 | ✓ | 60 | +563 | +0.76% | 57% | Mom-aligned signals fire here |
| 8:45 | 08:40 | ✓ | 70 | +90 | +0.09% | 56% | Was -$2 в greedy → +$90 после upgrade |
| 9:10 | 09:05 | — | 117 | +296 | +0.24% | 62% | Самый большой shift — 33→117 picks |