BnbTakerFlowAbsorptionReversalLS
Hypotheses
BNB USD-M Taker-Flow Absorption Reversal, Long-Short (Single Instrument BNBUSDT.BINANCE Perp, 1h Bars, Trade the 'Effort-vs-Result' Divergence — Enter When Aggressive Taker Flow SPIKES in One Direction but Price FAILS to Follow = Absorption by Hidden Liquidity, Symmetric ATR Exit, 3-Parameter)
Hypotheses
A LONG-SHORT, single-instrument reversal on BNBUSDT.BINANCE (USD-M perp, 1h bars) built on an ORDER-FLOW ABSORPTION signal from the taker buy/sell volume feed (takerBuySellVolume, catalogued multi-year via Binance metrics) — a data source none of my prior proposals or the in-pipeline set uses. The mechanism is the classic Wyckoff 'effort vs result' divergence: when aggressive market SELLING spikes to an extreme (taker-sell volume dominates) yet price REFUSES to make a lower low and closes in the upper part of its bar, the forced selling is being absorbed by hidden resting demand — a bullish tell — so go LONG; mirror for a taker-BUY spike that fails to make a higher high (supply absorption) → SHORT. This is deliberately distinct from every dead/in-pipeline family: NOT price/VWAP z-reversion (the trigger is a flow/price DIVERGENCE, not a price deviation), NOT the volume-spike capitulation flush (that fired on a raw volume z-spike with a fixed reversion take-profit that clipped winners; this fires on directional TAKER-flow absorption and uses a symmetric ATR exit), NOT crowding fades on OI/premium/L-S ratios (different feed — aggressor flow), NOT liquidation-feed dependent (multi-year taker feed, no 90-day wall), NOT breakout/trend, and NOT funding-carry or cross-sectional rotation. It adds to the under-represented long-short bucket (14% vs quota) with a fresh microstructure feed.
Hypotheses
Fixes the two concrete Layer-4 defects. (1) ASYMMETRY (the faithful-implementation failure, 17:1 short skew): iter-1 z-scored the RAW buy/sell ratio, which is right-skewed and bounded at 0, so the SHORT tail (ratio >> mean) captured the fat right tail and fired constantly while the LONG tail (ratio near 0) was structurally unreachable — leaving the long half untested and letting BNB drift dominate the -8.2% result. The minimal principled fix is to z-score a SYMMETRIC transform of the flow: the order-flow imbalance (ratio-1)/(ratio+1), which maps (0,inf) onto (-1,+1) symmetric about 0, so the two z-tails are balanced and the book becomes a genuine symmetric long-short as the hypothesis intends. This needs no new import (pure arithmetic) and changes only the sampled quantity fed to the identical z-score. (2) BRACKET SEEDING: the divergence block (which writes _last_trap) is now gated on `pos is None`, matching the SOL OI-surge sibling fix, so a new divergence on the bar immediately after entry can no longer overwrite the open trade's stop/target before _track_position seeds it. (3) FEE/EDGE: I raised flow_z 1.5 -> 2.0 (a tuned param) to require higher-conviction flow extremes, roughly halving the 84.5 turnover and lifting per-trade edge toward the fee floor; with the symmetry fix the realized book will be balanced so the absorption edge — not directional drift — is what gets measured. Everything else that passed Layers 1-3 is unchanged: the metrics/taker_ratio reading machinery (symbol-filtered, ms->ns, nearest-preceding lookup with staleness, no look-ahead), the flow-mandatory gate (missing data -> no trade), single-instrument base dispatch, entry-only-while-flat, the symmetric ATR bracket, and conservative 1%-risk / 0.5x-gross / leverage-1.0 sizing that cannot liquidate. Imports remain clean (no additions). Kept to exactly 3 tuned parameters.
Hypotheses
No fee-clearing edge: avg_trade_return_pct 0.135% is below the 0.15% futures fee floor (L22, disqualifying at review on its own) and dollar-weighted expectancy is negative (-$51/trade). The iter-2 symmetry fix worked — 456 well-sampled, balanced trades (227 long / 229 short) — so the now-balanced book gives a decisive verdict: net loser with profit_factor 0.839, Sharpe -0.042 (CI [-0.75, 0.57]), total_return -23.4%, and inverted reward/risk (avg_loss $629 > avg_win $542, both sides losing). This is the classic fee_edge signature: gross edge ~0, costs push it negative, so the taker-flow 'effort-vs-result' absorption divergence has no directional edge on BNB (net-negative across the window; 2022 -9%, 2023 -4.3%, 2024 -15.3% dominate). This is already iteration 2 — the developer fixed the skew and measurability, and the balanced result is unprofitable. Optimizing flow_z/close_frac/exit_atr cannot lift a 0.135%-per-trade, PF-0.84 mechanism above the ~0.10% round-trip — it would only overfit scattered good windows. The aggressor-flow feed is a genuinely novel idea, but the measured edge is a below-fee-floor net loser with no parameter region that clears costs. Abandon.
Implementation
Long-short intraday order-flow absorption reversal on BNBUSDT.BINANCE (USD-M perp), 1h bars, using the taker buy/sell volume ratio from the multi-year Binance metrics feed. Each bar samples the aggressor ratio, converts it to the SYMMETRIC order-flow imbalance (ratio-1)/(ratio+1) in (-1,+1), and z-scores that against its own rolling 48-bar history. LONG when sell flow spikes (z <= -flow_z=2.0) yet price closes in the upper part of its bar (close_pos >= 0.6) — demand absorption; SHORT on the mirror (buy spike z >= +2.0 closing in the lower part) — supply absorption. Divergence detection is gated on being flat so a fresh signal cannot corrupt an open trade's bracket. Every trade uses a symmetric ATR bracket (target/stop both exit_atr=2.0 x ATR) plus a 12-bar time cap. Sizing risks 1% of equity over the stop, capped at 0.5x equity gross (leverage 1.0). 3 tuned params (flow_z, close_frac, exit_atr).
Verification Results
Verification failed (Layer 4 — QA review):
- The strategy does NOT implement the hypothesis's SYMMETRIC long-short absorption reversal — the realized book is 94% short (long_trades 7 vs short_trades 119, a 17:1 skew). Root cause is a signal-methodology defect: calculate_signal z-scores the RAW taker buy/sell ratio, which is right-skewed (bounded at 0 with a long right tail), so the SHORT condition (z ≥ +flow_z, ratio far ABOVE mean) captures the fat right tail and fires constantly while the LONG condition (z ≤ -flow_z, ratio near 0) is structurally rare → only 7 longs. The hypothesis's premise is a symmetric 'effort vs result' fade in BOTH directions (and its stated purpose is a balanced long-short book), but the long half is effectively untested and the -8.2% result is dominated by BNB's directional drift, not the absorption edge. A faithful-implementation failure, not merely a performance outcome.
- Intermittent bracket-seeding bug (the pattern fixed in the SOL OI-surge sibling but NOT applied here). _last_trap is set in calculate_signal whenever a divergence fires WITHOUT gating on flat, so a new divergence on the bar right after entry (before _track_position seeds the position) seeds the open trade with the wrong stop/target. With 126 trades and high signal frequency this bites more often than in the low-frequency siblings. Not a blow-up (0.5x cap), but a real defect.
- Even aside from the asymmetry, the result is a high-turnover net loser: PF 0.803, total_return -8.2%, avg_trade_return_pct +0.056% (net-positive equal-weighted but below the 0.15% floor and dollar-negative), turnover 84.5, Sharpe -0.31. After the symmetry fix the edge must still be shown to clear fees; the current numbers do not.
Verification Results
Analyst to decide optimize/iterate/abandon. If iterated, the lever is signal quality (flow_z / close_frac / divergence definition), not the exit structure, which is already fee-viable by construction.
Verification Results
Sandbox realized edge is below the futures fee floor: avg_trade_return_pct 0.112% (< 0.15%), profit_factor 0.857, total_return -2.43%, Sharpe -0.37 (CI [-2.06, 1.14]) over 54 trades. This is a PERFORMANCE/edge outcome, not a code defect — the designed exit is a symmetric 2-ATR bracket (~2-5% on 1h BNB), which structurally clears the ~0.10% round-trip, so the intended per-trade move is well above fees. The below-fee RESULT means the absorption signal isn't producing a net edge, which is the analyst's call at BACKTEST_REVIEW, not a QA correctness failure. After the iter-2 symmetry fix the book is now balanced, so this is a clean read of the signal's true (near-zero/slightly-negative) edge rather than a drift artifact.
Verification Results
Analyst should confirm the full-window trade count clears the measurability floor before treating the negative edge as conclusive.
Verification Results
Total trades = 54 over 363 days is on the low side of the measurability floor (~100). metrics_reliable=true and the long/short split is balanced, so the result is interpretable, but the sample is thin enough that the negative edge estimate carries wide error (Sharpe CI spans zero). Reported capacity_usd $3,100 / impact_cost_pct 567% appear to be small-capacity-assumption artifacts (BNB perp is highly liquid), not a code issue.
Backtest Review
Iter-2 symmetry fix worked: 456 well-sampled trades, balanced 227 long / 229 short (no more 17:1 short skew); novel taker-flow feed loads and fires cleanly with no liquidation.
Backtest Review
Balanced book means the negative result is a genuine, decisive verdict rather than a one-sided artifact.
Backtest Review
avg_trade_return_pct 0.135% is below the 0.15% futures fee floor and dollar-weighted expectancy is negative (-$51/trade).
Backtest Review
Net loser: profit_factor 0.839, Sharpe -0.042 (CI [-0.75, 0.57]), total_return -23.4%, PSR 0.449.
Backtest Review
Inverted reward/risk: 49.3% win rate with avg_loss $629 > avg_win $542; both sides lose (long_win 52%, short_win 47%).
Backtest Review
Net-negative across the window (2022 -9%, 2023 -4.3%, 2024 -15.3% dominate).
Backtest Review
Classic fee_edge signature — gross edge ~0, costs push it negative; iteration 2 already, now confirmed no-edge.
Outcome Summary
This strategy tested whether aggressive taker-flow spikes that price fails to follow signal hidden-liquidity absorption, going long on absorbed selling and short on absorbed buying across BNB perps. Iteration 2 fixed a prior 17:1 short skew by z-scoring a symmetric order-flow imbalance, which worked — producing 456 balanced trades (227 long / 229 short) with no liquidation. But the balanced book revealed a genuine no-edge result: total return -23.4%, Sharpe -0.042, profit factor 0.839, inverted reward/risk, and per-trade return of just 0.135% — below the 0.15% futures fee floor. The analyst abandoned it at backtest review before optimization, judging the taker-flow absorption divergence a below-fee-floor net loser with no parameter region able to clear trading costs.
Outcome Summary
A genuinely novel feed (aggressor taker flow) and a fixed sampling skew still don't create a directional edge; if gross per-trade return sits at ~0.13% against a ~0.10% round-trip cost, the mechanism has no fee-clearing edge and optimization would only overfit.
Outcome Summary
The analyst abandoned it at the pre-optimization backtest-review gate: the iteration-2 symmetry fix produced a balanced book, making the negative result a decisive verdict rather than a one-sided artifact, with per-trade return below the fee floor and no parameter region capable of clearing round-trip costs — so optimization was never run.
Outcome Summary
A single-instrument, long-short 1h reversal on BNBUSDT.BINANCE perps that fades aggressive taker-flow spikes when price refuses to follow (a Wyckoff 'effort-vs-result' order-flow absorption divergence off Binance's multi-year taker buy/sell volume feed), using a symmetric ATR bracket exit.
Outcome Summary
Over 2,358 days (2020-2026) it took 456 well-sampled, balanced trades (227 long / 229 short) but was a net loser: total return -23.4%, Sharpe -0.042 (CI [-0.75, 0.57]), profit factor 0.839, win rate 49.3% with avg loss $629 exceeding avg win $542, and expectancy of -$51/trade. Its avg_trade_return_pct of 0.135% fell below the 0.15% futures fee floor.
Backtest and paper results are hypothetical. Trading involves risk of loss.