Skip to content

View original

SolTakerFlowAbsorptionReversalLS

Hypotheses

Taker-Flow Absorption Reversal, Long-Short (Single-Instrument SOLUSDT.BINANCE USD-M — Fade Extreme One-Sided Aggressive TAKER Flow That FAILS to Move Price, i.e. Passive Liquidity Is Absorbing the Aggressors; Taker-Ratio Gated, 2-Parameter)

Hypotheses

A LONG-SHORT, SINGLE-INSTRUMENT, SINGLE-VENUE mean-reversion strategy on SOLUSDT.BINANCE USD-M whose signal is genuinely ORTHOGONAL to price: the aggressive TAKER buy/sell imbalance (taker_ratio feed, already collected in the supplementary set), NOT any indicator recomputed from the price series. Core microstructure insight — ABSORPTION. Aggressive taker orders cross the spread and should move price in their direction. When taker flow is extremely one-sided over a window YET price fails to travel with it (the aggressors are not being rewarded), it means informed PASSIVE liquidity is absorbing the entire flow. Once the crowd of aggressors is exhausted with nothing to show for it, price reverts AGAINST the direction of the aggression. So: extreme aggressive BUYING that price cannot follow → buyers absorbed → fade SHORT; extreme aggressive SELLING that price cannot break down → sellers absorbed → fade LONG. This is a divergence between ORDER FLOW and PRICE RESPONSE — mechanistically distinct from momentum/trend (which acts WITH flow) and from the liquidation/OI deleveraging fades already in the pipeline (which key off forced-exit feeds). Single venue + single instrument → the 1h bars and the taker_ratio feed are jointly available in the Layer-3 sandbox (no cross-venue/multi-leg verification risk; no options/IV dependency). Deliberately 2-parameter to resist the overfit deaths that dominate the log.

Hypotheses

Iteration 5 addresses the backtest gate's metrics-coherence flag with the smallest possible change: max_notional_frac 1.0 -> 0.35. With risk_frac=0.01 against a 1.5-ATR stop, the ATR-risk notional exceeded the gross cap on most fades, so the cap was binding and every position ran at ~100% of live equity. That makes the realised equity curve strongly compounding (deep, path-dependent drawdown -> total_return -67.61%) while the per-bar mtm return series averages mildly positive (Sharpe +0.52) — exactly the sign disagreement reported. With the cap no longer binding, ATR-risk sizing sets the notional and the two curves describe the same book. No signal, polarity, flow-pointer, gap-reset or exit line changed, so Layers 1-4 stay green. HONEST CAVEAT, and the reason for the abandon recommendation: smaller size scales a negative expectancy down, it does not invert it. Judged on the equity curve as instructed, this mechanism loses money, and that is now consistent across three independent measurements (full backtest -67.61%; sandbox avg_trade_return_pct -0.08% over 198 trades with profit_factor 0.73; a 1,842-event study where the traded 8h fade returns +0.039%, t=+0.6, i.e. statistically zero and below the ~0.10% round-trip taker cost, with the fade-SHORT leg significantly negative at -0.797%/t=-3.3 by 48h). The only parameter cell that would clear the fee floor (|s|>=2.5, hold_bars=12) is the best of 35 scanned cells with max |t|=2.5 against a ~2.4 noise expectation and one supporting year — deliberately not taken.

Hypotheses

Negative expectancy on a reliable 883-trade / 2182-day sample: avg_trade_return_pct 0.133% (below the 0.15% Binance USD-M fee floor), profit_factor 0.895 (<1), total_return -25.98%, Sharpe -0.097, expectancy -$29.91/trade. Commission is only 13.3% of gross, so this is NOT fee-fragility - the absorption-reversion signal is gross-negative: the strategy loses in 5 of 6 calendar years. The premise is measurably falsified, confirmed three ways: sandbox (PF 0.886, Sharpe -0.50), full backtest here, and the developer's own event study (1,842 events at the |signal|>=2.0 gate) putting the traded 8h fade at +0.039% (t=+0.6, statistically zero), with no horizon gradient and a significantly negative fade-SHORT leg (-0.797%, t=-3.3 at 48h). The 2 tunable parameters cannot invert a sub-fee, PF<1 signal and there is no robust parameter region to tune toward (the only cell clearing the fee floor is a best-of-35 noise cell the developer explicitly flagged). QA's edge concern is borne out. Not worth 2 hours of optimization. abandon_class=negative_expectancy.

