Method
Entry. The MAIN strategy's mechanical signal — a 15m close crossing EMA20 — but only on
symbols simultaneously printing a volume spike (RVOL ≥ 100× and |σ| ≥ 4 on the 1h move).
Side comes from the cross, not the spike: that is the whole point.
Why it is not just FADE. FADE enters AGAINST the spike and FOLLOW WITH it — both read
direction from the spike itself. MAINVOL ignores the spike's direction and defers to our own
entry logic. Exit stack, sizing and costs are identical to FADE/FOLLOW
(4.0×ATR stop, 0.50R ratchet, 192h timeout, 10 bps + measured slippage + funding), so
any difference between the books is attributable to the entry rule and nothing else.
The ML exit — added 2026-08-10. The live model's exit head now runs here: the same
/root/models/exit_model.pkl, 147 features, fired at score ≥ 0.80, suppressed
at/above +1.0R on a close-based R, minimum 2 bars held. Validated before it
shipped against the live bot's own recorded scores: on 12 trades live exited via ML, median
|Δ| 0.038 and 10/12 same decision; on 14 trades live exited some other way,
14/14 scored below 0.80. It matches on positives and discriminates on negatives.
⚠ Why the exit ports but the entry cannot. 11 of the ENTRY model's 200 features are the
symbol's own trade history, which a freshly-spiking microcap has none of. The EXIT model has
zero such features — all 147 are trade state, BTC/ETH context and klines-derived
technicals. That asymmetry is the whole reason this book can be "live except the entry".
⚠ Cadence. Live scores every ~60s; this scores once per 15m scanner cycle, so an ML exit
can land up to one bar later. Every 15m bar is still evaluated exactly once.
⚠ Not ported: the tail guard. Live's ratchet_tail_guard fires only when the
ratchet lock failed to place on the exchange — it is an execution-failure net. This book
has no exchange and its lock never fails, so the condition is unreachable by construction
rather than omitted.
What it is NOT. Not the deployed strategy. No ML entry score, no conviction,
no HTF trend-align, no pick1/b2 rules — those need models keyed to a per-symbol trade history
that freshly-spiking microcaps do not have (11 of the entry model's 200 features are
sym_* history). It is the strategy's skeleton.
Stop geometry. 4.0×ATR, from NATIVE_STOP_ATR_MIN. ⚠ The engine's
STOP_MULT_LONG/SHORT (2.5/2.0) are stale constants — 305 of 334 live fills
sit at exactly 4.0×, matching the substrate on 99.4% of rows. This book was briefly built on
the stale pair and corrected before it took a single trade.
Expect fewer trades than FADE. FADE takes every gate-passing spike; this takes only the
subset where an EMA20 cross coincides. The skipped: no EMA20 cross counter on Overview
shows how selective that is.