Skip to content
All strategies

Strategies

SPY Close-Pressure Overshoot Fade: After a >=2-Sigma Session Move That FINISHES at the Extreme of the Day's Range, Take the Opposite Side for Exactly One Session (SPY.USEQ 1-DAY, long-short, 1x, flat ~95%, 2 structural parameters, pre-studied 1993-2026)

Outcome: Abandoned

SpyClosePressureOvershootFade

Outcome Summary

SpyClosePressureOvershootFade tested a one-session fade of 2-sigma SPY moves that closed at the extreme of the day's range, backed by a strong pre-study (+0.26% per trade, t=3.6, replicated on QQQ, DIA and IWM). The base backtest reproduced the per-trade edge (388 trades, 0.286% avg, PF 1.69), but the modern-era result depended heavily on March 2020, and the daily-return series showed a suspected mark-to-market artifact. Optimization chose z_entry 1.0 and more than 1x sizing, which produced a 57% drawdown and a holdout Sharpe of 0.42 against 1.49 walk-forward OOS. The analyst abandoned it at iteration 5 as overfit, recommending a single re-test only after the artifact is fixed, using next-open fills, fixed 1x size, and only z_entry and close_extreme_frac free.

Hypothesis

Single instrument, single leg, SPY.USEQ, 1-DAY bars, pure OHLCV, history 1993-01-29 to now (~33 years). Mechanism in one sentence, with instrument and timeframe removed: when an index's session return is an outlier (|z| >= 2 against its own trailing 60-session return sigma) AND the session closed in the extreme 20% of its high-low range in the direction of the move (so the move was still being pushed INTO the close), take the opposite side for exactly one session. Economic agent who pays: mechanical end-of-day……Show moreShow less

