Skip to content
All strategies

Strategies

SOL Liquidation-Cascade Overshoot Reversal, Long-Short (Single-Instrument SOLUSDT.BINANCE Perp — Fade EXTREME Forced-Liquidation Bursts Measured on the SAME Perp, Liquidation-Volume Z-Score Gated, Symmetric-RR Snapback, 3-Parameter)

Outcome: Abandoned

SolLiquidationCascadeOvershootReversalLS

Clean single-instrument single-venue design — signal (liquidation feed) and execution are the SAME SOL perp, so no cross-venue/instrument-swap artifact

Hypothesis

A LONG-SHORT, single-instrument, EVENT-DRIVEN reversal on SOLUSDT.BINANCE USD-M perpetual that fades the price OVERSHOOT caused by forced-liquidation cascades. Its signal is the liquidations supplementary feed for the SAME perp it trades — signal and execution are one instrument on one venue, structurally eliminating the cross-venue/instrument-SWAP trap that killed several prior reversal ideas (the developer literally cannot route to a different symbol without breaking the signal). SOL is chosen over BTC……Show moreShow less

A LONG-SHORT, single-instrument, EVENT-DRIVEN reversal on SOLUSDT.BINANCE USD-M perpetual that fades the price OVERSHOOT caused by forced-liquidation cascades. Its signal is the liquidations supplementary feed for the SAME perp it trades — signal and execution are one instrument on one venue, structurally eliminating the cross-venue/instrument-SWAP trap that killed several prior reversal ideas (the developer literally cannot route to a different symbol without breaking the signal). SOL is chosen over BTC deliberately: it is high-leverage, cascade-prone, and BTC is an over-tried 2%-survival graveyard; SOL's larger forced-move overshoots also clear the fee floor with room to spare. The edge is crypto-native and mechanical: when a wave of margin liquidations forces size through the book in minutes, price overshoots fair value and reliably snaps back once the forced flow exhausts. It fills FOUR under-represented buckets at once — long_short direction (13.6% vs a portfolio that is 86% long-only), short horizon (15m), the liquidations supplementary data family, and an event-driven mechanism absent from the momentum/trend graveyard. Only 3 parameters to resist the overfitting that killed 259 prior hypotheses, and it is deliberately LOW-frequency (only the most extreme cascades qualify) so fee drag stays small and per-trade moves stay large. NOT momentum/trend confluence (exhausted/overfit), NOT funding-carry (L33), NOT a tick/book microstructure scalper (repeated no-trades/timeout deaths) — it is bar-driven with a supplementary event gate.

Iteration 3 fix: the reported Layer-1 failure was `self._bar_interval_ns = ...` shadowing the framework staticmethod `_bar_interval_ns(bar_type)`. The bar-span attribute is now named `self.bar_span_ns` and no attribute shadows any base member (verified locally with StaticAnalyzer: passed=True, zero errors). Note the `previous_code` supplied in the brief was a different strategy (a SOL Hyperliquid Donchian breakout) and did not contain the flagged lines, so this file implements the hypothesis as stated --……Show moreShow less

