Strategies
Compression-Trap Reversal, Cross-Asset-Class Breadth Test on US Equity ETFs: Buy the Failed Downside Break of an NR7 Day on SPY/QQQ/IWM/DIA + 9 Select Sector SPDRs, Next-Session-Open Entry, Fixed 3-Session Clock (USEQ 1-DAY, long-only event panel, flat most of the time, pure OHLCV)
Outcome: Abandoned
UseqEtfNr7FailedDownsideBreakReversalPanel
Outcome Summary
This run took the NR7 failed-downside-break reversal, already promoted on Bybit, OKX, Binance spot and Hyperliquid, and applied it unchanged to 13 US index and sector ETFs to see if it works outside crypto. The trigger fired about as often as predicted, but the backtest's average trade lost money (about -0.04% of notional), with a Sharpe of -0.12 and a drawdown of 26-30%, twice the pre-registered 15% limit. The analyst abandoned it at backtest review, after one iteration and without optimization: the losses were broad across names and years, costs were not the cause, and tuning would only fit noise. The breadth test answered its question: the edge looks crypto-specific, and this verdict covers only the ETF version, not the crypto panels.
Hypothesis
Quota check: USEQ is 9.7% of experiments and BINANCE 49.6%; this adds nothing to Binance/BTC. Long-only is over-represented (75.6%), justified here because the long arm is the only arm with evidence (L230) and the run's purpose is a cross-asset-class breadth test of the factory's most replicated survivor (L227), on a fully new instrument set for this mechanism, with no supplementary feed (L189) and an event-driven, flat-most-of-the-time, fixed-clock design (L224). Prior USEQ reversal attempts that died (cross-sectional weekly reversal, KO/PEP pairs, XLF z-score) were continuous or always-in designs; this is a sparse event trigger with a frozen pattern.
Implementation
Long-only event panel on 13 USEQ ETFs (SPY primary; QQQ, IWM, DIA and 9 Select Sector SPDRs as extras), daily bars, each name evaluated on its own bars. Trigger on day N: day N-1 is NR-k (range <= min of the previous k-1 sessions, so it is the smallest of the last k including itself; k=7), day N's low is strictly below the NR day's low by more than min_break_frac x NR range (default 0, i.e. any amount below), and day N closes at or above the NR low. A market BUY decided at N's close fills at the next session's open (platform next_open_fill). Exit: a market SELL decided at the close of the hold_sessions-th session held (default 3), filling at the next open. Sessions are counted as the name's bars stamped after position.ts_opened, so the clock survives a restart. Each leg is sized at 12% of equity in whole shares, with at most 6 concurrent legs including pending entries (72% gross, unlevered). Signals on a held or pending name are ignored. There is no stop.
This implements the frozen crypto NR7 failed-downside-break pattern and its 3-session clock on US index and sector ETFs, as a breadth test across asset classes. Risk control is route (b): a time exit plus capped sizing (12% per leg, 72% max gross, 1x). The legs don't depend on each other, so the cross-leg alignment barrier is turned off and each leg trades on its own close. All legs share the USEQ calendar. Next-open execution is supported natively. slippage_bps_per_side is kept in parameters for the platform to apply and is not charged in the code. The optimisation plan is followed: nr_lookback [4,10], hold_sessions [2,6] and min_break_frac [0,0.5] are tunable, clamped to the same ranges and declared in _param_bounds; leg_weight 0.12 and max_concurrent 6 are fixed. Two interpretation choices: the NR test uses <= (ties count as narrowest, since the brief says 'smallest including itself'), and the continuous signal is the break depth in NR-range units (negative when the close fails to reclaim the NR low).
Verification Results
Optional: rank same-session triggers by break depth, or document the arrival-order allocation.
When more than max_concurrent legs trigger on the same session, slots go to legs in the order their bars arrive (SPY on the primary path, then the extras), not by signal strength. This does not break the hypothesis, which sets no priority rule, but the selection is arbitrary and depends on bar-arrival order.
No change needed.
min_bars_required() overrides the base method and returns nr_lookback + 2 (6-12), below the base default of 20. That is enough for the NR window plus the trigger bar, so it is correct. Layer 1 flagged the override, which is deliberate here.
Sandbox: 1455 trades over about 2400 days on 13 names, roughly 17 per name per year. The hypothesis predicted 5-7, so check how the ledger counts trades and how often the trigger fires before reading per-trade economics. NR7 setups cluster in calm regimes, and the concurrency cap is first-come within a session, so on busy days which legs fill depends on the order the bars arrive. Whether a crypto stop-run reversal carries over to highly arbitraged index/sector ETFs is the open question. That is for the full backtest to decide (round trip about 0.02-0.05%, slippage applied by the platform).
Backtest Review
- Sharpe
- -0.12
- Total return
- -15.92%
- Max drawdown
- 30.02%
- Trades
- 2974
- Win rate
- 51.3%
- Profit factor
- 0.94
The code implements the frozen pattern as written: an NR day, a low below it on the next day, a close back at or above that low, a long entry at the next session's open, and a time exit about 3 sessions later. All 2,375 trades are long, with 12% legs and no commission.
The sample is large and reliable: 2,375 closed trades over about 21 years (2000-06 to 2021-07) on 13 ETFs, roughly 146-214 per name. That is close to the predicted 1,500-2,000, so the trigger fires as intended.
Net expectancy is negative. The average trade return is -0.042% of notional, against a USEQ floor of 0.05% and a preferred 0.10%. That is below zero, not just below the floor. The hypothesis predicted +0.3% to +0.4%.
Profit factor is 0.937, Sharpe -0.12 and total return -13.1%. Max drawdown is 26.4%, against the pre-registered 15%, and the strategy never recovered from it (drawdown duration of 7,350 days). The win rate of 51% comes with an average loss ($181) larger than the average win ($161).
The losses are broad, not concentrated. 8 of 13 names lost money (SPY -$2.7k, XLK -$3.4k, XLU -$3.9k, XLY -$2.8k, XLF/XLB/XLV about -$2.4k to -$2.6k). The winners (XLE, XLI, XLP, QQQ) look like dispersion around zero, and there is no subset showing a robust edge. 12 of 22 calendar years were negative.
Costs are not the cause. Commission is zero and the slippage is 1 bp per side, so the gross reversal effect is itself about zero or negative.
Outcome Summary
The NR7 failed-downside-break edge appears specific to crypto and does not carry over to heavily arbitraged US index and sector ETFs, so it should not be treated as a general cross-asset mechanism.
The backtest-review gate abandoned it before optimization for negative expectancy: -0.042% per trade, below the 0.05% USEQ floor and below zero. The losses were spread across 8 of 13 names and 12 of 22 years, with zero commission and 1 bp slippage, so the gross effect itself was about zero or negative. This was not an implementation defect.
A test of whether the NR7 failed-downside-break reversal, already promoted on four crypto universes, also works outside crypto: on 13 US index and sector ETFs (USEQ daily bars), it bought at the next session's open after a day broke below the prior NR7 day's low but closed back above it, sold on a fixed 3-session clock, and sized each leg at 12% of equity, long-only and unlevered.
The initial backtest lost money. Over the full report window (2000-06 to 2026-10) it made 2,974 long trades with an average trade return of -0.041% of notional, a Sharpe of -0.12, a profit factor of 0.94, a total return of -15.9% and a max drawdown of 30.0%. The reviewer's development-period figures (2,375 trades, 2000-2021) were close: -0.042% per trade, a total return of -13.1% and a max drawdown of 26.4%, against a pre-registered 15% drawdown limit.
Backtest and paper results are hypothetical. Trading involves risk of loss.