Precision25— how it works
A long-only capitulation-bounce strategy. Buys beaten-down names the model predicts won't crash further the day after entry, holds 90 days while scaling out in 6 pieces. Built out of an ~85-step research arc; deployed 2026-05-14 as a $100k paper-traded book, upgraded 2026-05-15 to the 90-day 6-stage exit schedule.
The thesis
Stocks in the bottom 40% of their 52-week range are statistically prone to mean-revert upward — especially when forced selling has run its course. The model's job is to distinguish the genuine capitulation bottoms from the falling knives that keep falling.
The label (the secret sauce)
Trained with a path-aware asymmetric label:
- Label = 1 if the stock hit
+30%within 30 days AND did NOT drop-15%on day 1 after entry - Label = 0 if it dropped -15% on day 1, OR never reached +30%
After day 1, the stock can wander all the way down -50% before bouncing — that's still a winner. The model learns the only thing it can reliably predict: whether a stock will whipsaw down in the immediate hours after entry.
Why these numbers? Step 62 swept (target, stop) tuples and asym horizon lengths on a clean universe (no leveraged ETFs); PA(+30%, -15%) with stop horizon=1d had the highest in-sample Sharpe (5.97) and lowest drawdown (-9.8%).
The model
5-seed XGBoost ensemble (depth 4, 400 trees, decay-weighted training) trained on 78 features: technical (RSI, MACD, ATR, Bollinger, SMAs), positional (52-week range, distance-to-high), volume, options flow (deep-OTM calls, P/C ratio), macro (VIX, sector breadth, credit stress). Calibrated with isotonic regression on a 60-day holdout.
Entry rules
- Universe: 532-name stock universe (small/mid-cap focus)
- Filter:
pos_52w_range ≤ 0.40(bottom 40% of 52-week range) - Top-2 picks per day by calibrated probability
- Flat position sizing — a step-83 audit found regime-based size multipliers add noise without improving risk-adjusted return
- Per-ticker reentry cap: 7-day cooldown
- Position size: risk-parity weighted across books — precision25 is the highest-volatility book, so it carries the smallest weight (~5% of the aggregate, ~$13 per pick)
Exit rules — the 6-stage scale-out
No stops, no trailing. Each position is sold in 6 equal slices at fixed days from entry:
- Day 15 → sell 1/6
- Day 30 → sell 1/6
- Day 45 → sell 1/6
- Day 60 → sell 1/6
- Day 75 → sell 1/6
- Day 90 → sell remaining 1/6
Why partial exits? Spreading P&L recognition across multiple calendar dates dramatically reduces daily portfolio variance. A step-76 sweep of 9 hold/partial schedules found the 90-day 6-stage exit beat the original 60-day 4-stage on every walk-forward fold — in-sample Sharpe rose from 6.2 to 8.6, and the equity curve had fewer, shallower drawdowns. Same model, same picks, smoother curve.
Backtest results (7 walk-forward folds incl. 2023 OOS, leveraged ETFs excluded)
| Metric | In-sample (5 folds) | Combined OOS+IS (7 folds) |
|---|---|---|
| Sharpe | 8.1 | 6.70 |
| CAGR | +48.4% | +39.1% |
| Max Drawdown (per-fold) | -6.3% | -7.3% |
| Worst peak-to-trough (full curve) | ~-7% | ~-17% |
| Win rate (slice-level) | ~50% | 47% |
| Trades / year | ~510 | ~510 |
The IS-vs-OOS gap is driven by Q4 2023 (a Magnificent-7-style narrow leadership rally where beaten-down stocks kept getting beaten while leaders ran away — that single fold ran roughly -10% CAGR / negative Sharpe). 6 of 7 quarters worked, 1 didn't. The ~-17% worst peak-to-trough is concentrated almost entirely in that one Oct-2023 → May-2024 window; in the 2024-2026 stretch the strategy had a single shallow -6% dip. Realistic deployment expectation: Sharpe ~6, CAGR 35-50%, calm -3% to -7% drawdowns in normal regimes, with rare -15%+ episodes if a narrow-leadership rally recurs.
Schedule-only upgrade (2026-05-15): the exit schedule changed from 60-day 4-stage to 90-day 6-stage; the model and label are unchanged. Research steps 76-89 also tested a tighter PA(+25%/-12%) label which lifts Sharpe further but with a deeper tail drawdown — that label change is deferred pending live validation of this schedule.
Pre-deployment audit: initial backtest universe contained 33 leveraged/inverse/VIX ETFs (MSTU, AMDL, SOXL, TQQQ, UVXY, VXX, etc.) which were inflating the apparent edge by riding leverage in bull regimes and adding catastrophic-decay risk on extended holds. All such ETFs are excluded from the production universe and the backtest above.
Why this is different from Vol Runup
Vol Runup hunts asymmetric runups across 4 horizons (30/45/60/90d) with a winner-classifier re-rank, exits via 10% trailing stop or 90d max. Precision25 is more concentrated — single 30d horizon, single label, no second model, only 2 picks/day. They overlap on universe (both filter pos_52w_range ≤ 0.40) but diverge on entry timing and exit mechanics. Run together they should be partially correlated.
The honest risks
- A narrow-leadership rally can produce a -15%+ drawdown lasting several months (the Oct-2023 → May-2024 window did exactly this)
- Roughly a quarter of individual trades end deeply negative — this is normal for the strategy. A similar fraction of large winners (+50%+) carry the book
- No stops by design. You will watch positions go -30% intra-trade. Steps 78 re-tested every smart exit imaginable on the current label; pure HOLD with partial scale-out beat trailing stops, profit-locks and early targets every time.
- The median trade is only modestly positive — the edge lives in the right tail. Long stretches can feel flat before a cluster of winners matures.
Deployment process
Every weekday: 22:00 UTC (18:00 ET) the evening preview scan runs against currently-available features (typically through T-1 close), publishes top-2 picks to the Evening Preview panel. 10:00 UTC (06:00 ET) the final morning scan runs after Polygon's overnight options data has posted, replaces the preview with confirmed pending positions. 14:00 UTC (10:00 ET), after market opens,process_open_fills.py backfills entry prices at today's open and flips positions from pending to open. Saturday 14:30 UTC the model retrains on the latest week's data.