Skip to content

View original

EthTrendParticipationLiquidationClimaxExitLS

Hypotheses

Trend Participation with Forced-Flow Climax Exit — Liquidations as a Blow-Off Take-Profit Signal, Single-Instrument Long-Short (ETHUSDT.BINANCE USD-M, 4H Bars + LIQUIDATIONS Feed — Ride an Established Trend but Bank Profit When a Large SAME-Direction Liquidation Cluster Marks an Exhaustion Climax; ATR Trailing Backstop, 3-Parameter)

Hypotheses

A LONG-SHORT, SINGLE-INSTRUMENT, SINGLE-VENUE strategy on ETHUSDT.BINANCE USD-M perpetual (~0.10% RT taker) whose novelty is the EXIT, not the entry. The one thing that survives in this factory is well-risk-managed trend participation (the deployed dual-TF momentum survivor); every attempt to find an edge in the ENTRY signal from orthogonal feeds (funding, OI, L/S ratio, taker flow, liquidation reversal) has been falsified. So this strategy takes the proven side — trend participation — but attacks the part of trend-following that actually loses money: giving profit back at the turn. It uses the LIQUIDATIONS feed (the most complete, definitely-in-sandbox Binance liquidations series) in a role NO prior strategy has used — as a CLIMAX / blow-off exit signal. Mechanically, the final leg of a trend is where the trapped opposite side is force-liquidated en masse: in a mature uptrend, a large SHORT-liquidation cluster (shorts capitulating into strength) marks a buying climax / local top; in a downtrend, a large LONG-liquidation cluster marks a selling climax / local bottom. When a same-direction-as-our-trend liquidation cluster hits a statistical extreme, the strategy banks the position into that forced-flow spike (selling into euphoria / covering into panic — the best possible fill) rather than waiting for a trailing stop to give back the last swing. This is deliberately a different family from my other pipeline items (liquidations here are an EXIT climax signal, not a counter-trend capitulation ENTRY and not a slow sentiment oscillator) and from the falsified liquidation overshoot-reversal (it never fades a cascade; it exits a winning trend into one). Trend holds run for days, per-trade moves are multiple percent, and trades are few — structurally fee-safe. 3 parameters resist overfit.

Hypotheses

Iteration 4 fixes ONLY the QA blocker (hypothesis_mismatch: timeframe). The hypothesis pre-registers 4H bars; iteration 3 had moved to 1-HOUR purely to raise trade density. I cannot edit the hypothesis text, so I took QA's alternative fix: config.bar_type is back to ETHUSDT.BINANCE-4-HOUR-LAST-EXTERNAL and every horizon is un-scaled to its 4H value (fast 10, ATR 14, flush 1 bar, liq z window 42, min z samples 30). Signal logic, climax measure, sizing, imports and class structure are byte-for-byte unchanged, so Layers 1/1.5/2/3 that already passed stay passing (Layer 1.5 now also agrees on venue+timeframe). Because the bar grid is pinned by the hypothesis, the only remaining lever on sample size (the earlier 4H concern: ~14 trades in the accrued ~100-day liquidation window) is entry frequency, so trend_lookback_bars is 40 rather than 60 bars and entry_atr_mult is 0.35 rather than 0.50 — both loosen how 'established' a trend must be while leaving holds multi-day and the 3xATR trail untouched, so per-trade moves stay in the multiple-percent band the hypothesis advertises, far above the ~0.10% USD-M round trip. One honest caveat for the analyst: the liquidations series is live-accrued (~100 days for ETHUSDT), so the evaluable window is bounded by feed coverage regardless of backtest span; the strategy deliberately stands aside when the climax measure is unmeasurable rather than degrading into a plain MA trend follower.

Hypotheses

data_wall / unmeasurable — the edge cannot be validated with existing data, not an overfit or fee-edge death. The liquidations feed is live-accrued (~135 days for ETHUSDT) and the strategy deliberately (and correctly) takes NO position on any bar lacking the climax measure, so the entire 3-phase optimization ran over history the feed does not cover: all 36 trades fall in 2026-05→2026-09, every walk-forward window (2019–2024) scored IS 0.0 / OOS 0.0, and the holdout (2024-04→2025-05) took 0 trades. The three unwaivable HARD gates (is_overfitted, OOS ≤ 0, holdout ≤ 0) are therefore zero-coverage artifacts, not measured failure, so a promote is impossible AND the negative gates are not diagnostic. On the only tradeable window the result is not significant (deflated_sharpe 0.822 < 0.95, is_significant=false, Sharpe CI [-2.06, 4.14] straddles zero, fails programme FDR), and the framework's own oos_vault flags it UNDERPOWERED ('~100 trades expected … below the 100 needed for inference … treat forward paper trading as its real out-of-sample'). Iteration cannot fix this: no parameter change conjures historical liquidation data, and the strategy already restricts itself to the accrued window; optimizing over 28–36 trades only curve-fits noise (optimization already cut Sharpe 2.09→1.45). This is a DATA verdict, not an edge verdict — revive and re-run the identical mechanism once the accrued ETHUSDT liquidation history is long enough (~1.5–2 years) to support a real walk-forward + holdout. abandon_class = data_wall/unmeasurable.

