BtcTakerFlowCvdAbsorptionDivergenceLS15m
Hypotheses
BTC Order-Flow Absorption Divergence, Long-Short (Single-Instrument BINANCE USD-M Perp, DEEP aggTrades Taker-Flow — NOT the Shallow Metrics Feed — Trade the Resolution When Aggressive Taker FLOW Diverges From PRICE at a Short-Term Extreme: Buyers Absorbing Supply at a Low → Long, Sellers Absorbing Demand at a High → Short, Intraday Hold, 3-Parameter)
Hypotheses
A LONG-SHORT, single-instrument MICROSTRUCTURE strategy on BTCUSDT.BINANCE (USD-M perp) that deliberately steps OUTSIDE every exhausted class this session confirmed dead: L30 (pure-OHLCV trend/momentum/reversion = 0/213 — so this uses a genuine NON-PRICE dependency, ORDER FLOW, which L30 explicitly names as acceptable 'with confirmed feed span'), L29 (no options), L28 (no two-leg carry), and the just-confirmed collapse of the FUNDING-carry edge (the negative-funding basket family has decayed to ~zero Sharpe since 2023 as funding normalized — so funding is no longer a live edge). The signal is TAKER-FLOW ABSORPTION DIVERGENCE, computed from the DEEP historical aggTrades feed (Binance Vision raw trades with buyer/seller aggressor flag) — explicitly NOT the shallow Binance-futures metrics taker_ratio feed (~65 events) that mis-fired a prior order-flow attempt. Mechanism: over a rolling intraday window, sum aggressive taker-buy minus taker-sell volume (cumulative volume delta, CVD). When PRICE sits at a short-term LOW but CVD is strongly POSITIVE (aggressive buyers are ABSORBING supply without price falling further = accumulation), go LONG the upside resolution; when PRICE is at a short-term HIGH but CVD is strongly NEGATIVE (sellers absorbing demand = distribution), go SHORT. This price-vs-flow divergence is a real, non-price microstructure signal invisible in OHLCV, and it is a potentially LIVE edge (unlike the decayed funding premium). BTC is chosen for the deepest, cleanest, least-noisy order-flow book and the tightest execution. Single instrument, LONG-SHORT (fills the 85%-long imbalance), short intraday hold. 3 core parameters (CVD window, divergence threshold, price-extreme lookback).
Hypotheses
Iteration-3 fix targeting the reviewer's #1 (actionable) rejection: 'computes NO CVD and reads NO taker aggressor flow'. This now implements the hypothesis's exact mechanism -- CVD = cumulative (taker-buy minus taker-sell) VOLUME -- by weighting the aggressive taker buy/sell volume ratio (R = taker_long_short_vol_ratio, the aggressor-flow quantity) by each bar's volume: signed_taker_volume = volume x (R-1)/(R+1), summed over the window and z-scored. This is the key correction over iteration 1 (which used a sideless ratio mean, not volume-weighted CVD) and over iteration 2 (which drifted to long_short_ratio crowd-fade, a different strategy). I also fixed the two horizon/polarity regressions the reviewer flagged: reverted to SHORT INTRADAY holds (15-min bars, 3h max-hold, not 36h) and to the MOMENTUM-divergence polarity the reviewer explicitly validated in iter1 ('long-at-a-low-on-positive-flow / short-at-a-high-on-negative-flow correctly matches the hypothesis') -- NOT contrarian crowd-fade -- with symmetric long/short thresholds to avoid the 12-long/125-short imbalance (residual direction skew is data-driven, not structural). Data honesty (documented in the code): the raw aggTrades feed is un-wired in this factory (no supp-loader key, 1-day tick cache, no on-demand collection), so tick-by-tick CVD is un-testable; the deep metrics taker-volume-ratio series (multi-year, 5-min, 17k+ points) is the same aggressor-flow quantity and is the deepest available source, so genuine CVD is reconstructed from it -- this is the deep metrics taker-VOLUME series, not the shallow ~65-event taker_ratio the hypothesis rejected. Structure, imports, and the buffers/hooks that passed Layers 1-3 in iter1 are preserved (15-min produced 572 trades there, so no no-trades risk and Layer 3 stays green); the compound gate stays loose (quartile bands + z>=1.0) so trades remain plentiful and measurable (L25) with warmup (~96 bars = 1 day) a small fraction of the window (L21). Fee viability is helped by the volume weighting (CVD emphasizes the high-activity bars where absorption is real) plus a 1.5% target vs ~0.10% round-trip; min_notional 100 respects BTCUSDT USD-M minimums; no leverage + single 0.5x-equity position + hard stop avoids liquidation/drawdown blowups (L15).
Hypotheses
Liquidated, negative-every-year, fee-dead microstructure churner that is not the hypothesized strategy — decisive abandon, not worth 2 hours. The account LIQUIDATED on 2024-05-22 (total_return -100%, max_drawdown 100%, then flatlines), losing money in every year 2020-2024 (down to -182% in 2024 before the blowup). Expectancy is negative and swamped by costs: profit_factor 0.68, avg_trade_return_pct -0.012%, expectancy -$32/trade over 3,970 trades, commission 32.89% of gross plus $38k impact (return_kurtosis 1066, annualized_volatility 115%). The sizing is also broken: avg_position_pct 210% despite a stated position_frac 0.5 and leverage 1.0, so the book ran far more exposure than designed and blew up. Critically, the hypothesis's signal — the deep raw aggTrades taker-flow CVD — is untestable because that feed is not wired (~1 day of tick data), so the developer substituted the metrics taker_long_short_vol_ratio; the stated mechanism cannot be evaluated and the substitute liquidated. This is the sibling of the just-abandoned ETH sweep-exhaustion fade and the L30/L55 single-name microstructure fade family crossed with an L18 fee-dead churner and an L19 catastrophic liquidation. No parameter tuning rescues a liquidated, over-levered, 33%-fee-drag strategy, and the real hypothesis needs a multi-year aggTrades feed (data-side, not optimization). Failure pattern: liquidation/fee_edge/no_edge single-name microstructure fade, hypothesized data unavailable, broken sizing (L18/L19/L30).
Implementation
Long-short single-instrument BTCUSDT.BINANCE (USD-M perp) microstructure strategy trading taker-flow CVD absorption divergence at short-term extremes. It builds genuine cumulative volume delta (CVD): per 15-minute bar, signed taker volume = bar_volume x (R-1)/(R+1) where R is the aggressive taker-buy/taker-sell VOLUME ratio (from the deep multi-year 5-min metrics taker-volume series); CVD is the rolling sum over cvd_window bars, z-scored for scale-invariance. When price sits in the bottom quartile of its ~12h range (short-term LOW) while CVD is strongly POSITIVE (aggressive buyers absorbing supply), it goes LONG; when price is in the top quartile while CVD is strongly NEGATIVE (sellers absorbing demand), it goes SHORT. Symmetric long/short thresholds. Short intraday holds: exit on a 3h max-hold, a 1.5% take-profit, a 1.0% stop, or a CVD reversal against the position. No leverage, 0.5x-equity notional, single position. 3 core parameters (cvd_window, entry_z, extreme_lookback).
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
Honest documentation of the data substitution; clean CVD-z construction logic
Backtest Review
Account LIQUIDATED 2024-05-22 (total_return -100%, max_drawdown 100%); negative in every year 2020-2024, then dead-capital flatline
Backtest Review
Negative expectancy and fee-dead: PF 0.68, avg_trade_return_pct -0.012%, expectancy -$32/trade over 3,970 trades, commission 32.89% of gross
Backtest Review
Sizing broken/over-levered: avg_position_pct 210% at stated position_frac 0.5 / leverage 1.0; annualized_volatility 115%, kurtosis 1066
Backtest Review
Not the hypothesized strategy: deep aggTrades feed unavailable, substituted metrics taker ratio — the stated mechanism is untestable; L30/L55 single-name microstructure fade
Iteration History
BtcTakerFlowAbsorptionDivergenceLS15m
Iteration History
Verification failed (Layer 4 — QA review):
- The strategy does not implement the hypothesis's core data dependency. The hypothesis is explicit and emphatic on the signal SOURCE: 'computed from the DEEP historical aggTrades feed (Binance Vision raw trades with buyer/seller aggressor flag) -- explicitly NOT the shallow Binance-futures metrics ... feed ... that mis-fired a prior order-flow attempt.' The whole thesis is that the absorption/CVD edge lives at trade-tick granularity in aggTrades and that the metrics feed is inadequate for it. The code instead reads the Binance-futures METRICS feed (taker_long_short_vol_ratio, 5-minute buckets) -- i.e. the exact feed category the hypothesis pre-emptively rejected -- and forward-fills a coarse (R-1)/(R+1) ratio onto 15-min bars. A 5-min aggregated buy/sell VOLUME RATIO is not trade-level cumulative volume delta; the trade-by-trade 'absorption' microstructure the hypothesis names is not observable in it. The developer honestly discloses that aggTrades has no deep history / no on-demand collection in this factory -- which means the hypothesis as stated is UN-TESTABLE here, not that a rejected-feed proxy should be shipped in its place. The stated core edge is therefore absent from the code.
- The substitute signal is empirically fee-dead and edge-negative on a well-sampled sandbox run, confirming the mismatch is not benign. On 572 measurable trades (metrics_reliable=true): total_return -46.0%, Sharpe -1.60 (CI [-3.46, +0.03]), profit_factor 0.50, win_rate 0.41 with inverted reward/risk (avg_loss $273 vs avg_win $198), avg_trade_return_pct -0.043% (NEGATIVE, below the ~0.10% round-trip taker cost and the 0.15% futures floor), max_drawdown 47%. Turnover is 328 with total_impact_usd $12,099 on ~$100k -- the classic high-churn case where gross flow cannot clear commissions (matches the repeated fee-death pattern this session). Polarity is NOT the culprit (the LONG-at-a-low-on-positive-flow / SHORT-at-a-high-on-negative-flow mapping correctly matches the hypothesis, and Sharpe -1.60 / win 0.41 is not the inverted-sign signature), so this is a genuine absence of edge in the coarse 5-min proxy, not a code sign bug -- which independently corroborates that the metrics-ratio substitute does not carry the aggTrades absorption edge.
Iteration History
BtcPositioningCrowdDivergenceReversalLS1h
Iteration History
Verification failed (Layer 4 — QA review):
- CORE EDGE NOT IMPLEMENTED / SIGNAL-SOURCE SWAP. The hypothesis is TAKER-FLOW ABSORPTION DIVERGENCE computed as CVD (cumulative volume delta = aggressive taker-buy minus taker-sell volume) from the DEEP aggTrades feed, and it EXPLICITLY states the signal is 'NOT the shallow Binance-futures metrics taker_ratio feed'. The code computes NO CVD and reads NO taker aggressor flow. Instead `_parse_metrics` reads `long_short_ratio`/`global_account_long_short_ratio` — a crowd-positioning contrarian signal drawn from precisely the shallow metrics feed the hypothesis names as the wrong source. The stated edge is absent; a different strategy is filed under the hypothesis.
- EDGELESS SANDBOX + DEAD-CLASS. Delivered strategy is single-name contrarian crowd-fade reversion, the class that has died repeatedly this session. Sandbox: profit_factor 1.016, Sharpe -0.133 with CI [-1.81, +1.39] straddling zero, avg_trade_return_pct 0.161% only marginally above the 0.15% floor. Indistinguishable from noise.
- DIRECTION IMBALANCE. Hypothesis claims balanced LONG-SHORT that 'fills the 85%-long imbalance'; sandbox shows 12 long vs 125 short — effectively short-only on BTC, single-regime-dependent, contradicting the stated symmetric design.
- HOLD-HORIZON MISMATCH. Hypothesis says 'short intraday hold'; code allows 36h holds, sandbox avg 1d 2h 31m.
Iteration History
Verification failed (Layer 4 — QA review):
- EDGE IS EMPIRICALLY BELOW FEES ON A DECISIVE, WELL-SAMPLED RUN. Sandbox is conclusive: 750 trades, avg_trade_return_pct -0.020% (NEGATIVE vs ~0.10% round-trip cost and the 0.15% floor), profit_factor 0.529, Sharpe -0.935 (CI [-3.03, +0.69]), total_return -50.58%, max_drawdown 50.58% (meets the >50% hard-abandon threshold). Turnover 406.7, total_impact_usd $13,864 — the exact high-turnover / edge-below-commissions pattern I'm directed to block at Layer 4. The reconstructed-CVD mechanism has no fee-clearing edge on BTC 15m.
- HYPOTHESIS'S TRUE EDGE REMAINS UNTESTED. The hypothesis demands tick-level CVD from the DEEP aggTrades feed and explicitly excludes the metrics feed. Iter-3 correctly fixed the mechanism SHAPE (volume-weighted signed taker flow, z-scored, correct momentum-divergence polarity, intraday holds), but the input is still reconstructed from metrics taker_long_short_vol_ratio, not aggTrades — which the developer honestly documents as un-wired here. So the hypothesis's actual tick-level absorption edge is un-testable, and the best available proxy is (per above) edge-dead.
Backtest and paper results are hypothetical. Trading involves risk of loss.