← Lab
S038

Market-neutral reversion + momentum, clean universe

frozen 2026-07-06 (frozen)
Share: Twitter / X LinkedIn
Backtest equity curve — S038
max drawdown -24% · 1.0x = start
1.0x5.0x200620082010201220142016201820202022202420262006-08
Equal-weight book; 1.0x = start. Trough marked.
-4.7%-2.0%+0.7%+3.5%+6.2% 330 Per-event excess return vs benchmark — S038 excess return per event (name − benchmark, over the hold window) · dashed line = zero
gate
Per-event excess return vs benchmark — S038

The design, in plain terms

Sleeve A's universe is now survivorship-free common stocks only — the top-500 by dollar volume after excluding ETFs (intersect with the survivorship-free common-stock list). Everything else is identical to S-037: ETF-factor residual (SPY + 9 sector SPDRs, rolling 60d), OU s-score (open |s|>1.25, close |s|<0.5, κ-filter <30d), κ-sizing × sector-reversion tilt, market-on-close execution, net@3bps; sleeve B unchanged (top-1000 SPY-only 9-1 residual momentum + risk-off switch, frozen threshold 0.045961); static 70/30, vol-scaled by the frozen in-sample vols.

*(Descriptive — added 2026-07-20; gate/confirmation unchanged. Editable master figure alongside the PNG:

S038 — how the strategy works Market-neutral: two independent engines, blended 70 / 30 · profits from stocks returning to normal, not from the market going up SLEEVE A · 70% Daily mean-reversion — the “rubber band” s-score s > +1.25 → SHORT it |s| < 0.5 → close / flat s < −1.25 → BUY it “fair value” = its ETF twin (SPY + 9 sector ETFs, 60-day fit) price stretched too HIGH snaps back down price stretched too LOW snaps back up Do this on ~188 stocks every day — longs ≈ shorts, each bet tiny: longs shorts Only pick “springy” names that snap back fast (< 30 days). Trade at the closing price. No single name can hurt the book. Wins most often when stocks are choppy and keep reverting. SLEEVE B · 30% Monthly momentum — the “trend rider” Rank the top-1000 stocks by their 9-month trend (skipping the last month). Check just once a month. strongest → BUY → ignore the middle ← SHORT weakest Risk-off switch (the built-in brake) Market scary? (SPY down > 10% over a year, or unusually wild) → step aside, hold nothing. Wins when strong stays strong — a trending market. THE BLEND — 70% Sleeve A + 30% Sleeve B 70% A 30% B one steadier equity curve Market-neutral: β ≈ 0 — it barely cares if the market rises or falls Dialled to about 10% up-and-down swings per year Two engines shine in different markets → steadier together Descriptive schematic of the frozen S038 design — not a performance chart. Numbers/thresholds are the frozen spec's.
S038 — how the strategy works: Sleeve A (70%) bets on stocks snapping back to their "ETF twin"; Sleeve B (30%) rides monthly momentum with a risk-off brake; the 70/30 blend is market-neutral (β≈0), scaled to ~10%/yr swings.

Picture each stock tied by a rubber band to its "fair value" — the mix of the market (SPY) and its sector that normally explains where it trades.

Sleeve A — the daily rubber band (70%). When a stock stretches too far from its twin, the band tends to pull it back, and we bet on that snap-back. The distance is an s-score: past ±1.25 we open (short the one stretched too high, buy the one stretched too low) and we close once it returns inside ±0.5. We run this across ~188 stocks a day, longs ≈ shorts, each bet tiny, so no single name can hurt the book — and only on names whose band is springy enough to revert within 30 days (the κ-filter). It wins most often when the market is choppy and stocks keep reverting.

Sleeve B — the monthly trend rider (30%). A slower, complementary engine: once a month it ranks the 1,000 most liquid stocks by their ~9-month trend (skipping the last month), buys the strongest and shorts the weakest, and otherwise sits still. Its brake is the risk-off switch — if the market turns hostile (SPY down >10% over a year, or unusually wild) it steps aside and holds nothing. It wins when strong stays strong — a trending market.

The blend (70/30). Because every bet is hedged and longs ≈ shorts, the whole book is market-neutral (β ≈ 0) — it barely cares whether the market rises or falls. And because reversion shines in choppy markets while momentum shines in trending ones, the two together are steadier than either alone, dialled to roughly 10% up-and-down swings a year.

On liquidity (why slippage stays bounded). Both universes are chosen for liquidity, not despite it: Sleeve A trades the top-500 by dollar volume and Sleeve B the top-1,000 by trailing dollar volume (3-month average, $5 price floor, refreshed monthly) — so even the 1,000th name is a mid-cap that turns over real volume, not a micro-cap. Sleeve B trades only the momentum extremes (top/bottom deciles, ≈100 names each) and rebalances just monthly, so its turnover — and its cost — is small. The genuinely cost-sensitive engine is Sleeve A (daily, needs marketable ~3 bps fills; passive limits adverse-select), and it was stress-tested directly: the combined book's holdout Sharpe holds from 1.47 at 3 bps to 1.11 at 10 bps + a 1-day fill lag. The one real-world residual is borrow/spread on Sleeve B's beaten-down short decile — bounded (still top-1,000 liquid names) but the place to watch first.

How it earned a forward slot

n net/yr maxDD Sharpe beta
in-sample ≤2022 196 +7.6% 21% 0.98
HOLDOUT 2023+ 40 +13.8% 7% 1.50 −0.03

Holdout sleeves: A (reversion) 1.26, B (momentum) 0.90 — both positive. Gate: Sharpe>0.5 ✓, |beta|≤0.15 ✓ (−0.03), drawdown (DD)≤1.5×IS ✓, both sleeves+ ✓ → PASS. Higher Sharpe than the contaminated S-037 (0.92 IS / 1.52 holdout) with a cleaner beta; the stray bond/gold ETFs had inadvertently damped drawdown, so the clean book has slightly higher in-sample DD. Deflate 1.50 → ~0.9-1.0 (40 months; large exploration arc).

Forward record so far

Forward paper-trading against the frozen gate is under way; the record here is machine-generated from the live track and updates on its own. It is interim — no result is claimed until the gate's window completes.

The live forward track has not yet accumulated a reportable window — the frozen promotion gate below states what it must show.

Conditions & caveats

The promotion gate

S1/S2 satisfied via D-009 (in-sample + sealed holdout). S3 forward-paper gate — FROZEN, identical to S-037: ≥12 months, combined net Sharpe ≥0.6, |beta|≤0.15, maxDD ≤20%, both sleeves net-positive, sleeve-A realised execution cost ≤4 bps/side. S4 live: gate cleared + sleeve-A automation + sizing.

This is a broad, small-per-name, signal-exit book — not a handful of concentrated bets. There is no fixed %-profit-take and no fixed %-stop: entries and exits are triggered by an s-score (how far a stock has strayed from its ETF-replication), and risk is bounded structurally (hedge + diversification + a mean-reversion-speed filter), not by a price bracket.

How trades are entered. Both sleeves execute market-on-close (the entry-day reversion is overnight, so an intraday fill would give away the edge — see the entry-timing study). No limit chasing, no discretion.

Sleeve A — the daily reversion engine (70%). Each stock is regressed on its ETF twin (SPY + 9 sector SPDRs, rolling 60d); the residual's OU s-score is the signal. - Open long when s < −1.25 — the stock is ≥1.25σ below where its ETF replication says it should be (oversold). - Open short when s > +1.25 — ≥1.25σ above (overbought). - Only names whose implied mean-reversion time is < 30 trading days (the κ-filter) are eligible — slow reverters are skipped, which is the first line of risk control. - "Profit-take" (exit) = the s-score reverting inside ±0.5 (the gap closes; the trade has done its job). - "Stop-loss" = there is no explicit price/time stop in the frozen config. A position that keeps diverging stays open, waiting for reversion — the loss is bounded instead by (a) the κ-filter, (b) the dollar-neutral SPY+sector hedge (per-name market β ≈ 0), (c) κ-sizing (smaller size for slower reverters) × the frozen sector-reversion tilt, and (d) a force-close if the name drops out of the universe / gaps. This is the classic statistical arbitrage trade-off (ride the divergence, no stop) — deliberately bounded by size + hedge + breadth, and it is why the book must be many small names, not few large ones.

Sleeve B — the monthly momentum overlay (30%). A long/short book across the top-1000 SPY-only 9-1 residual momentum ranks (lookback 9m, skip 1m), rebalanced monthly (~12 rebalances/yr). Its only "stop" is the risk-off switch: flat whenever SPY's 12-month drawdown < −10% or 6-month vol > 0.045961 (frozen).

Typical trade (sleeve A, illustrative). Long a liquid large-cap at the close because it sits ~1.4σ under its SPY+sector replication; size ≈ a few tenths of a % of gross, hedged so its market β ≈ 0; hold ~5 days; close when the residual narrows back inside ±0.5σ. Dozens of these run in parallel, longs ≈ shorts.

Sleeve A — trade & holding profile value
Active names / day ~188
Daily turnover 18.7%
Avg holding period ~5.3 trading days
New positions / day ~35
Round-trips / yr ~8,900
Execution market-on-close
Rule Sleeve A (reversion) Sleeve B (momentum)
Universe survivorship-free top-500 common stocks, px ≥ $5 top-1000 SPY-only residual momentum
Open s < −1.25 (long) / s > +1.25 (short), κ < 30d monthly rank: long top / short bottom
Exit ("profit-take") s reverts inside ±0.5 monthly rebalance (~12/yr)
Stop none explicit — hedge + κ-filter + κ-sizing bound it risk-off switch → flat
Sizing κ-sizing × sector-reversion tilt rank-weighted, vol-scaled
Cadence daily monthly

Return distribution (monthly, vol-scaled to 10%/yr — the numbers behind the histogram):

Book Window n Sharpe ann maxDD hit-rate best mo worst mo
combined 70/30 in-sample ≤2022 196 0.98 +7.6% 21% 59% +8.5% −4.8%
combined 70/30 holdout 2023+ 40 1.50 +13.8% 7% 68% +8.4% −4.3%
sleeve A (reversion) holdout 2023+ 40 1.26 +14.7% 12% 70% +9.5% −4.9%
sleeve B (momentum) holdout 2023+ 40 0.90 +10.6% 7% 48% +10.1% −5.2%

Sleeve A hits ~70% of months (many small mean-reversion wins); sleeve B hits ~48% (fewer, larger momentum months) — the two are complementary, which is why the 70/30 blend lifts the Sharpe above either sleeve alone.

Because this is the book slated for live automation, a quant-review directly measured the load-bearing live risk: does the edge survive real execution cost and entry lag? The combined 70/30 book's ~0.4%/yr flat net-borrow drag):

entry lag cost 3 bps cost 5 bps cost 10 bps
lag 0 1.47 1.39 1.20
lag 1 day 1.38 1.30 1.11

Robust to both cost (3→10 bps) and a 1-day fill lag — even the pessimistic corner holds at 1.11. The sleeve-A-alone full-sample fragility (net 0.48 @3bps, gross halving at lag 1) does not extrapolate to the combined book on this window: holdout sleeve-A is 1.22 and barely lag-sensitive, and the momentum sleeve lifts it further. So the make-or-break for live is less about execution fragility and more about regime-persistence — the grid is on a favorable 2023+ holdout; the forward is the real test of whether that regime holds. Borrow is mild (top-500 liquid / general-collateral names + owner lends the longs). Full write-up:

Individual trades — the mechanism in action

A sample of real round-trips drawn as s-score paths + price-vs-ETF-twin. It is also why S-055 loosens the κ exit filter: the “misses” mostly revert just after the old forced exit.

How to read these charts. Each trade is shown twice. Top — the s-score: how far the stock has strayed from its "ETF-twin" (its fair value built from SPY + 9 sector ETFs), in standard deviations. Red dashed lines at ±1.25 are the entry thresholds (short above, buy below); the green band at ±0.5 is the exit target (reverted = trade done); the dotted line at 0 is fair value. Filled dot = entry, open ring = exit. The grey box is the holding period — it is wider when the trade was held for more days. Bottom — price vs its ETF-twin: the solid line is the actual price, the dashed line the twin (both indexed to 100 at the start); the gap between them IS the dislocation the s-score measures — they converge when it reverts. Under each card: the P&L in basis points (green = win, red = loss) and why it closed. Liquid large-caps only.

Misses — ineligible (dislocation persisted / squeezed)

+1.25+0.5−0.5−1.25priceETF-twin
HWM · LONG · held 17d · P&L -72 bps · closed: ejected by the κ-filter — stopped reverting fast enough (the S-055 κ<60 change keeps it longer)
entry s -2.07 → exit s -1.22 · 2008-09-25 → 2008-10-20
+1.25+0.5−0.5−1.25priceETF-twin
UNH · LONG · held 13d · P&L -71 bps · closed: ejected by the κ-filter — stopped reverting fast enough (the S-055 κ<60 change keeps it longer)
entry s -1.90 → exit s -1.18 · 2008-06-19 → 2008-07-09
+1.25+0.5−0.5−1.25priceETF-twin
CAR · LONG · held 19d · P&L -62 bps · closed: ejected by the κ-filter — stopped reverting fast enough (the S-055 κ<60 change keeps it longer)
entry s -1.46 → exit s -0.68 · 2022-05-12 → 2022-06-09
+1.25+0.5−0.5−1.25priceETF-twin
AMD · SHORT · held 14d · P&L -62 bps · closed: ejected by the κ-filter — stopped reverting fast enough (the S-055 κ<60 change keeps it longer)
entry s +1.31 → exit s +1.10 · 2020-07-21 → 2020-08-10
+1.25+0.5−0.5−1.25priceETF-twin
AMD · LONG · held 18d · P&L -61 bps · closed: ejected by the κ-filter — stopped reverting fast enough (the S-055 κ<60 change keeps it longer)
entry s -2.03 → exit s -1.19 · 2007-11-20 → 2007-12-17
+1.25+0.5−0.5−1.25priceETF-twin
ISRG · LONG · held 13d · P&L -46 bps · closed: ejected by the κ-filter — stopped reverting fast enough (the S-055 κ<60 change keeps it longer)
entry s -1.42 → exit s -1.27 · 2006-02-01 → 2006-02-21
+1.25+0.5−0.5−1.25priceETF-twin
PFE · LONG · held 19d · P&L -45 bps · closed: ejected by the κ-filter — stopped reverting fast enough (the S-055 κ<60 change keeps it longer)
entry s -1.48 → exit s -1.51 · 2019-07-17 → 2019-08-13
+1.25+0.5−0.5−1.25priceETF-twin
PDD · SHORT · held 14d · P&L -45 bps · closed: ejected by the κ-filter — stopped reverting fast enough (the S-055 κ<60 change keeps it longer)
entry s +1.41 → exit s +nan · 2020-10-26 → 2020-11-13
+1.25+0.5−0.5−1.25priceETF-twin
CME · SHORT · held 12d · P&L -42 bps · closed: ejected by the κ-filter — stopped reverting fast enough (the S-055 κ<60 change keeps it longer)
entry s +1.73 → exit s +1.07 · 2008-09-16 → 2008-10-02
+1.25+0.5−0.5−1.25priceETF-twin
TSLA · SHORT · held 25d · P&L -39 bps · closed: ejected by the κ-filter — stopped reverting fast enough (the S-055 κ<60 change keeps it longer)
entry s +1.33 → exit s +1.27 · 2016-12-16 → 2017-01-25

Reverted but lost money (longer holds, friction/adverse path)

+1.25+0.5−0.5−1.25priceETF-twin
NFLX · LONG · held 24d · P&L -138 bps · closed: reverted to the ±0.5 target (profit-take)
entry s -1.28 → exit s -0.45 · 2011-09-13 → 2011-10-17
+1.25+0.5−0.5−1.25priceETF-twin
UAL · SHORT · held 36d · P&L -127 bps · closed: reverted to the ±0.5 target (profit-take)
entry s +1.38 → exit s +0.28 · 2008-07-08 → 2008-08-27
+1.25+0.5−0.5−1.25priceETF-twin
DAL · LONG · held 33d · P&L -110 bps · closed: reverted to the ±0.5 target (profit-take)
entry s -1.45 → exit s +0.08 · 2009-01-23 → 2009-03-12
+1.25+0.5−0.5−1.25priceETF-twin
ASML · SHORT · held 49d · P&L -104 bps · closed: reverted to the ±0.5 target (profit-take)
entry s +1.39 → exit s +0.49 · 2012-10-19 → 2013-01-03
+1.25+0.5−0.5−1.25priceETF-twin
SOFI · LONG · held 27d · P&L -103 bps · closed: reverted to the ±0.5 target (profit-take)
entry s -1.59 → exit s -0.21 · 2022-03-09 → 2022-04-18
+1.25+0.5−0.5−1.25priceETF-twin
CVNA · LONG · held 37d · P&L -103 bps · closed: reverted to the ±0.5 target (profit-take)
entry s -1.27 → exit s -0.19 · 2022-04-01 → 2022-05-25
+1.25+0.5−0.5−1.25priceETF-twin
BSX · LONG · held 54d · P&L -95 bps · closed: reverted to the ±0.5 target (profit-take)
entry s -1.27 → exit s +0.21 · 2009-09-09 → 2009-11-24
+1.25+0.5−0.5−1.25priceETF-twin
AMZN · SHORT · held 29d · P&L -88 bps · closed: reverted to the ±0.5 target (profit-take)
entry s +2.61 → exit s -0.11 · 2009-10-23 → 2009-12-04
+1.25+0.5−0.5−1.25priceETF-twin
WDC · SHORT · held 55d · P&L -86 bps · closed: reverted to the ±0.5 target (profit-take)
entry s +1.50 → exit s +0.47 · 2005-11-04 → 2006-01-26
+1.25+0.5−0.5−1.25priceETF-twin
AMD · SHORT · held 29d · P&L -77 bps · closed: reverted to the ±0.5 target (profit-take)
entry s +1.30 → exit s +0.44 · 2005-08-31 → 2005-10-12

Textbook reversion (entered ~1.5σ, closed inside ±0.5) — for contrast

+1.25+0.5−0.5−1.25priceETF-twin
CAR · SHORT · held 5d · P&L +103 bps · closed: reverted to the ±0.5 target (profit-take)
entry s +2.53 → exit s +0.49 · 2021-11-02 → 2021-11-09
+1.25+0.5−0.5−1.25priceETF-twin
DAL · SHORT · held 4d · P&L +63 bps · closed: reverted to the ±0.5 target (profit-take)
entry s +1.26 → exit s +0.10 · 2008-05-15 → 2008-05-21
+1.25+0.5−0.5−1.25priceETF-twin
PYPL · SHORT · held 2d · P&L +62 bps · closed: reverted to the ±0.5 target (profit-take)
entry s +1.56 → exit s -0.47 · 2022-01-31 → 2022-02-02
+1.25+0.5−0.5−1.25priceETF-twin
NFLX · LONG · held 4d · P&L +60 bps · closed: reverted to the ±0.5 target (profit-take)
entry s -1.31 → exit s +0.23 · 2013-01-17 → 2013-01-24
+1.25+0.5−0.5−1.25priceETF-twin
CCL · SHORT · held 2d · P&L +48 bps · closed: reverted to the ±0.5 target (profit-take)
entry s +1.61 → exit s -0.46 · 2020-03-26 → 2020-03-30
+1.25+0.5−0.5−1.25priceETF-twin
STX · SHORT · held 5d · P&L +47 bps · closed: reverted to the ±0.5 target (profit-take)
entry s +1.39 → exit s +0.23 · 2009-04-03 → 2009-04-13
+1.25+0.5−0.5−1.25priceETF-twin
BSX · SHORT · held 22d · P&L +46 bps · closed: reverted to the ±0.5 target (profit-take)
entry s +1.39 → exit s +0.11 · 2006-08-22 → 2006-09-22
+1.25+0.5−0.5−1.25priceETF-twin
PANW · LONG · held 17d · P&L +44 bps · closed: reverted to the ±0.5 target (profit-take)
entry s -3.26 → exit s -0.22 · 2020-02-26 → 2020-03-20
+1.25+0.5−0.5−1.25priceETF-twin
TSLA · LONG · held 4d · P&L +42 bps · closed: reverted to the ±0.5 target (profit-take)
entry s -1.40 → exit s +0.20 · 2014-02-19 → 2014-02-25
+1.25+0.5−0.5−1.25priceETF-twin
CVNA · LONG · held 10d · P&L +41 bps · closed: reverted to the ±0.5 target (profit-take)
entry s -1.40 → exit s +0.03 · 2022-12-13 → 2022-12-28

Running it on margin — does leverage give you L× the return?

A fair question for a market-neutral book: if you trade it on a margin account at 2×, 3× or 4× your own money, do you get that multiple of the return and the drawdown? The intuition is half right. The tables and chart below are computed on S-055’s own monthly backtest path (same series as the equity curve above), charging 6.5%/yr financing on the borrowed capital.

Leverage“L× return” (the naive guess)Actual annual returnWorst drawdownSharpeWorst month
+9%+8.9%-23%1.10-5%
+18%+10.5%-50%0.70-10%
+27%+11.4%-70%0.57-16%
+36%+11.6%-83%0.50-21%

Two things break the tidy “4× means 4×” picture:

margin-call zone (worst DD < −50%) →+0%-25%-50%-75%-100%+15%leverage (multiple of the 1× book)return peaks at 3.8× (11.6%), then falls● annual return (compounded, net of financing)● worst drawdown

Assumptions: leverage = multiple of the book’s P&L swings on your equity; 6.5%/yr financing on the borrowed turns (real all-in margin + short-borrow cost is often higher); margin-call zone drawn at a conservative −50% equity drawdown. This uses month-end data, which understates the risk — real margin calls fire intraday on maintenance margin, so liquidation would hit earlier and deeper than shown. Note the book already runs ~2× gross by construction (long + short); the leverage here is on top of that. Illustration on backtested data, not advice — S-055 is a forward-paper candidate, not a live product.

Methodology appendix — gates, exact parameters, look-ahead audit — is visible to subscribers. See the plans →

← OlderMarket-neutral mean-reversion + momentum (70/30) Newer →Market-neutral stock book with a bond + gold overlay

Mechaniq provides information, not investment advice. We do not execute trades. Past results are no guarantee for future performance. You are solely responsible for your trading decisions.

Lab · Methodology · Greeks Lab · About · FAQ · Glossary · Privacy · Terms · mechaniq.trade © 2026

21 Aug 2026, 09:06