Implementation

Long-short trend participation on ETHUSDT.BINANCE USD-M 4H bars whose novelty is the EXIT. Entry is ordinary trend participation: the fast-minus-slow SMA spread measured in ATR units (continuous every bar), long above +0.35 ATR, short below -0.35 ATR. The exit uses the Binance LIQUIDATIONS feed as a blow-off climax marker: while long it watches SHORT-liquidation intensity (trapped shorts force-buying = buying climax), while short it watches LONG-liquidation intensity (trapped longs force-selling = selling climax). Intensity is a rolling z of log1p(USD liquidated) in the trailing flush window against the instrument's own recent liquidation distribution, so the trigger is scale-invariant. When that z reaches climax_z and the position is in profit, the position is banked INTO the forced flow rather than waiting for a stop. A 3x ATR trailing stop from the best close since entry is the backstop for trends that roll over quietly. Entries are blocked while a same-direction climax is still printing (reuses climax_z, no fourth knob) and are taken only on bars where the liquidation feed actually covers the climax measure, so every trade genuinely tests the hypothesis. Three tunables: trend_lookback_bars, climax_z, atr_trail_mult.

Verification Results

If the base template consumes min_bars_required() for warmup, no change needed. Otherwise the intended warmup horizon may be ignored — verify against base_template.

Verification Results

min_bars_required(self) overrides/shadows the framework base method (Layer-1 base_shadow warning). This appears deliberate (the strategy needs a warmup covering trend_lookback + ATR), and it returns a sane value, but confirm the base engine honors the override rather than its own implementation for warmup gating.

Verification Results

The strategy trades ONLY on bars where the live-accrued liquidations feed covers the climax measure (~100 days for ETHUSDT), and stands aside otherwise. So the evaluable window and trade count are bounded by feed coverage regardless of backtest span — sandbox produced 27 trades over 134 days. This is measurable but a modest sample; the analyst should judge the real-backtest edge with the understanding that trade count cannot grow beyond the accrued liquidation history, and that the sandbox headline (Sharpe 2.58, PF 2.67, avg_trade_return_pct 1.52%) is a single unoptimized draw on the accrued window.

Backtest Review

avg_trade_return_pct 1.29% is ~9x the 0.15% Binance USD-M fee floor; commission is only 4.88% of gross — the multi-day holds are structurally fee-safe exactly as the hypothesis promised.

Backtest Review

Trades match the mechanism: long-short trend participation (16 long / 12 short), long_win_rate 0.81, PF 2.19, Sharpe 2.09, Sortino 3.02, and a very low 2.36% max drawdown consistent with banking into the climax rather than giving back the last swing.

Backtest Review

Not an artifact: Sharpe ~2 is plausible, end_unrealized_pct ~0 (headline is realized), metrics_reliable=true, positive alpha 0.20 with beta ~0, and regime_performance is positive across calm/normal/stressed.

Backtest Review

Only 28 trades over 135 days — the evaluable window is structurally capped by the live-accrued liquidations feed (~100 days), so walk-forward windows and the holdout will be thin and prone to noise-fitting. This is the key risk the 3-phase run must survive.

Backtest Review

sharpe_ci_low -1.169 straddles zero on this short sample (expected at n=28; a promotion-stage concern, not a review blocker).

Analysis

Strategy is well-built and matches its hypothesis: long-short trend participation (21 long / 15 short optimized) that banks winners into the opposite side's liquidation climax, with an ATR trailing backstop. Trades implement the stated mechanism.

Analysis

Fee-safe as promised: optimized avg_trade_return_pct 0.78% is ~5x the 0.15% USD-M floor and commission is only 5.49% of gross. Multi-day holds (avg 2d 6h) keep it clear of the round trip — NOT a fee_edge death.