Implementation

Long-short 1-hour mean-reversion on SOLUSDT.BINANCE USD-M that fades extreme one-sided aggressive TAKER flow which price failed to follow (absorption). Signal = -(flow_z - move_z) * tanh(|flow_z|/flow_scale), where flow_z is the z-score of windowed taker buy/sell imbalance (merged taker_ratio + metrics feeds, point-in-time, gap-reset) and move_z is the z-score of the price return over the SAME window. Fades short when aggressive buying is absorbed, long when aggressive selling is absorbed. ATR take-profit / stop plus a hold_bars time stop; ATR-risk position sizing capped at 35% of equity gross notional.

Verification Results

Advisory only. Let the full backtest over complete history quantify the edge; the analyst decides optimize/iterate/abandon there with real numbers.

Verification Results

Per-trade edge is below the futures fee floor in the sandbox (avg_trade_return_pct 0.085% < 0.15%) and the developer's event study finds the traded-horizon fade indistinguishable from zero. The signal, polarity, and sizing are all correct — the concern is that the absorption edge itself may not exist in SOL taker-flow data.

Verification Results

Sandbox shows negative expectancy: avg_trade_return_pct 0.085% (below the 0.15% Binance USD-M fee floor) over 481 trades, profit_factor 0.886, Sharpe -0.50, total_return -14.3%. The developer's own event study (1,842 events at the live gate) puts the traded 8h fade at +0.039% (t=+0.6) — statistically zero and below the ~0.10% round-trip taker cost — with no horizon gradient, only one of six eras individually significant, and the fade-SHORT leg structurally negative (-0.797%, t=-3.3 at 48h). The absorption reversion does not appear to be present in SOL taker-flow at 1-24h horizons. This is a mechanism/edge doubt, not a coding defect; the full backtest and analyst should confirm before optimization. Developer recommendation is abandon on edge grounds and the evidence supports that at the analyst stage — but it is not a correctness failure so it does not block here.

Backtest Review

Signal is genuinely orthogonal to price (taker-flow vs price response), single-instrument/single-venue, cleanly implemented and passed Layers 1-4

Backtest Review

Deliberately 2-parameter to resist overfitting; balanced long/short (455/428 trades); reliable sample (883 trades over 2182 days)

Backtest Review

avg_trade_return_pct 0.133% is BELOW the 0.15% Binance USD-M fee floor - per-trade edge does not clear costs

Backtest Review

profit_factor 0.895 (<1) and total_return -25.98% - gross-negative even after only 13.3% commission drag, so this is edge-absent, not fee-fragility

Backtest Review

Negative Sharpe (-0.097), Sortino (-0.069), CAGR (-6.26%); loses in 5 of 6 calendar years (2023 -4.1, 2024 -8.3, 2025 -11.0, 2026 -7.6)

Backtest Review

Developer's own event study (1,842 events) shows the traded 8h fade at +0.039% (t=+0.6, statistically zero), no horizon gradient, fade-SHORT leg significantly negative at 48h (t=-3.3) - the absorption reversion is not present in SOL taker-flow at 1-24h horizons

Backtest Review

Both developer and QA independently recommend abandon on edge grounds

Analysis

Backtest gate: - metrics unreliable: Incoherent: Sharpe 0.52 disagrees in sign with total_return -67.61% — the Sharpe is computed from the mtm_equity_curve series while the return comes from the equity curve. Judge on the equity curve.

Iteration History

