Sweeping the (fast-in, slow-out) moving-average band of the QQQ regime gate over the top-N money-flow basket — N=1..100 × 114 valid (fast,slow) pairs. Gross of trading costs (0 bp). Window 2020-10-01 → 2026-06-04 (5.7 yr).
(fast, slow) with fast < slow, evaluated at each ranking-day t on QQQ adjusted close:QQQ[t] ≥ MA(fast)[t] → RISK-ON (hold equal-weight top-N basket)QQQ[t] < MA(slow)[t] → RISK-OFF (100% cash, 0% return)MA(slow) ≤ QQQ < MA(fast)) → HOLD previous state (the band)invested boolean carries across days; start flat. Only ≥MA(fast) sets True, only <MA(slow) sets False, the band leaves it unchanged. The existing report's gate is exactly this with (fast,slow)=(22,55); the operator's example is (5,10). MAs are on QQQ adjusted close, seeded from 2020-06 so even MA200 is valid from the first ranking-day.Each cell = annualized Sharpe of the gated top-N strategy at fixed N for that (fast, slow) pair. Greener = higher Sharpe. Rows = fast (entry) MA; columns = slow (exit) MA; the upper triangle (fast ≥ slow) is invalid (gray). □ (22,55) = existing baseline; □ (5,10) = operator example. Hover a cell for full stats.
Structure is legible: Sharpe climbs left-to-right toward slow-MA 40–65 then fades past 100, and climbs top-to-bottom toward fast-MA 20–30. The bright corner is the (fast 20–30, slow 40–65) block. Tiny-slow columns (5/8/10) and tiny-fast rows (2/3) are dim — too twitchy. At N=6 the picture shifts: only a deep slow-MA (=200) tames the concentrated basket's drawdown enough to top the Sharpe ranking, while (22,55) still wins raw return.
Across the full N × (fast,slow) grid. Baselines pinned at the bottom for reference.
The honest test of a tuned parameter is whether its neighbors are nearly as good. If the best cell towers over an otherwise-flat grid, it is overfit. Here is the neighborhood of the winner at N=44:
The winner (30,40) beats its immediate neighbors by only ~0.05–0.09 Sharpe — (22,40)=1.23, (30,55)=1.19, (30,65)=1.20, (22,65)=1.18 all sit just below it. That is a plateau, not a tower: the region (fast 20–30, slow 40–65) is robust, but picking 40 over 55 for the slow leg is within-sample noise. Separately, (30,40) is stable across N — Sharpe ≥ 1.20 for 54 of 100 basket sizes (N=29–100), so the band choice is not married to one lucky N. Contrast the fragile picks: the very-fast (5,10)/(8,10) cells and the N=6 slow-200 cells are isolated spikes whose neighbors fall off sharply — do not trust them.
The (5,10) example reacts fast but flips ~4× as often as (22,55) (136 vs 34 round-trips at N=44) and lands below the ungated Sharpe — classic whipsaw. The slow (22,55) and the tuned (30,40)/(30,55) bands trade far less and capture the regime benefit cleanly.
money_flow_snapshots, ranking_type top100. QU100 membership carries survivorship bias (we only see names QU included).
Reproduction: with the gate disabled this harness reproduces ungated N=3 (+171.5%) / N=5 (+208.6%); with (fast,slow)=(22,55) it reproduces the prior regime report's N=44 (ret +259.9% / MaxDD −34.2% / Sharpe 1.14 / 73.5% time-in-market) — the per-N masking shortcut was validated against the full-harness result before the grid was trusted.
Not investment advice — a research backtest with known survivorship bias on a single overfit-prone sample.