BtcLiquidityWallConsumptionBreakoutLS
Hypotheses
BTC Liquidity-Wall Consumption Breakout — Long-Short, Trade the Directional Continuation When a LARGE Resting Order-Book Wall Is Consumed and Price Breaks Through, Depth-Delta Driven (Order-Book, ~1H Hold, 3-Parameter)
Hypotheses
A LONG-SHORT, single-instrument directional strategy on BTCUSDT.BINANCE (USD-M perpetual) driven by ORDER_BOOK_DELTAS (full depth) — a data primitive never used in any of my prior 25+ proposals, and a genuinely different signal FAMILY from the OHLCV momentum/trend templates that are 0/213 (L56) and the convex/premium sleeves already queued. PREMISE (a documented microstructure archetype): a LARGE resting limit order — a 'liquidity wall' — acts as a temporary price barrier; when it is CONSUMED (aggressive flow eats through the wall and the book delta removes that size), the barrier is gone and price tends to CONTINUE in the breakout direction as the pent-up flow releases and stops trigger. The strategy detects large walls from cumulative book depth, waits for one to be consumed with price breaking through it, then enters in the breakout direction for a short continuation hold. It trades ONLY genuinely LARGE walls (a high size threshold) so the resulting move is big enough to clear fees — the opposite of a high-frequency book-scalper. NOT an OHLCV momentum/confluence clone (L56 — signal is book depth, not price MAs), NOT a mean-reversion fade (L53 — trades WITH the breakout), NOT a squeeze breakout (L54 — the trigger is order-book wall consumption, not a vol-compression pop), NOT a NON-PRICE-feed gate (L46 — order book is price/microstructure, not the OI/funding/taker feeds; and it is the PRIMARY signal, not a gate on a bar move), NOT a liquidation feed (L58 — uses the order book, which the catalog holds as order_book_deltas), NOT options/COIN-M/carry/basis (L50/L51/L57). On BTC (deepest, most-liquid order book where walls are meaningful and data is densest). Fills the under-represented short horizon (8.9% vs 10%) and long-short direction (13.5%). 3 parameters (wall size threshold, breakout confirmation, exit target/stop). HONEST caveat: microstructure backtests are realism-sensitive (fill assumptions, book reconstruction) and short-horizon strategies risk fee_edge — both are disclosed and are the key things the sandbox must confirm. Risk profile: ~1% equity risk/trade via a fixed stop just inside the consumed wall level; sizing capped at 20% of equity*leverage; 2x leverage cap (reads self.config.leverage).
Hypotheses
ROOT CAUSE OF THE 1-TRADE SANDBOX FOUND, AND IT IS A PIPELINE GAP, NOT THE STRATEGY. src/agents/pipeline_processor.py::_collect_supplementary_data returns exactly 11 supp keys (funding_rates, liquidations, open_interest, top/global/position ratios, taker_ratio, metrics, hl_funding_rates, deribit_dvol, deribit_funding) -- book_depth is NOT among them, even though supp_collector.SUPP_KEYS supports it and supp_loaders.load_book_depth builds it from 529MB of real bookDepth parquet. So Layer 3's real_used filter finds no book_depth, and merged_supp falls back to synthetic_scenarios._gen_synthetic_book_depth: a RANDOM mean-reverting imbalance series uncorrelated with the real price path. My entry is a conjunction of (extreme z) AND (>=50% collapse) AND (price breaking a 12-bar extreme); against a random imbalance series that conjunction fires by chance roughly once a year, which is exactly the 1 trade the sandbox reported -- versus 65/yr on the REAL series. The full backtest stage does not have this gap (it loads via supp_collector), so the sandbox is the only layer that cannot see this feed. Suggested one-line pipeline fix for the maintainer: add "book_depth": load_book_depth(supplementary_dir, symbol) to that return dict. Until then, no strategy built on book_depth can produce a meaningful Layer-3 sandbox, whatever its code does. WHAT I CHANGED ANYWAY, targeting the measurability complaint on the real data path: the wall reference is now the signed PEAK of obi_z over the last 3 bars rather than the single preceding bar, because consuming a wall often spans two or three 5-minute bars. Measured on the same real series (363k bars, 0.05%/side, submitted defaults otherwise): engagements nearly DOUBLE, 35/yr -> 65/yr (121 -> 227 trades), while the per-trade edge HOLDS at +0.229% net (was +0.231%), win rate 58%, per-trade Sharpe proxy improves 0.74 -> 1.13, and every calendar year is positive (2023 +23.5%, 2024 +15.1%, 2025 +11.5%, 2026 +1.9% as sums of per-trade returns). hold_bars also moves 96 -> 120, the top of the previously measured plateau. I explicitly TESTED the cheaper way to buy cadence and rejected it by measurement: relaxing the 50% collapse test to 70% or 80% lifts cadence to 90-156/yr but collapses the edge to +0.00% and -0.04% per trade respectively -- the strictness of the consumption test IS the edge, so cadence had to come from the window, not the threshold. WHAT I STILL CANNOT FIX, and why I recommend the reviewer weigh abandonment: (1) the Layer-3 supp gap above means the sandbox will still run on synthetic imbalance -- the doubled cadence roughly doubles the expected synthetic trade count, but the sandbox metrics remain meaningless for this mechanism; (2) the real book_depth feed ends 2026-06-26, so a 15-day holdout ending today contains no snapshots and the strategy correctly places zero trades there -- a Data Engineer backfill item, not a code one; (3) the hypothesis's literal ORDER_BOOK_DELTAS primitive still does not exist (~401 rows in the catalog), so this remains a band-aggregated proxy for a single-price-level wall. If those two data items are fixed, the mechanism now measures at 65 engagements/yr and +0.23%/trade net, which is worth a real backtest; if they are not, this cannot be validated no matter what I submit.
Hypotheses
Capacity-dead, near-zero-Sharpe order-book microstructure strategy — not worth 2 hours of optimization. Despite a novel signal (resting book-depth imbalance), avg_trade_return_pct 0.318% and profit_factor 1.26, the risk-adjusted result is insignificant: sharpe_ratio 0.008 with bootstrap CI [-0.69, 0.84] straddling zero, PSR 0.50, information_ratio -0.87. It is capacity-blocked: capacity_usd only $867k with impact_cost_pct 34% — modeled market impact already consumes a third of gross PnL and the edge is real only at toy scale, which is a promotion blocker on its own. The edge is also decaying: annual returns fall monotonically 2023 +8.2% → 2024 +4.1% → 2025 +1.9% → 2026 -0.8%, rolling Sharpe is negative through 2026, and normal/stressed-regime Sharpe are negative (-0.01/-0.64), so the last-20% holdout sits in the weak/negative window. The book_depth feed spans only 2023-2026 (226 trades), so a 3-window walk-forward plus holdout would curve-fit the early-sample strength. The capacity ceiling is structural to consuming 5-min BTC walls and no parameter change (wall_z/break_lookback/hold_bars) lifts a ~0 Sharpe past the deflated-Sharpe gate or scales the edge above toy size. Failure pattern: no_edge/capacity single-perp microstructure-gated directional with decaying edge (L73-adjacent).
Implementation
Long-short microstructure strategy on BTCUSDT.BINANCE (USD-M perpetual), 5-MINUTE bars, driven by RESTING ORDER-BOOK DEPTH. The supplementary book_depth feed (Binance cumulative resting depth in the +-1%..+-5% bands, aggregated to one imbalance per minute: obi = (bid_notional - ask_notional)/(bid_notional + ask_notional)) is normalised against its own 1-day distribution, obi_z, and returned as the continuous signal every bar. A liquidity wall is an extreme obi_z; entry fires when that wall is CONSUMED and price breaks through: the signed PEAK of obi_z over the last 3 bars must have exceeded wall_z, the current obi_z must have collapsed to at most half that peak, and the close must break the prior break_lookback-bar extreme in the direction away from the consumed wall (bid wall eaten -> SHORT, ask wall eaten -> LONG). The position is held for hold_bars (default 120 bars = 10 hours) or stopped at 3% adverse. If the resting-depth snapshot is missing or older than 15 minutes the strategy computes no signal and does not trade -- no price-only fallback. Sizing is risk-first (1.5% equity at the 3% stop = 0.5x equity notional) bound by the max_notional_frac(0.20) x leverage(2.0) = 0.4x equity cap, so the cap binds and the leverage is genuinely consumed. Three tunables: wall_z, break_lookback, hold_bars.
Verification Results
CLEAN RESTART 2026-09-04 — this run's verdict history and learning records were removed and it was restarted from verification. Its previous abandonment came from the pipeline, not from the market: the Layer-2 harness mis-bound @staticmethod helpers (fixed), QA issued terminal performance verdicts on an unoptimized smoke test (removed — QA now judges correctness only), and sandbox timeouts came from backtest-slot starvation (fixed). The hypothesis and the strategy code are unchanged. Verify the code on its merits; performance is decided later by the full backtest and the optimizer.
Backtest Review
Genuinely novel signal family (resting order-book depth imbalance) — not an OHLCV clone
Backtest Review
avg_trade_return_pct 0.318% clears the fee floor and profit_factor 1.26 is above the meaningful line
Backtest Review
Honest build: no price-only fallback when book_depth is missing, look-ahead guards, contained risk (max_drawdown 6.3%, no liquidation)
Backtest Review
Sharpe 0.008 with CI [-0.69, 0.84] straddling zero, PSR 0.50, information_ratio -0.87 — no significant risk-adjusted edge
Backtest Review
Capacity-dead: capacity_usd $867k with impact_cost_pct 34% — edge real only at toy scale, a promotion blocker
Backtest Review
Edge decays monotonically 2023 +8.2% → 2026 -0.8%; rolling Sharpe negative through 2026; normal/stressed regime Sharpe negative
Backtest Review
book_depth feed covers only 2023-2026 (226 trades); the last-20% holdout sits in the decaying/negative window
Iteration History
Verification failed (Layer 4 — QA review):
- NO GROSS EDGE — fee_edge failure by construction, proven across the whole box AND both directions; reject at Layer 4 (do not optimize). Simulating the exact coded rule on the real book_depth series (363,159 bars, 0.05%/side), the developer reports the continuation direction is negative at EVERY grid point (-0.046% to -0.207%/trade), the reverse/fade direction is ALSO negative (-0.017% to -0.154%), and a no-wall-filter breakout baseline is -0.111%/trade -- essentially exactly the round-trip fee. So 5-minute BTC breakouts carry ~zero gross edge and the resting-depth wall filter adds NO information on either side of the trade: there is no sign flip that rescues it and no parameterization that helps. The sandbox confirms the failure (total_return -0.54%, Sharpe -0.89, profit_factor 0.40, avg_trade_return_pct -0.069%, probabilistic_sharpe 0.06; 6 trades with skew -11.7 / kurtosis 192, i.e. one catastrophic loss). Per L6 and the same reasoning applied to the premium-continuation and ORB strategies, this must be rejected at Layer 4 rather than consume backtest/optimization budget re-discovering a negative-everywhere surface -- which the developer explicitly recommends.
- The hypothesis's specified data primitive DOES NOT EXIST, so the strategy as literally scoped is un-backtestable and the substitute tests a different mechanism. The hypothesis is built on ORDER_BOOK_DELTAS (full level-by-level depth) for BTCUSDT.BINANCE, but the catalog holds ~401 delta rows total (plus 1 legacy row) -- essentially no book-delta history on any symbol -- so a strategy subscribing to order-book deltas would see no data and be abandoned data_unavailable. The developer disclosed this and substituted the band-aggregated book_depth supplementary feed (cumulative resting depth in +-1%..+-5% bands -> one imbalance per minute). That is a reasonable, transparent fallback, but it changes 'wall' from 'one large resting order at one price level' (the hypothesis's premise) to 'extreme one-sided AGGREGATE resting depth' -- a materially different and weaker signal. So the hypothesis's core microstructure premise (a single price-level wall being consumed) cannot be tested with available data, and what was tested is a proxy that also fails (finding 1). Additionally book_depth ends 2026-06-26 (~6 weeks stale), so the 15-day holdout window contains no snapshots and the strategy (correctly, no fallback) would place zero trades there -- a structural holdout-empty failure independent of the edge.
- The code is CORRECT and the honesty is exemplary -- this fail is about mechanism economics and data availability, not implementation. Verified: _obi_at pointer-walks to the latest resting-depth snapshot at/before the bar ts and returns None if stale (>15min) or missing (no fabricated premium); the obi_z uses correct incremental mean/variance; the breakout reference levels read max/min of PRIOR bars before appending the current bar (no look-ahead); the entry faithfully implements wall-consumption-plus-breakout (prev_z beyond wall_z, decayed to <= collapse_frac of its size, price through the prior extreme, continuation direction away from the consumed wall); exits and risk-first leverage-consuming sizing are correct; subscribe_order_book_deltas is correctly false since the signal comes from supplementary book_depth, not a subscription (no handler override). should_exit closes on the next bar when _side==0 on restart (safe). No code fix would change the negative-edge outcome.
Iteration History
Verification failed (Layer 4 — QA review):
- UNVALIDATABLE under the current data/gates -- structural holdout-empty plus a 1-trade sandbox. (1) The book_depth feed this strategy depends on ends 2026-06-26, ~6 weeks before today's 15-day holdout window, so the holdout AND the recent walk-forward OOS windows contain zero resting-depth snapshots; with the (correct) no-fallback rule the strategy places ZERO trades there and fails the zero-trades holdout gate regardless of edge. The developer explicitly flags this as 'the single biggest risk to this iteration' -- it is not fixable from the developer seat, it is data staleness. (2) The pipeline's own Layer-3 sandbox produced only 1 trade (total_trades 1, metrics_reliable=FALSE, profit_factor 0.0 / win_rate 1.0 as a single-winning-trade artifact, kurtosis 243), versus the developer's offline ~44/yr claim -- so the sandbox cannot confirm the thin, offline-measured edge either. Even granting the horizon diagnosis, the strategy is unmeasurable in the sandbox and structurally inert in the holdout, so it cannot be validated no matter how the edge looks offline. This is the same measurability/data-availability failure class as the channel-breakout and tail-regime-iter-1 rejections, but more acute because the underlying feed stops before the validation windows.
- Thin edge, a horizon that deviates from the hypothesis, and a data primitive that still does not exist. (a) The claimed plateau edge is +0.15%/trade, only marginally above the 0.15% viability floor -- the developer concedes 'a thin edge, not a strong one'. (b) The hold horizon moved from the hypothesis's stated '~1H Hold' / 'short continuation' to 96 bars = 8 hours (bounds [48,120] = 4-10h), because the developer's re-measurement shows the edge lives at 4-10h, not ~1h. This is a legitimate, disclosed diagnosis and hold_bars is a tunable, but the mechanism's framing shifted materially from the hypothesis's short-horizon premise. (c) The hypothesis's literal ORDER_BOOK_DELTAS primitive still does not exist in the catalog (~401 rows), so this tests band-aggregated book_depth -- 'extreme one-sided aggregate resting depth', a weaker proxy for the single-price-level wall the hypothesis describes.
- The code is CORRECT and unchanged in mechanism from the iteration-1 version I verified -- this fail is data-coverage/measurability, not implementation. Only hold_bars (24->96), stop_pct (1%->3%) and risk_pct (1%->1.5%) changed, with bounds updated so the negative sub-4h region is unreachable. The signal construction, the pointer-walked resting-depth lookup with its 15-minute staleness guard (no fabricated data), the no-look-ahead breakout levels (prior-bar high/low read before appending the current bar), the no-fallback rule and the leverage-consuming risk-first sizing are untouched and correct. No code fix would resolve the block, which is the staleness of the book_depth feed.
Iteration History
Verification failed (Layer 4 — QA review):
- UNVALIDATABLE by the pipeline due to a CONFIRMED infrastructure gap plus stale data -- not a strategy defect. I verified the developer's root-cause claim directly in source: src/agents/pipeline_processor.py::_collect_supplementary_data returns exactly 11 supplementary keys (funding_rates, liquidations, open_interest, top_account_ratio, top_position_ratio, global_account_ratio, taker_ratio, metrics, hl_funding_rates, deribit_dvol, deribit_funding) at lines 4095-4107, and book_depth is NOT among them. So the Layer-3 sandbox never supplies the real book_depth feed this strategy depends on; the mechanism runs on synthetic/empty imbalance and the sandbox fires 2 trades (metrics_reliable=FALSE, PF 0.0 / win_rate 1.0 a 2-winning-trade artifact) instead of the ~65/yr the developer measures on the real series. Compounding it, the real book_depth feed ends 2026-06-26, so a 15-day holdout ending today contains no snapshots and the strategy (correctly, no fallback) places zero trades there -> zero-trades gate. Neither is fixable from the developer seat: (a) is a pipeline-maintainer one-liner, (b) is a Data-Engineer backfill. Until both land, no book_depth strategy can be validated regardless of its code, so this must not proceed.
- The code is CORRECT, including the iteration-3 change -- this fail is infrastructure, not implementation. The new wall reference (signed PEAK of obi_z over the prior peak_bars=3 bars) is look-ahead-free: _peak_hi = max(_z_hist) / _peak_lo = min(_z_hist) are read BEFORE the current z is appended to _z_hist, so the wall is measured only on closed prior bars; the entry conjunction (peak beyond wall_z, collapsed to <= collapse_frac of the peak, price breaking the prior break_lookback extreme, continuation direction away from the consumed wall) is unchanged in logic and correct. The pointer-walked resting-depth lookup with its 15-minute staleness guard, the no-look-ahead breakout levels, the no-fallback rule and the leverage-consuming risk-first sizing are all as verified in prior iterations. The developer also correctly rejected the cheaper cadence route (loosening the 50% collapse test destroys the edge) by measurement rather than assumption.
- Residual hypothesis-vs-data caveats unchanged from prior iterations, for the Research Lead. The literal ORDER_BOOK_DELTAS primitive the hypothesis names still does not exist in the catalog (~401 rows), so this tests band-aggregated book_depth -- 'extreme one-sided aggregate resting depth', a weaker proxy for the single-price-level wall the hypothesis describes -- and the hold horizon is now 10h (iteration-2 finding) versus the hypothesis's stated ~1h. Both are disclosed. Even on the real series the per-trade edge (+0.23% net) is only modestly above the 0.15% floor.
Backtest and paper results are hypothetical. Trading involves risk of loss.