Iteration 3 fix: the reported Layer-1 failure was `self._bar_interval_ns = ...` shadowing the framework staticmethod `_bar_interval_ns(bar_type)`. The bar-span attribute is now named `self.bar_span_ns` and no attribute shadows any base member (verified locally with StaticAnalyzer: passed=True, zero errors). Note the `previous_code` supplied in the brief was a different strategy (a SOL Hyperliquid Donchian breakout) and did not contain the flagged lines, so this file implements the hypothesis as stated -- single-instrument SOLUSDT.BINANCE perp, liquidations supplementary feed for that same symbol, long+short, 15m, symmetric-RR snapback, exactly 3 tunables (liq_z_entry, stop_loss_pct, take_profit_pct). Hypothesis mapping: signal and execution share one instrument/venue by construction (the feed is keyed on SOLUSDT), the gate is a rolling z-score of the instrument's own burst history rather than an absolute USD threshold (scale-invariant across regimes), and forced-flow direction sets the fade side. Fee viability: the 1.2% symmetric target is ~12x the ~0.10% Binance USD-M round-trip taker cost. Frequency check on the real PostgreSQL liquidation series for SOLUSDT (67,011 events, 2026-04-21 to 2026-09-05, 13,121 15m buckets): |signal| >= 3.0 fires on 215 bars (~1.6/day), so the sandbox window (which the runner clamps to the live-feed start) produces well over one trade while staying low-frequency. Point-in-time safety: events are indexed once into sorted timestamps + prefix sums and read with two numpy searchsorted calls over the half-open window (bar_ts - span, bar_ts] -- no abs() nearest matching, O(log n) per bar, so no timeout risk on ~13k 15m bars. If the liquidation feed is empty the signal is 0.0 and the strategy stays flat -- no price-only fallback.