Analysis

On the ONLY window it can trade (~135 days, 2026-04→2026-09), metrics look healthy: PF 1.53, DD 5.08%, win_rate 0.58, positive across all three vol regimes.

Analysis

The strategy is UNVALIDATABLE with available data. The liquidations feed is live-accrued (~135 days for ETHUSDT), so the entire 3-phase optimization ran over dead history: all three walk-forward windows (2019–2024) returned IS 0.0 / OOS 0.0 and the holdout (2024-04-15→2025-05-11) took 0 trades / Sharpe 0.0 — because the strategy correctly stands aside where the climax measure is unavailable. All three UNWAIVABLE hard gates (is_overfitted=true, OOS ≤ 0, holdout ≤ 0) are mechanical artifacts of zero data coverage, not measured degradation.

Analysis

The framework's own oos_vault declares the strategy underpowered: '~100 trades expected in the vault, below the 100 needed for inference … No slice of history short enough to leave training data is long enough to validate a strategy this slow — treat forward paper trading as its real out-of-sample.'

Analysis

The in-window edge is not statistically significant: deflated_sharpe 0.822 < 0.95, is_significant=false, Sharpe CI [-2.06, 4.14] straddles zero heavily, does not survive programme-level FDR (keeps 3 of 234). 28–36 trades is too few to distinguish edge from a favorable recent regime.

Analysis

Optimization DEGRADED the result (Sharpe 2.09→1.45, PF 2.19→1.53), a sign the pre-opt numbers were fitting a single short favorable window rather than a stable mechanism.

Analysis

The liquidation-signal family is 0/N in this factory (5 near-siblings all abandoned: overfit, fee_edge, data_unavailable, other).

Analysis

Backtest gate: - metrics unreliable: 64 trades / 134 data days is too little evidence (need >=5 trades over >=10 days) — increase signal frequency or widen the window

Analysis

Benjamini-Hochberg at q=0.10 over 234 programme candidates keeps 3. 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 2 — synthetic scenarios): Parameters used: ['climax_z', 'fast_bars', 'atr_period', 'min_notional', 'min_z_samples', 'atr_trail_mult', 'entry_atr_mult', 'risk_per_trade', 'flush_window_bars', 'liq_z_window_bars', 'max_notional_frac', 'trend_lookback_bars'] Check that __init__ sets all attributes from self.parameters.get(). - steady_uptrend: TypeError: EthTrendParticipationLiquidationClimaxExitLS._z() takes 1 positional argument but 2 were given (bar timestamp: 1735712820000) - steady_downtrend: TypeError: EthTrendParticipationLiquidationClimaxExitLS._z() takes 1 positional argument but 2 were given (bar timestamp: 1735712820000) - flat_ranging: TypeError: EthTrendParticipationLiquidationClimaxExitLS._z() takes 1 positional argument but 2 were given (bar timestamp: 1735712820000) - volatility_spike: TypeError: EthTrendParticipationLiquidationClimaxExitLS._z() takes 1 positional argument but 2 were given (bar timestamp: 1735712820000) - zero_volume: TypeError: EthTrendParticipationLiquidationClimaxExitLS._z() takes 1 positional argument but 2 were given (bar timestamp: 1735712820000) - price_gap: TypeError: EthTrendParticipationLiquidationClimaxExitLS._z() takes 1 positional argument but 2 were given (bar timestamp: 1735712820000)

Iteration History

Verification failed (Layer 4 — QA review): - STRUCTURALLY UNMEASURABLE SAMPLE — the evaluable window is capped by the same ~103-day live-accrued liquidation feed that blocked the three sibling strategies. By design (correctly), the strategy takes NO position on any bar where the climax measure is unavailable, so entries are confined to the accrued liquidation history regardless of the 363-day backtest span. On 4H bars that yields ~14 trades (sandbox: exactly 14), and that is the CEILING, not a sandbox artifact — a full backtest cannot produce more. 14 trades cannot populate the 3-phase optimization: a 3-window walk-forward gives ~4-5 trades/window and the 15-day holdout gives ~2, so the holdout gate (OOS Sharpe >= 70% of WF OOS) and the overfit/PBO gates cannot be evaluated on a meaningful sample. The sandbox result, though positive, is not statistically distinguishable from noise: Sharpe 0.62 with CI [-1.14, 2.25] straddling zero, probabilistic_sharpe 0.78, and return_kurtosis 25.3 with largest_win $3,981 vs avg_win $880 — the +3.3% total is dominated by a single outlier trade, so the edge does not survive removing one observation. This is the identical data-layer constraint (feed starts 2026-04-21 for all symbols; Binance discontinued the Vision liquidationSnapshot backfill) that has now blocked four liquidation-feed hypotheses.

