BtcLiquidationCascadeReversalVolStopLS
Hypotheses
Liquidation Cascade Reversal on BTC Perps
Hypotheses
Mean-reversion strategy that fades sharp price moves accompanied by abnormally high forced-liquidation volume on Binance USD-M futures. When stop-outs cascade, leveraged traders are forcibly removed from the market, creating a temporary supply/demand imbalance that typically retraces 30-70% within hours. Trade direction is opposite the cascade (e.g., long after a long-liquidation flush). Capital-relative sizing scales with cascade magnitude, with a hard volatility-based stop to protect against trend-continuation cascades.
Hypotheses
Iteration 2 fixes the Layer-2 (synthetic) failure 'BtcLiquidationCascadeReversalVolStopLS._to_ns() takes 1 positional argument but 2 were given'. Root cause: _to_ns was declared @staticmethod but is invoked as self._to_ns(...); the Layer-2 verification proxy rebinds strategy helpers as instance methods and passes self, so the 1-arg staticmethod received 2 args. The minimal fix converts _to_ns from a staticmethod to an instance method (drop @staticmethod, add self); it is the only self-called staticmethod in the class (_build_liq, _liq_window, _atr, _position, _cascade_magnitude are already instance methods), and its single call site already uses self._to_ns(...), so no other change is needed. Every other line -- liquidation series build, causal 1h windowed per-side USD aggregation, price-move computation, cascade-magnitude-scaled sizing, ATR volatility stop, and take-profit/time-stop exits -- is byte-identical to the previous iteration, preserving all Layer-1 checks and the passing signal logic. This is the same recurring synthetic-proxy gotcha where @staticmethod helpers invoked through self raise a spurious TypeError only under verification.
Hypotheses
BTC liquidation-cascade reversal fired only 10 trades in 902,208 15m bars, all confined to 2026-04-22 through 2026-06-25, with the engine flagging metrics_reliable=false ('Unreliable: only 5 daily returns') — untestable. Root cause is the same supplementary-data-coverage gap confirmed across seven prior strategies this session: the cascade gate needs a 1h liquidation window above threshold, and only 10 valid entries occurred across six years, all in a recent ~2-month sliver, meaning the liquidations feed has no usable historical coverage and _liq_window() returns ~0 for nearly every bar before 2026-04 (matching the prior liquidation-cascade-continuation strategy, which fired 1 trade on the final day). The metrics are noise on n=10 (PF 0.36, expectancy -$99/trade, commission 36.8% of gross). Not optimize: a 3-phase optimization (walk-forward 3 windows + 15-day holdout) is impossible on 10 trades. Not iterate: the implementation is correct (causal windowed aggregation, side-aware parsing, magnitude-scaled sizing, ATR stop, no price-only fallback) and the blocker is structural historical coverage of the Binance liquidations feed — a data-engineering backfill task no parameter or code change can fix. FAILURE PATTERN: ALL Binance derivatives-state supplementary feeds (open_interest, top/global account L/S ratios, liquidations) lack multi-year history — only a recent ~2-month window is populated — so ANY strategy gating on them fires a handful of times in 2026 and zero before. This is now the EIGHTH consecutive identical data-gap abandon this session (OI-surge, OI-spike, OI-percentile, L/S-divergence, top-trader-L/S, liquidation-cascade-continuation, DOGE OI-acceleration, and this liquidation-cascade-reversal), across multiple symbols, timeframes, and mechanism framings — an unambiguous systemic data-engineering blocker, not a per-strategy issue. These mechanism classes MUST be shelved until the data engineer backfills historical open_interest, L/S-ratio, and liquidation data; the Research Lead should stop proposing ANY derivatives-state-data-primary hypothesis until multi-year coverage is confirmed, and the analyst's reliable-data-path guidance should explicitly blacklist open_interest, account-ratio, and liquidations feeds for historical strategies. Eight consecutive identical failures is conclusive: the supplementary positioning/liquidation data is not backtest-ready.
Implementation
Contrarian long/short on BTCUSDT.BINANCE 15-minute bars that fades liquidation cascades. Each bar it sums forced-liquidation USD per side over the trailing 1-hour window from the liquidations supplementary stream and measures the 1-hour price move; when one side's liquidation USD exceeds the threshold and price has moved sharply in the implied direction (longs liquidated + price down, or shorts liquidated + price up), it enters the opposite side expecting a 30-70% retrace. Position size scales with cascade magnitude (dominant-side USD / threshold, capped at 3x base, max 30% equity). Exits on the earliest of a take-profit, a hard ATR(14) x1.5 volatility stop (protects against trend-continuation cascades), or a ~3h max hold. Long-short, leverage 1.0, liquidations + OHLCV only (no price-only fallback).
Verification Results
Verification failed (Layer 2 — synthetic scenarios):
Parameters used: ['atr_period', 'min_notional', 'atr_stop_mult', 'cascade_mag_cap', 'take_profit_pct', 'max_position_pct', 'base_position_pct', 'fallback_stop_pct', 'liq_usd_threshold', 'price_move_thr_pct']
Check that __init__ sets all attributes from self.parameters.get().
- steady_uptrend: TypeError: BtcLiquidationCascadeReversalVolStopLS._to_ns() takes 1 positional argument but 2 were given (bar timestamp: 1735690500000)
- steady_downtrend: TypeError: BtcLiquidationCascadeReversalVolStopLS._to_ns() takes 1 positional argument but 2 were given (bar timestamp: 1735690500000)
- flat_ranging: TypeError: BtcLiquidationCascadeReversalVolStopLS._to_ns() takes 1 positional argument but 2 were given (bar timestamp: 1735690500000)
- volatility_spike: TypeError: BtcLiquidationCascadeReversalVolStopLS._to_ns() takes 1 positional argument but 2 were given (bar timestamp: 1735690500000)
- zero_volume: TypeError: BtcLiquidationCascadeReversalVolStopLS._to_ns() takes 1 positional argument but 2 were given (bar timestamp: 1735690500000)
- price_gap: TypeError: BtcLiquidationCascadeReversalVolStopLS._to_ns() takes 1 positional argument but 2 were given (bar timestamp: 1735690500000)
Backtest Review
Clean, correct implementation (causal windowed liquidation aggregation, side-aware, magnitude-scaled sizing, ATR vol-stop); sound contrarian-cascade thesis
Backtest Review
DECISIVE: only 10 trades in 902,208 bars, all in 2026-04-22 to 2026-06-25; metrics_reliable=false — the liquidations feed has no historical coverage, so the cascade gate never fires pre-2026-04
Backtest Review
Metrics meaningless on n=10 in ~2 months: PF 0.36, expectancy -$99/trade, commission 36.8% of gross; cannot support walk-forward + holdout optimization
Backtest Review
EIGHTH derivatives-state/liquidations strategy this session blocked by the identical recent-only coverage gap (open_interest x3, L/S ratios x2, liquidations x2, DOGE OI x1)
Outcome Summary
BtcLiquidationCascadeReversalVolStopLS proposed a clean, economically sound contrarian mechanism — fading forced-liquidation overshoots with cascade-scaled sizing and an ATR stop — with a correct causal, side-aware implementation. But it fired only 10 trades, all within a recent ~2-month window, because the liquidations feed has no usable historical coverage, leaving the metrics meaningless on n=10. This was the eighth consecutive Binance derivatives-state/liquidations strategy of the session blocked by the identical recent-only coverage gap — and the second liquidation-cascade variant — confirming a conclusive systemic blocker. The analyst abandoned it on its second iteration as a data-engineering backfill task no code change can fix, declaring eight identical failures unambiguous and recommending the Research Lead stop proposing derivatives-state-data hypotheses and blacklist open_interest, account-ratio, and liquidation feeds for historical strategies until multi-year coverage is confirmed.
Outcome Summary
All Binance derivatives-state supplementary feeds — open interest, account L/S ratios, and liquidations — currently lack multi-year history (only a recent ~2-month window is populated), so any strategy gating on them fires a handful of times in 2026 and never before; eight consecutive identical data-gap abandons across multiple symbols, timeframes, and mechanism framings is conclusive that this data is not backtest-ready.
Outcome Summary
The analyst abandoned it at the backtest-review gate before optimization because of the same supplementary-data-coverage gap confirmed across seven prior strategies this session: the cascade gate needs a 1h liquidation window above threshold, but the liquidations feed has no usable historical coverage, so the window aggregation returned ~0 for nearly every bar before 2026-04 and only 10 valid entries ever occurred — a structural data-engineering blocker, not a strategy flaw.
Outcome Summary
A long/short, single-instrument BTC 15-minute mean-reversion strategy that fades liquidation cascades — when forced-liquidation USD volume on one side spiked above a threshold within a trailing 1h window and price had moved sharply in the liquidations' implied direction, entering contrarian (long after a long-liquidation flush, short after a short-squeeze), with cascade-magnitude-scaled sizing, an ATR volatility stop, a take-profit, and a time stop, using the liquidations supplementary feed with no price-only fallback.
Outcome Summary
It was effectively untestable: the cascade gate fired only 10 trades across 902,208 15-minute bars, all confined to a ~2-month window (2026-04-22 to 2026-06-25), with the engine flagging metrics_reliable=FALSE and the metrics noise on n=10 (profit factor 0.36, per-trade expectancy -$99, total return -0.99%, win rate 40%, commission 36.8% of gross).
Backtest and paper results are hypothetical. Trading involves risk of loss.