Negative expectancy on a reliable 168-trade / 137-day sample: profit_factor 0.57, total_return -19.7%, avg_trade_return_pct -0.074% (below ZERO and under the 0.15% USD-M fee floor), expectancy -$117/trade, Sharpe -3.18 (CI fully negative). The trades correctly implement the hypothesis (fade one-sided forced-liquidation cascades, balanced 83/85 long-short), so this is a fair test of the snapback premise — and the premise is measurably falsified: the strategy loses WORST in the stressed vol tercile (Sharpe -3.63,……Show moreShow less

Negative expectancy on a reliable 168-trade / 137-day sample: profit_factor 0.57, total_return -19.7%, avg_trade_return_pct -0.074% (below ZERO and under the 0.15% USD-M fee floor), expectancy -$117/trade, Sharpe -3.18 (CI fully negative). The trades correctly implement the hypothesis (fade one-sided forced-liquidation cascades, balanced 83/85 long-short), so this is a fair test of the snapback premise — and the premise is measurably falsified: the strategy loses WORST in the stressed vol tercile (Sharpe -3.63, -14.2%) and in the normal tercile (-10.7%), i.e. in the exact high-liquidation regimes it targets, while only the calm tercile is ~flat. Adverse geometry (win 47%, avg_loss $512 > avg_win $328, skew -1.34) shows the 1:1 bracket is run over by continuation — cascades persist rather than snap back on SOL 15m. Commission is only ~29% of gross, so this is gross-negative, not fee-fragility. QA's edge concern is borne out on the full sample. Optimizing liq_z_entry/stop/TP cannot invert a PF-0.57, below-zero-expectancy signal. Matches L55 (single-name fade, PF<1.15 -> abandon). abandon_class=negative_expectancy.

Implementation

Long/short event-driven reversal on SOLUSDT.BINANCE 15-minute perp bars that fades the price overshoot of extreme forced-liquidation cascades measured on the SAME perp. Per bar it sums the liquidation USD in the bar's own 15-minute window, z-scores it against a rolling 96-bar history of its own bursts (relative denominator floor, no absolute USD constant), and weights that z by the forced-flow imbalance to get a signed, graded cascade intensity: positive = long-liquidation (forced-selling) cascade to fade LONG, negative = short-squeeze cascade to fade SHORT. Entries above +/-liq_z_entry are BRACKET orders (market entry + venue stop-loss + venue take-profit, symmetric 1.2%/1.2% RR) so the snapback target and the stop both fire intra-bar; a 16-bar (4h) time stop is the only signal exit. Sizing risks 0.75% of current equity on the bracket stop, hard-capped at 50% of equity gross notional, leverage 1.0.

Verification Results

If the override is intentional (it looks correct), leave it; otherwise rename to avoid shadowing.

min_bars_required(self) overrides the framework method (flagged by static analysis). This appears deliberate (returns min_samples+2) and is benign, but confirm the base does not rely on its own warmup accounting elsewhere.

Sandbox is negative (total_return -19.5%, Sharpe -2.51, PF 0.54, avg_trade_return_pct -0.072% which is below the ~0.10% round-trip fee floor and negative). This is a coherent implementation that trades plenty (160 trades over 134 days, well above the ~100-trade measurability bar), so the smoke test is meaningful and the fade edge is not visible in this unoptimized draw: losses are worst in the stressed vol tercile (return -15.5%, Sharpe -5.08) and negative in the normal tercile, with only the calm tercile ~flat,……Show moreShow less

Sandbox is negative (total_return -19.5%, Sharpe -2.51, PF 0.54, avg_trade_return_pct -0.072% which is below the ~0.10% round-trip fee floor and negative). This is a coherent implementation that trades plenty (160 trades over 134 days, well above the ~100-trade measurability bar), so the smoke test is meaningful and the fade edge is not visible in this unoptimized draw: losses are worst in the stressed vol tercile (return -15.5%, Sharpe -5.08) and negative in the normal tercile, with only the calm tercile ~flat, i.e. the cascade-reversal thesis lost money precisely in the high-liquidation regimes it targets. commission_pct_of_gross is 31% and turnover 419, so fee drag is material even at this deliberately low frequency. The 1.2% symmetric TP is ~12x round-trip cost so a winning trade clears fees, but the 47.5% win rate with avg_loss (505) > avg_win (302) implies the 1:1 bracket is being run over by stop-outs. Advisory only — the analyst should judge whether optimizing liq_z_entry (fewer, more extreme cascades) and asymmetric-favoring stop/TP within bounds recovers edge, or whether the snapback thesis is simply weak on SOL 15m. Does not block.

Backtest Review

Sharpe
-3.18
Total return
-19.74%
Max drawdown
20.23%
Trades
168
Win rate
47.0%
Profit factor
0.57

Clean single-instrument single-venue design — signal (liquidation feed) and execution are the SAME SOL perp, so no cross-venue/instrument-swap artifact

Trades faithfully implement the hypothesis: fades one-sided forced-liquidation cascades, balanced long/short (83 long / 85 short), 168 trades over 137 days is a reliable, measurable sample

Only 3 tunable parameters; venue/fee assumptions sane

Negative expectancy on a decisive sample: total_return -19.7%, profit_factor 0.57, avg_trade_return_pct -0.074% (BELOW ZERO and under the 0.15% USD-M fee floor), expectancy -$117/trade, Sharpe -3.18 with CI [-5.90, -0.16] fully negative

The premise is measurably absent precisely where it should work: performance is WORST in the stressed vol tercile (Sharpe -3.63, return -14.2%) and negative in the normal tercile (-10.7%), only calm is ~flat. The cascade-reversal thesis loses money in the exact high-liquidation regimes it targets

Adverse payoff geometry: win_rate 47%, avg_loss $512 > avg_win $328, return_skew -1.34 — the symmetric 1:1 bracket is systematically run over by continuation stop-outs, i.e. cascades keep going rather than snapping back

This is gross-negative, not fee-fragile: commission is only ~29% of gross; there is no positive edge for the low fee to rescue

Iteration History

Verification failed (Layer 3 — sandbox backtest): No trades produced Bar type used: SOLUSDT.BINANCE-15-MINUTE-LAST-EXTERNAL, Bars processed: 34946 Diagnostics: should_enter() returned a side 0 times over 34917 evaluated bars -> your ENTRY CONDITION never triggered. Loosen the entry logic / thresholds. Ensure your strategy produces trades with the given data and parameters.

Verification failed (Layer 4 — QA review): - PER-TRADE EDGE DOES NOT CLEAR THE FEE FLOOR -- confirmed on a decisive, measurable sample. The sandbox ran 64 trades over 363 data_days (metrics_reliable=true) and returned avg_trade_return_pct=0.0107% of notional -- roughly 14x BELOW the 0.15% futures viability floor and essentially zero gross edge before commissions. This is not a small-sample artifact: profit_factor=0.61, sharpe=-1.33 (CI [-2.49, 0.25]), total_return=-15.1%, expectancy=-$236/trade,……Show moreShow less

Verification failed (Layer 4 — QA review): - PER-TRADE EDGE DOES NOT CLEAR THE FEE FLOOR -- confirmed on a decisive, measurable sample. The sandbox ran 64 trades over 363 data_days (metrics_reliable=true) and returned avg_trade_return_pct=0.0107% of notional -- roughly 14x BELOW the 0.15% futures viability floor and essentially zero gross edge before commissions. This is not a small-sample artifact: profit_factor=0.61, sharpe=-1.33 (CI [-2.49, 0.25]), total_return=-15.1%, expectancy=-$236/trade, probabilistic_sharpe=0.039. The strategy's own iteration-2 rationale already concedes the arithmetic: it measured the fade's gross forward edge at ~+0.18% over 2-4h, which nets to ~+0.08% after the ~0.10% round-trip taker cost -- below the 0.15% floor before any slippage. Per learning L6, the required check is (expected per-trade gross move) vs (round-trip cost with margin); here the hypothesis's OWN stated move (0.18% gross) does not beat the cost with margin, and the realized sample (0.0107%) confirms the edge is indistinguishable from zero net of fees. The hypothesis premise -- 'deliberately LOW-frequency so per-trade moves stay large' -- is falsified by the data: the moves are not large enough. Passing this only burns the full backtest + 3-phase optimization discovering what the sandbox already shows. - REALIZED PAYOFF IS INVERTED RELATIVE TO THE 'SYMMETRIC RR' DESIGN CLAIM. The docstring/hypothesis advertise a symmetric-RR snapback (target_mult=1.0 => stop and take-profit at the same ATR distance), but the sandbox shows avg_loss=$1289 ~= 1.9x avg_win=$693, and largest_loss=-$4022 vs largest_win=$1529 (return_skew -3.71, kurtosis 72). Cause: should_exit only evaluates the stop/target on the 15-MINUTE BAR CLOSE via get_position_pnl_pct, so on a fast liquidation-cascade move (exactly the regime this strategy trades into) price gaps well past the intended stop_atr_mult stop before the next close, realizing losses far larger than the symmetric target ever captures. The result is the inverted realized reward:risk that has repeatedly killed single-name fade strategies this session despite a >50% win rate (here 53%, still net-negative). - The 'one stop-out costs ~risk_frac (1%) of equity' claim is not what binds in practice. avg_position_pct=143.5% shows the gross-notional cap (equity*leverage*max_notional_frac/price = equity*3*0.5/price = 1.5x) is the binding constraint on nearly every trade, not the risk-based size (equity*risk_frac/stop_dist). For SOL 15m, stop_dist/price (~1.2*ATR) is typically < 0.67%, which is precisely the crossover where the notional cap dominates -- so sizing is effectively leverage-capped, and combined with the intrabar-gap issue above, a single adverse cascade realizes multiples of the intended 1% (largest_loss ~4% of the implied account). The risk-cap narrative understates true per-trade downside.

Verification failed (Layer 1 — static analysis): - `self._bar_interval_ns = ...` binds a value over framework method `@staticmethod _bar_interval_ns(bar_type)` — every later call raises "'<type>' object is not callable" (or the framework loses the member). Use a different attribute name. (line 209) - `self._bar_interval_ns = ...` binds a value over framework method `@staticmethod _bar_interval_ns(bar_type)` — every later call raises "'<type>' object is not callable" (or the framework loses the member). Use a different attribute name. (line 112)

Verification failed (Layer 1.5 — hypothesis/config consistency) [class=hypothesis_mismatch]: - config.instrument_id is SOLUSD.HYPERLIQUID but the hypothesis declares SOLUSDT.BINANCE — same asset, DIFFERENT venue/contract type (fees, settlement and the mechanism's premise differ). Trade the declared instrument.

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