Iteration History

Verification failed (Layer 4 — QA review): - NEGATIVE EDGE IN THE INDEPENDENT SANDBOX + UNPROVEN CORE MECHANISM — ABANDON. The 4H->1H resolution change did raise the sample (14 -> 43 trades) but the authoritative Layer-3 sandbox contradicts the developer's offline +0.476%/trade claim: it comes back NET NEGATIVE — total_return -0.31%, Sharpe -0.20 (CI [-1.90, 1.45]), profit_factor 0.97, expectancy -$7.12/trade, avg_trade_pnl_usd -7.12, and avg_trade_return_pct 0.098% which is BELOW the 0.15% futures floor and barely at the ~0.10% round-trip cost. The offline grid the developer measured (+0.23% to +0.61% across cells) did not reproduce under the sandbox's real fee/fill handling, and the sandbox is the trusted measurement. Compounding this, the developer's OWN control test is decisive: removing the climax exit and keeping ONLY the trailing stop yields a HIGHER per-trade return (+0.773% on 33 trades) — meaning the hypothesis's entire novelty (the liquidation-climax take-profit) is not adding value even on the favorable offline sample. The developer explicitly stated the honest conclusion in that case is to abandon rather than optimize; the negative sandbox now makes that conclusion firm. - The finer 1H grid collapsed capacity: sandbox reports capacity_usd ~$9,857 and impact_cost_pct 318% (total_impact_usd $446 against a -$306 net result), versus the 4H version's $137M capacity. Turnover rose to 18x. Even setting aside the negative edge, this turnover/impact profile is a serious real-money viability problem — the impact cost alone exceeds the entire PnL swing at the $100k backtest scale.

Iteration History

Verification failed (Layer 4 — QA review) [class=hypothesis_mismatch]: - [edge_concern] Advisory, does not drive the verdict: on the 1H grid the per-trade edge is thin. Sandbox avg_trade_return_pct is 0.17% (barely above the 0.15% BINANCE USD-M round-trip floor), profit_factor 1.04, and the equity-curve Sharpe is effectively zero (the reported -0.11 is flagged incoherent vs +0.71% total return). The developer's own note shows per-trade net dropped from ~1.19% (4H) to ~0.48% (1H), so the '(multiple percent per trade, structurally fee-safe' claim in the hypothesis no longer holds at this resolution. Separately, because entries are gated on liquidation-feed availability (~103 accrued days for ETHUSDT), the evaluable window is bounded to the recent past regardless of backtest span; the 1H move raised trade DENSITY (63 trades in the smoke test) which is now plausibly adequate, but a full-history walk-forward + holdout still draws from only ~100 days of liquidation coverage. Both points are for the analyst to judge on real backtest numbers, not blockers. - [critical] Timeframe contradiction between hypothesis and config. The hypothesis states '4H Bars' explicitly and repeatedly in its title ('4H Bars + LIQUIDATIONS Feed', '4H'), but config.bar_type is ETHUSDT.BINANCE-1-HOUR-LAST-EXTERNAL (1-HOUR). Layer 1.5 already flagged this. Per the QA timeframe rule, the hypothesis's stated bar timeframe must equal config.bar_type. The developer's iteration-3 rescaling (all horizons multiplied x4 to keep calendar lengths identical) is a legitimate and transparent design choice, and the code is otherwise a faithful, correct implementation of the liquidation-climax-exit mechanism on the correct instrument and direction. But the hypothesis AS WRITTEN declares a 4H bar type the code does not run, and the shift is not purely cosmetic: the developer's own measurement shows the per-trade edge falling from ~1.19% (4H) to ~0.48% (1H), materially eroding the fee-safety margin the hypothesis advertises. The text and the config must be reconciled before this run is trusted. (line 1) — fix: Reconcile the hypothesis text with the config. Cleanest fix (given the rescaling is faithful and was done for measurability): revise the hypothesis to declare 1-HOUR bars with the rescaled horizons, so the pre-registered timeframe matches what is actually traded. Alternatively, set config.bar_type back to ETHUSDT.BINANCE-4-HOUR-LAST-EXTERNAL with the 4H horizons. No change to the signal, climax measure, or three tunables is required either way.
Strategy report

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