Verification failed (Layer 4 — QA review): - The absorption-reversal edge is reliably negative in the sandbox — the first real backtest of the mechanism loses decisively. total_return -26.7%, PF 0.71, Sharpe -1.39 (CI [-2.99, 0.18], PSR 0.043), win_rate 0.51 with avg_loss $977 vs avg_win $670 (net negative), alpha -0.21, skew -1.05 / kurtosis 15.6, over 196 trades with metrics_reliable=TRUE. avg_trade_return_pct is -0.096% — NEGATIVE and below the 0.15% futures floor, so the per-trade edge doesn't clear costs before drawdown. Polarity is correct (verified: aggressive selling absorbed → BUY, aggressive buying absorbed → SELL, flow-explained moves net to ~0 and aren't faded), so this is absent/negative edge, not a bug: fading one-sided taker flow that failed to move price does not revert on SOL — the aggressors were, on balance, right rather than absorbed. - Taker-flow coverage gap would impair the pipeline even if the edge were positive. The SOLUSDT taker series is dense 2021-12→2024-01, then a 759-day hole, then resumes 2026-02+ (developer-verified), so 2024-2025 carry no flow and the strategy is flat there. Walk-forward windows in the hole produce zero trades and no OOS Sharpe; the 15-day holdout depends on the 2026 tail alone. Same coverage problem as the sibling OI strategies, though here the negative edge is the primary reason to stop.

Iteration History

Verification failed (Layer 4 — QA review): - Fee/edge viability failure confirmed by the sandbox and by the developer's own event study. Sandbox avg_trade_return_pct = -0.08% over 198 trades (total_return -25.8%, profit_factor 0.73, Sharpe -0.99), i.e. the per-trade edge is NEGATIVE and far below the 0.15% futures round-trip floor. The developer replicated this exact absorption signal over 1,842 events at the live |signal|>=2.0 gate: the fade returns +0.039% (t=+0.6) at the traded 8h horizon — statistically zero and below the ~0.10% taker cost. The horizon profile has no monotone gradient (bumps only at 12h, turns significantly negative -0.353% t=-2.2 by 48h) and the fade-SHORT leg bleeds -0.797% (t=-3.3) against SOL drift, which is fatal for a long-short hypothesis. The one fee-clearing config (|s|>=2.5, hold=12, +0.305% gross) is a best-of-35 noise cell (max |t|=2.5 vs ~2.4 expected under pure noise) and was correctly NOT tuned to. The absorption mean-reversion mechanism is absent in SOL data at 1-24h horizons.

Iteration History

Verification failed (Layer 4 — QA review): - Fee/edge viability failure — re-confirmed, iteration 3 is functionally identical to iterations 1-2 (every executable line and parameter unchanged; only a docstring block was added recording the converged abandon verdict). Sandbox avg_trade_return_pct = -0.08% over 198 trades (total_return -25.8%, profit_factor 0.73, Sharpe -0.99): the per-trade edge is NEGATIVE and far below the 0.15% futures round-trip floor. The developer's 1,842-event study over the full merged flow series confirms the fade returns +0.039% (t=+0.6) at the traded 8h horizon — statistically zero and below the ~0.10% taker cost. The horizon profile has no monotone gradient (lone bump at 12h, significantly negative -0.353% t=-2.2 by 48h), only 2023 is an individually significant era, and the fade-SHORT leg bleeds -0.797% (t=-3.3) against SOL drift — fatal for a symmetric long-short hypothesis. The absorption mean-reversion mechanism is absent in SOL data at 1-24h; this is not fixable in code. The one fee-clearing config (|s|>=2.5, hold=12, +0.305% gross) is a best-of-35 noise cell (max |t|=2.5 vs ~2.4 expected under noise) and was correctly left untuned.

Iteration History

Verification failed (Layer 1 — config): config.instrument_id and config.bar_type are REQUIRED (got instrument_id=None, bar_type=None). Set both to the hypothesis's instrument, e.g. instrument_id='BTCUSDT.BINANCE', bar_type='BTCUSDT.BINANCE-4-HOUR-LAST-EXTERNAL'.
Strategy report

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