| Параметр | Значение |
|---|---|
| Entry | 09:10:00 ET |
| Exit | MOO 09:30 (opening cross, no slippage modelled) |
| Hold | ~20 минут |
| per_position_usd | $1,000 |
| max_positions | 10 |
| min_grade | B (rank≥2) |
| min_pm_vol | 50,000 |
| Universe | universe_pm_moo_910_validated.csv (frozen May 15) |
| Earnings filter | ±1td hard-skip (D0 + D+1) |
| Sizing | per_position_usd × GRADE_SIZE × etf_mult |
| ETF mult | 0.5x / 1.0x / 1.5x (thresholds 0.3% / 0.7% spread) |
| Tier | Spread | Size | N days | Sh | WR | Sum PnL |
|---|---|---|---|---|---|---|
| 0.5x calm | max(|SMH-QQQ|,|ARKK-QQQ|) < 0.3% | $500/pos | 34 | -5.83 | 32% | -$465 |
| 1.0x normal | 0.3% ≤ spread < 0.7% | $1,000/pos | 52 | 4.15 | 60% | +$1,499 |
| 1.5x dispersion | spread ≥ 0.7% | $1,500/pos | 34 | 3.61 | 59% | +$1,781 |
BidLstClsΔ% для SMH/QQQ/ARKK через TrapBus прямо в 09:10.
09:10 покрывает 09:10:00-09:14:59 →
использование его close для решения в 09:10:00 = утечка 5 мин будущего.
Fix: backtest теперь использует бар 09:05 (close@09:09:59).
broker/pm_bars накапливает реальные 1-мин бары и считает
фичи в момент триггера 09:10:00 — использует только бары ≤ 09:09:59. Баг был backtest-only.
| Quartile | Период | N | PnL_h | Sh | WR |
|---|---|---|---|---|---|
| Q1 | 2025-11-17 → 2025-12-30 | 30 | -$595 | -2.61 | 40% |
| Q2 | 2025-12-31 → 2026-02-12 | 30 | +$1,055 | 3.53 | 67% |
| Q3 | 2026-02-13 → 2026-03-27 | 30 | +$1,438 | 4.75 | 47% |
| Q4 | 2026-03-27 → 2026-05-11 | 30 | ~+$914 | ~4.06 | — |
| File | Назначение |
|---|---|
backtest_910_v22.py | Baseline backtest с lookahead fix |
backtest_910_v22_post_mar31.py | 29-day sub-window |
scoring_pm_moo_v2.py::etf_size_mult | 3-tier функция (thresholds 0.3/0.7%) |
broker/strategies/pm_moo.py | LIVE — ETF spread + sizing (May 18 edit) |
broker/config/broker.yaml | pm_moo_910 metadata updated |
memory/research_910_v22_may16.md | Memory entry |