Single instrument, single leg, SPY.USEQ, 1-DAY bars, pure OHLCV, history 1993-01-29 to now (~33 years). Mechanism in one sentence, with instrument and timeframe removed: when an index's session return is an outlier (|z| >= 2 against its own trailing 60-session return sigma) AND the session closed in the extreme 20% of its high-low range in the direction of the move (so the move was still being pushed INTO the close), take the opposite side for exactly one session. Economic agent who pays: mechanical end-of-day demand. Examples are leveraged and inverse ETF daily rebalancing (hedge flow is proportional to the day's return times LETF AUM and is executed into the close, in the direction of the move), market-on-close imbalance orders, and vol-target or CTA de-risking. This flow is price-insensitive and pushes the close past fair value. Overnight and next-session liquidity providers are paid to absorb it and to reverse the overshoot. The close-location filter is what separates this from generic 'fade big days' mean reversion. It keeps only the days where the pressure was demonstrably still active at the close. PRE-STUDY (point-in-time: z uses the sigma of the prior 60 sessions, shifted by one; close-location uses the same bar's H/L/C, all known at the close). SPY, 1993-2026: 439 qualifying sessions (~13 per year). The close-to-next-close fade averaged +0.26% per trade (t=3.6), and every era was positive: 1993-2008 +0.24%, 2009-2017 +0.18%, 2018-2026 +0.39%. The COMPLEMENT (|z|>=2 but the close was NOT at the extreme, n=83) averaged -0.12%, so the filter carries the effect rather than cutting noise. Out-of-instrument replication with identical rules and no refit: QQQ +0.36% (n=368, t=3.2), DIA +0.26% (n=362, t=2.8), IWM +0.25% (n=293, t=2.1). The non-extreme complement is negative or zero on all four. Clock choice follows L166: the forward return peaks at 1 session. A 2-session close-to-close hold adds nothing on SPY and turns negative in 2009-2017 on QQQ, DIA and IWM, so the clock is exactly 1 session. Calendar Sharpe of the SPY 1x book was 0.63 (max DD 12.1%, in market ~5% of sessions). That is BELOW the 1.0 pre-study bar L166 advises. I am proposing it anyway because the t-stat, the 4-ETF replication and the three-era stability are stronger than anything else I pre-studied this session. Rejected for this slot: OPEX-week drift (t=0.56, no edge); a pooled OI-deleveraging-flush panel (calendar Sharpe 0.82, but a duplicate of the abandoned DOGE forced-deleveraging 24h-clock run); Polymarket up/down (per-market bars not collectable, per two data_unavailable deaths). FILL-TIMING ROBUSTNESS (see the IWM pre-holiday artifact): if the engine can only fill at the NEXT session's open, the next-open-to-next-close fade still averages +0.17% on SPY (t=2.9), +0.28% on QQQ, +0.14% on DIA and +0.19% on IWM. That is still 3x or more the ~0.05% USEQ round trip. The edge does not depend on getting the signal-day close fill. Distinct from abandoned neighbours: the XLF 2-day z-score fade (no close-location conditioning, multi-day z), Connors RSI(2) (long-only pullback within an SMA200 uptrend, multi-day exit), and the 12-name USEQ 'intraday liquidity shock' basket (hand-picked 12-name list, dollar-neutral book). This is one ETF, one leg, symmetric long and short, with a one-session clock. Why SPY is the right instrument and not a proxy: SPY is the instrument the LETF/MOC hedge flow is actually executed against, and it is the most liquid, so the per-trade gross move is not eaten by spread. corpus_concentration was empty in the brief. USEQ holds 4.4% of experiments, under every venue cap.

Iteration 5 fixes QA's critical timing defect. Cause: the USEQ venue models 100 ms order latency. On daily bars the next engine event after on_bar(T) was bar T+1, so every order filled at close(T+1), and the exit counted from that point filled at close(T+3). Fix: after each submission, _submit_entry and _submit_exit (both call super) set a clock alert 250 ms after the bar close (fill_nudge_ms > latency). NT's BacktestEngine runs exchange.process() on every time event, so the inflight order fills against the book……Show moreShow less

Iteration 5 fixes QA's critical timing defect. Cause: the USEQ venue models 100 ms order latency. On daily bars the next engine event after on_bar(T) was bar T+1, so every order filled at close(T+1), and the exit counted from that point filled at close(T+3). Fix: after each submission, _submit_entry and _submit_exit (both call super) set a clock alert 250 ms after the bar close (fill_nudge_ms > latency). NT's BacktestEngine runs exchange.process() on every time event, so the inflight order fills against the book at close(T) plus 100 ms latency plus half-spread, rather than waiting for bar T+1. Fill trace, BacktestRunner on SPY.USEQ 2019-2021: the 2020-01-31 signal entered at 321.73 (the Jan-31 close) and exited on 2020-02-03 at 324.11 (the Feb-3 close). Trades show entry_time T 20:00:00.25 and exit_time T+1 20:00:00.25. Each trade therefore books exactly close(T) -> close(T+1), the pre-study's primary window. Live caveat: a real close fill needs an MOC order placed about 10 minutes before the close on a near-close estimate. The hypothesis's own fallback (open(T+1) -> close(T+1), +0.17% on SPY) covers that gap. QA warning on back-to-back qualifiers, now handled. A same-side qualifier on the exit session holds one more session (the counter resets). An opposite-side qualifier closes and opens the opposite fade at the same close; the close order is queued first, so the position nets flat before the new entry. Every qualifying session is traded. Signal, sizing and parameters are unchanged; fill_nudge_ms is the only new parameter and is an execution setting, not a tuning knob. My own runs after the fix: 2019-2020 had 20 trades, +49%, PF 8.6, driven by March 2020. 2021-2025 had 53 trades, -3.9%, PF 0.83, avg -0.05% per trade. The recent era does not reproduce the pre-study's +0.39% for 2018-2026, and the analyst should weigh that on the full history.

Failure code: overfit. The optimizer picked leverage on an equity curve whose Sharpe changes with position size, which it should not, and that curve is a suspected backtest artifact. (1) Suspected backtest artifact. Sharpe rises as capital_fraction and buying_power_buffer grow. The daily marked-to-market returns show paired swings: a loss on the entry day, then a matching gain the next day. The pairs grow with size: about -7%/+8% at base size, -71%/+260% and -91%/+1183% optimized. The optimized run also ends on a……Show moreShow less

Failure code: overfit. The optimizer picked leverage on an equity curve whose Sharpe changes with position size, which it should not, and that curve is a suspected backtest artifact. (1) Suspected backtest artifact. Sharpe rises as capital_fraction and buying_power_buffer grow. The daily marked-to-market returns show paired swings: a loss on the entry day, then a matching gain the next day. The pairs grow with size: about -7%/+8% at base size, -71%/+260% and -91%/+1183% optimized. The optimized run also ends on a -66% bar with no open position. I have not verified the cause; the likely suspect is the fill_nudge clock-alert fill path interacting with impact folding in the USEQ runner, and it needs engine review. (2) Taking the numbers at face value, the optimized strategy still fails. Holdout Sharpe is 0.42 against 1.49 walk-forward out-of-sample (z -2.55, not consistent). Drawdown is 57% against the pre-registered 18%, PF 1.12, Calmar 0.19. The chosen z_entry of 1.0 abandons the 2-sigma premise. The run has already been optimized and this is iteration 5 (L126, L119). Per L159, the first report was suggestive but not validated: 388 trades, avg_trade 0.286% against the 0.05% floor, PF 1.69, Sharpe 0.21 with a confidence interval of -0.14 to 0.56, on the same suspect equity path. This is not a fee_edge case. Beta is -0.13 at base and -0.68 optimized, so L170 does not apply. Re-test the mechanism once, and only after the artifact is fixed: next-open fills, fixed 1x size excluded from optimization, and z_entry and close_extreme_frac as the only free parameters.

Implementation

SPY.USEQ 1-DAY fade of close-pressure overshoots. A session qualifies when |z| >= 2 (session return over the prior 60-session sigma) and the close sits in the extreme 20% of the day's range in the direction of the move. The strategy takes the opposite side at that close and exits at the next session's close. Long and short, 1x, whole shares, about 93% of equity per trade.

Verification Results

No code change is needed. The analyst should compare against the open(T+1)->close(T+1) fallback, and paper parity should confirm that fills land at the signal close.

Execution timing depends on a clock alert set 250 ms after the bar close. The alert forces the engine to process the in-flight market order against the book as of close(T). This is the intended close-to-close measurement: the bar is close-stamped, so its H/L/C are all known at submission, and this is not look-ahead. It is still an idealised MOC fill. Live, the signal (|z| and the close-location) has to be estimated about 10 minutes before the close. The whole backtest also relies on this NT event-ordering behaviour.

Reset self._bars_held = 0 when the flip entry is submitted, and skip the flip if _close_pending() was true. Better still, pin hold_sessions=1 as a structural constant that is excluded from optimization, since the hypothesis fixes the clock at exactly 1 session.

The flip path in the _submit_exit override has three gaps. (a) It opens the opposite fade even when super()._submit_exit returned early because a close was already pending. (b) It bypasses the base min_notional check, which is harmless for SPY. (c) After a flip, _bars_held is not reset: it keeps counting from the previous position because the book never goes flat on a bar boundary. With hold_sessions=1 the new fade still exits after exactly one session, but if the optimizer varies hold_sessions above 1, the flipped leg would exit one session early.

Acceptable as pre-registered. The analyst should check the worst single-session loss against the drawdown floor.

Each trade puts 0.95 x 0.98 ≈ 93% of equity into SPY with no stop, so per-trade risk is well above the 1-2% of equity guideline (L148). The worst SPY session in the data (about -11%) costs roughly 10% of equity. The design does have a flat state (exposure 4.95%), a fixed one-session clock, leverage 1.0, no dynamic scalar (worst-case gross is 0.93x equity, under the USEQ 2x cap) and whole-share int() sizing, so this is not a compounding blowup. Shorts on SPY carry no modelled borrow cost, which is negligible for SPY.

The sandbox profit is concentrated. The stressed-vol tercile made +53.9% and the COVID window alone made +39.5%, while the calm (-4.8%) and normal (-6.4%) terciles both lost money. The Sharpe CI (-0.42 to 1.11) straddles 0. The developer's own 2021-2025 run was -3.9% (PF 0.83, avg -0.05% per trade), which does not reproduce the pre-study's +0.39% for 2018-2026. The full-history backtest should check three things: per-era avg_trade_return_pct with March 2020 excluded; the same rules with fills at open(T+1) (the hypothesis's +0.17% fallback), since live trading cannot get the close fill modelled here without an MOC order placed on an estimated signal; and whether the fade clears the ~0.05% USEQ round trip outside crisis regimes.

Backtest Review

Sharpe
0.21
Total return
146.19%
Max drawdown
16.04%
Trades
388
Win rate
57.0%
Profit factor
1.69

The mechanism reproduces at trade level. 388 trades over 1993-2023 (about 13 a year, matching the pre-study's 439 qualifiers) average 0.255% per trade from the trade ledger (report: 0.286%), with t = 3.29. That is consistent with the pre-registered +0.26% (t = 3.6).

The trades match the hypothesis. The book is symmetric (203 long, 185 short), holds one session, and fades in the direction the close-location filter selects. Longs carry more of the edge (0.358%, t = 3.1) than shorts (0.141%, t = 1.4). That is plausible for a fade of close pressure.

Per-trade economics clear the USEQ floor: 0.286% against 0.05%, about 5.7x. PF is 1.69 and win rate 0.57. Impact is 11% of gross, and capacity is about $7.8M.

This is not beta (L170). Beta is -0.13 with exposure of 5%. Max drawdown is 16%, against about 55% for SPY buy-and-hold over the same window.

The strategy has 2 structural parameters, and the sample (388 trades, about 78 of them in the 20% holdout) is adequate for optimization.

QA's concern is partly borne out. Per era: 1993-2008 averaged 0.21% (t = 2.5), 2009-2017 averaged 0.17% (t = 1.2), and 2018-2023 averaged 0.50% (t = 2.0). Excluding 2020, 2009-2023 averages only 0.068% (t = 0.64, n = 160). That is barely above the 0.05% USEQ floor. The modern-era edge rests heavily on March 2020, and 2020 alone contributes +49.7% of the +146% total.

Suspected metrics artifact, mechanism not verified. daily_returns shows recurring paired -X/+X swings of identical size across many unrelated dates (for example -7.2351/+7.7994 repeated through 2018). It also shows a -7.6% final bar on 2023-12-29, while the equity curve and trade ledger show the book flat and unchanged. As a result, annualized vol of 28% for a book that is 5% exposed, the 0.21 Sharpe, the Sharpe CI (-0.14 to 0.56) and the drawdown CI (30-79%) are unreliable and probably understate the strategy. The trade-level t of 3.3 is the better evidence. Same symptom as in the SPY wealth-selector review. Needs engine review of the USEQ MTM/impact folding.

Data ends 2023-12-29, although the hypothesis cites history to 2026. Nearly 3 years of the most recent, out-of-sample-relevant data are missing.

Execution realism. The fill_nudge fills at close(T) plus 250 ms, on the same bar whose close defines the signal. Live trading would need an MOC order placed on an estimated signal. The fallback of filling at open(T+1) (pre-study: +0.17% on SPY) has not been measured in the engine.

likely depressed by the daily-return MTM artifact

Analysis

Backtest gate: - metrics unreliable: Incoherent: Sharpe 0.29 disagrees in sign with total_return -46.70% — the Sharpe is computed from the mtm_equity_curve series while the return comes from the equity curve. Judge on the equity curve.

Benjamini-Hochberg at q=0.10 over 344 programme candidates keeps 9. A candidate that does not survive here is not distinguishable from the programme's own noise, however good its individual statistics look.

Iteration History

Verification failed (Layer 4 — QA review) [class=hypothesis_mismatch]: - [edge_concern] Signal logic is correct and reproduces the pre-study: my pandas replay of the exact rule on the catalog's SPY.USEQ 1-DAY gives 432 signals 1993-2026 at a +0.25% mean close(t)->close(t+1) fade. The mechanism is regime-dependent, though. On the last 1655 sessions (2020-02 to 2026-09, 71 signals) the correct window gives -0.01% c0->c1 and -0.10% o1->c1. From 2021-06 on it is -0.10% c0->c1. The recent-era +0.39% in the hypothesis……Show moreShow less

Verification failed (Layer 4 — QA review) [class=hypothesis_mismatch]: - [edge_concern] Signal logic is correct and reproduces the pre-study: my pandas replay of the exact rule on the catalog's SPY.USEQ 1-DAY gives 432 signals 1993-2026 at a +0.25% mean close(t)->close(t+1) fade. The mechanism is regime-dependent, though. On the last 1655 sessions (2020-02 to 2026-09, 71 signals) the correct window gives -0.01% c0->c1 and -0.10% o1->c1. From 2021-06 on it is -0.10% c0->c1. The recent-era +0.39% in the hypothesis looks driven by 2019-2020. Once the timing is fixed, the analyst should check per-year returns after 2021 before optimizing. - [critical] The backtest trades a different window from the one the hypothesis names. I ran the code through BacktestRunner on USEQ for 2020-2021 with fill logging. A market order submitted on the signal bar (close t) does NOT fill at close t: it fills at the NEXT bar's close. Example: signal 2020-06-11 at close 300.61, entry fill 304.21 = close of 2020-06-12. The held counter only starts once the position exists, so it reads 1 on bar t+2, where should_exit fires. That exit order is again filled one bar late, at close t+3 (fill 312.95, close 312.96). Every trade in the run was close(t+1) -> close(t+3). That is a 2-session hold starting one session late, and it matches the sandbox avg_holding_period of 2d20h against ~35h expected for a 1-session clock. The hypothesis says the edge is the close(t)->close(t+1) session, with next-open->next-close (o1->c1) as its fallback. The window this code measures is exactly the one the hypothesis calls edgeless: over 1993-2026, c1->c2 is +0.01% per trade versus +0.25% for c0->c1. So the sandbox's -0.19% per trade says nothing about the hypothesis. The one session that carries the edge is never held. (line 51) — fix: (1) Fix the counter so the position is exited on the first bar where it is open (hold_sessions counted from the fill bar, i.e. exit when bars_held >= hold_sessions - 1 given the one-bar fill delay). Better: store the entry bar's ts and exit on the first bar with ts > fill bar. (2) Get the entry filled at the signal close (or at worst the next open), not the next close. On a session venue, look for an order path that fills at the next session's OPEN, such as a market order the matching engine processes on the open tick of the next bar. If the engine can only fill daily-bar orders at the next cl - [warning] Back-to-back qualifying sessions are dropped. should_enter runs only while flat. When the exit bar is itself a qualifying session, the base template calls should_exit, not should_enter, so that signal is never traded. The pre-study counts every qualifying session independently. In the 2020-2026 window, 9 of 71 signals fall on the day right after another signal. These cluster in stress episodes such as March 2020, where most of the variance sits. (line 94) — fix: In should_exit, if the current bar qualifies in the same fade direction, return False and reset _bars_held to 0 (extend the hold). If it qualifies in the opposite direction, exit now and re-enter on the next bar. Or document the omission as deliberate. - [warning] Each trade uses about 93% of equity, with no stop, held through the close. The largest sandbox loss was -$14.2k (~14% of equity) in the 2020 crash window. This is not an always-in design: it is flat about 95% of the time, has a one-session clock, and leverage is 1.0. Worst-case gross is 0.95 x 0.98 x 1.0 = 0.93x equity, under the USEQ 2x cap, so L148/L156 do not apply. Per-trade risk still exceeds 1-2% of equity on gap days. (line 108) — fix: Acceptable as pre-registered. The analyst should read the worst-trade and stressed-tercile results.

Verification failed (Layer 4 — QA review) [class=code_defect]: - [edge_concern] Smoke results are negative, with PF 0.944 and reported average trade return below the USEQ cost floor; the ledger is internally inconsistent. - [critical] The hypothesis requires exactly one session, but same-direction qualifiers reset _bars_held and extend the position. (line 130) — fix: Always exit after hold_sessions bars; treat a subsequent qualifier as a separate trade. - [critical] The OCO stop/MIT pair does not guarantee……Show moreShow less

Verification failed (Layer 4 — QA review) [class=code_defect]: - [edge_concern] Smoke results are negative, with PF 0.944 and reported average trade return below the USEQ cost floor; the ledger is internally inconsistent. - [critical] The hypothesis requires exactly one session, but same-direction qualifiers reset _bars_held and extend the position. (line 130) — fix: Always exit after hold_sessions bars; treat a subsequent qualifier as a separate trade. - [critical] The OCO stop/MIT pair does not guarantee next-open entry. If the opening price remains within the 3 bps band, neither order triggers and the signal is silently dropped. (line 205) — fix: Use a supported next-open execution mechanism or explicitly model the conditional-entry behavior. - [critical] _nudge_close schedules a callback whose implementation is a no-op, so it cannot force the exit to execute at the current session close as claimed. (line 184) — fix: Implement supported close-time execution and verify fill timing under USEQ simulator semantics. - [critical] The smoke report shows avg_trade_return_pct of 0.003125%, below the approximate 0.05% USEQ cost floor, and its positive sign disagrees with total_return of -1.71%; PF is also below 1.0. (line 147) — fix: Reconcile trade-ledger notional and equity PnL, including all spread/impact costs, before relying on the economics.

Verification failed (Layer 4 — QA review) [class=hypothesis_mismatch]: - [edge_concern] The -13.7% sandbox result, the developer's -46.7% full backtest and the 27% short win rate cannot be read as evidence against the pre-studied edge. As executed, the book holds the two sessions AFTER the fade session (T+1 close to T+3 close). The hypothesis's own pre-study says that horizon adds nothing on SPY and turns negative in 2009-2017 on QQQ, DIA and IWM. Judge the premise only once the traded return window is session……Show moreShow less

Verification failed (Layer 4 — QA review) [class=hypothesis_mismatch]: - [edge_concern] The -13.7% sandbox result, the developer's -46.7% full backtest and the 27% short win rate cannot be read as evidence against the pre-studied edge. As executed, the book holds the two sessions AFTER the fade session (T+1 close to T+3 close). The hypothesis's own pre-study says that horizon adds nothing on SPY and turns negative in 2009-2017 on QQQ, DIA and IWM. Judge the premise only once the traded return window is session T+1. I have not re-run the pre-study. - [critical] The trade covers the wrong sessions. I re-ran the sandbox config on SPY.USEQ 2019-06 to 2021-01 with a fill/bar trace. On USEQ 1-DAY, a market order submitted in on_bar(T) does NOT fill at T's close. It stays working and fills at the NEXT bar's CLOSE, AFTER the strategy's on_bar(T+1) has already run. Trace examples: signal on 2020-01-31 (z=-3.66, loc=0.16, BUY) filled on 2020-02-03 at 324.12, which is the Feb-3 close, not the Jan-31 close of 321.73. Signal on 2020-02-24 (z=-5.23) filled on 2020-02-25 at 312.65, the Feb-25 close. As a result, _bars_held first reaches 1 on T+2, the exit is submitted there, and it fills at T+3's close (e.g. exit 2020-02-27 at 297.51). Every trade is therefore held from close(T+1) to close(T+3): two sessions, starting one session late. This matches the reported avg_holding_period of 2d20h and exposure of ~2.1 sessions per trade. The hypothesis is explicit: exactly ONE session, and the edge sits in session T+1 (close T to close T+1, or open T+1 to close T+1 as the fill-robustness fallback). The code captures neither. It trades the T+2 and T+3 horizon, which the hypothesis's own pre-study reports as non-positive. The hold counter is incremented only once per bar, so it is correct in isolation, but it counts from the bar on which the position becomes visible, not from the signal bar. The 'Blocked stacked entry ... in flight' warnings on 2020-02-25, 2020-03-03, 2020-03-10 and 2020-03-16 are the same pending signal-bar order still unfilled one bar later. (line 88) — fix: Make the traded window match the hypothesis under the engine's actual fill timing. (a) Anchor the clock to the SIGNAL bar, not to position visibility. Record the signal bar's ts and submit the exit on the first on_bar after the entry is filled. Better still, submit the closing order from on_order_filled/on_position_opened so that it fills on the next available print. Then state in the rationale exactly which close-to-close or open-to-close window each trade books, and verify this with a fill trace. (b) If the USEQ engine cannot fill a signal-bar order before close(T+1), the hypothesis's T+1 se - [warning] Back-to-back qualifiers are dropped. When a position is open, the base template only evaluates should_exit(). A session that both ends an existing trade and qualifies as a new signal cannot re-enter on the same bar. The pre-study counts every qualifying session. These clusters are frequent in stress periods (the Feb-Mar 2020 trace shows qualifiers on consecutive days), so the coded sample is a subset that is systematically different from the one pre-studied. (line 97) — fix: When the exit bar also qualifies, net the position: flip it, or keep holding when the side is the same, and document the choice. A lighter alternative is to report how many qualifiers were skipped so the analyst can reconcile against n=439. - [warning] Sizing is 0.95 x 0.98 x equity x 1.0 leverage in whole shares, a single leg with no scalar, so worst-case gross is about 93% of equity, which is within Reg-T 2x. There is no stop, but the one-session clock is the risk bound, and the book is flat about 93% of the time. This is acceptable (L148/L156 satisfied by the fixed clock and the static fraction). Note that once the timing bug is fixed, a 2-3 session gap exposure at ~93% notional (e.g. March 2020, largest loss -$14.2k, ~14% of equity) remains the dominant drawdown source. (line 113) — fix: No change is required. The analyst should review the worst single-trade loss against the pre-registered 12.1% max drawdown.

Outcome Summary

Keep position size and leverage out of the optimizer's free parameters, and fix or rule out engine MTM artifacts before optimizing, because a Sharpe that climbs with size points to a measurement problem, not an edge.

The backtest review cleared it to optimize, but the post-optimization analyst abandoned it (failure code: overfit) at iteration 5. The optimizer picked leverage on an equity curve whose Sharpe rose with position size, which the analyst attributed to a suspected, unverified MTM artifact (paired daily loss/gain swings that scale with size, likely from the fill_nudge fill path interacting with USEQ impact folding); at face value the optimized run also failed on holdout consistency, a 57% drawdown against the pre-registered 18%, and a z_entry of 1.0 that dropped the 2-sigma premise.

On daily SPY.USEQ bars it faded outlier sessions (|z| >= 2 against the prior 60-session return sigma) that closed in the extreme 20% of the day's range in the direction of the move, holding the opposite side for one session, on the thesis that mechanical end-of-day flow (LETF rebalancing, MOC imbalances, vol-target de-risking) pushes the close past fair value.

The base backtest (1993-2023) returned 146.2% over 388 trades, with avg_trade_return_pct 0.286%, PF 1.69, win rate 0.57, max drawdown 16.0% and Sharpe 0.21 (CI -0.14 to 0.56, on a suspect equity path); 2020 alone contributed +49.7% and 2009-2023 excluding 2020 averaged only 0.068% per trade. After optimization (z_entry 1.0, capital_fraction 1.38) the backtest showed Sharpe 1.09 and 1486 trades, but avg_trade_return_pct was 0.123%, max drawdown 57.4% and holdout Sharpe 0.42 against 1.49 walk-forward OOS (ratio 0.283, z -2.55).

Backtest and paper results are hypothetical. Trading involves risk of loss.