Skip to content

View original

BtcOiDivergenceExhaustionFadeLS

Hypotheses

BTC Open-Interest-Divergence Exhaustion Fade, Long-Short (Single-Instrument BTCUSDT.BINANCE Perp — NEW Information Source: Fade Strong Price Moves NOT Confirmed by Open-Interest Expansion, i.e. Short-Covering / Liquidation-Driven Moves That Lack New-Money Fuel, Revert-to-Mean, 3-Parameter)

Hypotheses

A LONG-SHORT, single-instrument, EVENT/POSITIONING strategy on the BTCUSDT.BINANCE USD-M perpetual whose signal is a genuinely NEW INFORMATION SOURCE used in a NEW way — OPEN-INTEREST DIVERGENCE — answering the meta-learner's L38 mandate to add a new information source rather than another price-only or momentum-confluence variant (all exhausted/banned). The mechanism: a strong directional price move accompanied by FALLING or flat open interest is not driven by new committed capital — it is existing positions CLOSING (a short-covering rally or a long-liquidation dump). Such moves lack fuel and tend to exhaust and revert, whereas moves on RISING OI (new money) are sustainable. So the strategy FADES price extensions that OI does not confirm. It is explicitly distinct from every prior idea: NOT price-only (uses OI as primary signal); NOT the dead OI-CONFIRM-momentum (that traded WITH rising OI — the opposite condition); NOT a major→alt transfer or ratio (L40); NOT Hyperliquid (L39); and distinct from my pending liquidation-cascade reversal — that triggers on an ACUTE intraday liquidation-VOLUME spike (forced-flow event), whereas this reads a slower, multi-day POSITIONING-QUALITY divergence between price and the OI stock. OI data is well-collected on Binance (long history, no coverage ceiling — unlike taker-ratio). It stays on BTC (the one instrument with demonstrated tradability), simple perp execution (dev-safe), single-instrument (signal = execution), and is built for the analyst's gates: a moderate divergence threshold fires ~100-200 times over multi-year history (measurable), BTC exhaustion-reversions of ~1.5-3% clear the ~0.10% fee, and a tight stop vs revert-to-mean target keeps reward:risk favorable and drawdown bounded. It fills the under-target LONG-SHORT bucket (13.6% vs 86.4% long-only). 3 parameters.

Hypotheses

My recommendation is ABANDON, and I made no functional change to the code — that is the whole content of this iteration. In iteration 2 I pre-committed in writing that if the tail-corrected, larger sample came back negative or below the fee floor I would abandon rather than iterate a third time, and that the constructive implication (the sign is backwards) belongs to the Research Lead as a new hypothesis rather than to me as a patch. QA has returned exactly that outcome and explicitly holds me to the commitment, so I am honoring it. Concretely, I did NOT flip the sign to trade WITH the squeeze, did not add a regime filter, and did not search for a profitable subset of divergences: the first would be a different hypothesis wearing this one's name, and on 38 trades the other two are fitting noise to a premise that has now been tested twice with the sign independently verified both times. What the three runs did establish is worth recording, and I put it in the docstring because two of the findings are reusable beyond this strategy. First, the premise is wrong rather than the implementation: fading an OI-unconfirmed extension is shorting into a squeeze, and the short leg is precisely where it breaks (short_win_rate 6/14 against an overall 0.447 with realized RR 0.73). Second — and this is the transferable engineering lesson — my iteration-2 risk defects were real and the fixes worked measurably: detecting the stop INTRABAR instead of on the close, anchoring size to max(stop, 3 ATR) instead of inversely to the tight stop, and cutting the gross cap to 0.35x equity took largest_loss from -$10,316 to -$2,958, max_drawdown from 25.5% to 11.5%, average position from 91% to 34% of notional, and return skew from -8.98 to -0.54, all with the same signal. Any future strategy that fades a violent event on multi-hour bars should start from that configuration, because a close-tested stop is not a stop during the event being traded, and inverse-stop sizing puts the largest position exactly where the stop is least enforceable. Third, re-centring the entry threshold lifted the sample 14 to 38, which is what made the negative verdict readable instead of one-loss-dominated. For the Research Lead I have flagged, but explicitly not implemented, the untested complement: treating an OI-unconfirmed extension as a squeeze-continuation signal to be traded WITH. The evidence is consistent with that sign, but it carries its own tail risk (chasing a squeeze) and deserves to be specified and reviewed as a hypothesis in its own right.

Hypotheses

Negative-expectancy single-perp OI-divergence exhaustion fade — no edge to optimize. Over 246 trades: profit_factor 0.716, avg_trade_return_pct -0.233% (NEGATIVE), expectancy -$126/trade, total_return -31.2%, Sharpe -0.55 (CI [-1.36, 0.15]), PSR 0.21, information_ratio -0.99, and it loses in EVERY year 2020-2026 and in all three vol regimes. The short (fade-a-rally) leg is where it breaks (short_win_rate 36.6%), consistent with the mechanism's genuine behaviour: a strong price move on flat/falling OI is a SQUEEZE that extends before it reverts, so fading it is shorting into a squeeze. The sign mapping was verified correct across two independent reviews, so this is a falsified premise, not a polarity bug. The developer's own docstring pre-registers this verdict — 'STATUS: FALSIFIED. RECOMMENDATION: ABANDON' — honouring iteration-2's written commitment that a still-negative larger sample means abandon rather than iterate a third time; the risk fixes worked but the edge is absent. This is not a data wall (OI loaded, 246 trades) and is the L73 single-perp OI/supplementary-gated directional family, edge-dead this session. No tuning of mom_lookback/entry_thresh/stop_atr_mult flips a wrong-sign, negative-expectancy mechanism. NOTE FOR RESEARCH LEAD: the developer offers a genuinely new mirror hypothesis — trade WITH an OI-unconfirmed extension (squeeze-continuation) rather than against it — which has its own tail risk and should be owned as a fresh hypothesis, not a patch to this one. Failure pattern: no_edge single-perp OI-gated fade, premise falsified (wrong sign).

Implementation

UNCHANGED FUNCTIONALLY — submitted with an ABANDON recommendation. Long/short open-interest-divergence fade on the BTCUSDT.BINANCE USD-M perpetual, 4-HOUR bars: the price extension over mom_lookback bars in random-walk sigma units multiplied by an unconfirmed weight w = clip(1.0 - z_OI, 0, 1), where z_OI is the standardized log change in open interest over the same horizon, so the fade score is largest when a strong move runs on flat or falling OI. Entry is a fresh cross of +/- entry_thresh; exits are an intrabar-detected stop (checked first, booked at that bar's close), the same-horizon mean frozen at entry as the target, and an 18-bar max hold; sizing is gap-aware against max(stop, 3 ATR) with gross notional capped at 0.35x equity. Layer 4 has now confirmed the mechanism is decisively net-negative on a risk-corrected, measurable 38-trade sample (profit_factor 0.589, avg_trade_return_pct -0.459%, expectancy -$182/trade), with the fade sign verified correct across two independent reviews — a rally on falling OI is a squeeze and squeezes extend before they revert. This iteration adds only a docstring record of that falsification; the signal, gate, exits and sizing are byte-for-byte identical to the reviewed version.

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.

Verification Results

Decisively negative, well-sampled edge (246 trades, -31.2%, PF 0.715, avg_trade_return_pct -0.233%, negative across regimes) — the exhaustion-fade premise is wrong on BTC (OI-unconfirmed extensions are squeezes that extend before reverting). Code faithfully implements the hypothesis and the sign is verified correct, so a premise/edge finding for the analyst, not a code fault. Abandon at backtest-review per the pre-registered condition; do not optimize. The squeeze-continuation complement is a separate Research-Lead hypothesis, not an iteration.

Backtest Review

Data/plumbing sound: OI loaded, 246 trades — genuine no-edge read, not a data wall; risk fixes (intrabar stop, gap-aware sizing) measurably worked

Backtest Review

Genuinely new information source (OI divergence) used distinctly from the dead OI-confirm-momentum family

Backtest Review

Negative expectancy: profit_factor 0.716, avg_trade_return_pct -0.233%, expectancy -$126/trade, total_return -31.2%, Sharpe -0.55 (CI [-1.36,0.15]), PSR 0.21

Backtest Review

Loses in every year 2020-2026 and all three vol regimes; short (fade-a-rally) leg win rate 36.6% — fading squeezes that extend

Backtest Review

Sign verified correct across two reviews — the premise is falsified, not a polarity bug

Backtest Review

Developer pre-registered ABANDON in the docstring; L73 single-perp OI-gated directional family (edge-dead)

Iteration History

Verification failed (Layer 4 — QA review): - DECISIVELY NEGATIVE WITH A CATASTROPHIC TAIL -- the fade-the-unconfirmed-extension premise is falsified, the same falling-knife failure as the liquidation-cascade sibling. Over 14 trades: total_return -16.28%, profit_factor 0.411, Sharpe -0.85 (CI [-2.49, 0.76]), win_rate 0.429, avg_trade_return_pct -1.276% (far below and on the wrong side of the fee floor), avg_win $1,895 vs avg_loss $3,457 (inverted RR ~2:1 against), largest_loss -$10,316 vs largest_win $3,987, return_skew -0.79, kurtosis 21.0, max_drawdown 25.5%, short_win_rate 1/4. The fade sign is CORRECT (verified: SELL an unconfirmed rally), so this is the genuine behaviour: a rally on falling OI is a SHORT-COVERING / squeeze move, and squeezes EXTEND violently before they revert. Fading them means shorting into a squeeze -- the -$10,316 loss is exactly that. The hypothesis's premise (unconfirmed = self-terminating closing flow that reverts) is inverted for the tail cases that dominate the P&L: those moves continue. - UNMEASURABLE SAMPLE + ILLUSORY TIGHT STOP. (a) 14 trades over 363 days (~84 over a multi-year span, below the ~100 floor) -- the graded unconfirmed-weight design was meant to avoid the count collapse but still landed under the developer's own predicted 30-60/year, so the result is one-loss-dominated (largest_loss -$10,316 is ~55% of the total loss) and cannot be read as an edge estimate regardless of sign. (b) The tight ATR stop is illusory during the events traded: on 4H bars it is evaluated at the close, but a squeeze extends intrabar, so the stop gaps and the -$10,316 loss is a ~5x overrun of the modeled 2% risk -- and inverse-stop sizing (tight stop -> larger position, avg_position_pct ~91% notional) maximizes exposure exactly where the stop fails.

Iteration History

Verification failed (Layer 4 — QA review): - RISK-CORRECTED AND MEASURABLE, STILL NET-NEGATIVE -- the developer's pre-committed abandon condition, met on both counts. Both iteration-2 fixes worked as designed: the count fix (entry_thresh 1.0 -> 0.7) lifted trades 14 -> 38 (measurable), and the risk fixes (intrabar stop, gap-aware sizing, cap 1.0 -> 0.35) contained the tail (largest_loss -$10,316 -> -$2,958, max_drawdown 25.5% -> 11.5%, avg_position 91% -> 34%, skew -8.98 -> -0.54). But the tail-corrected, larger sample is decisively negative: profit_factor 0.589, Sharpe -0.855 (CI [-2.42, 0.79]), win_rate 0.447, avg_trade_return_pct -0.459% (negative and below the 0.15% fee floor), avg_win $583 vs avg_loss $801 (inverted RR ~0.73), expectancy -$182/trade. Fading OI-unconfirmed extensions loses even with the tail contained and the sample measurable, because a rally on falling OI is a SQUEEZE and squeezes EXTEND before they revert (short_win_rate 6/14). The premise is falsified; the sign mapping is correct (verified across two runs).

Iteration History

Verification failed (Layer 4 — QA review): - CONFIRMED FALSIFIED -- no functional change this iteration, and the developer's own recommendation is ABANDON with both pre-committed triggers fired. The sandbox is byte-for-byte identical to iter2 (only a docstring status block was added): 38 trades (risk-corrected and measurable), profit_factor 0.589, Sharpe -0.855 (CI [-2.42, 0.79]), win_rate 0.447, avg_trade_return_pct -0.459% (negative and below the 0.15% fee floor), avg_win $583 vs avg_loss $801 (inverted RR 0.73), expectancy -$182/trade, short_win_rate 6/14. The premise is falsified with the fade sign verified correct across two independent reviews: a strong move on flat/falling OI is a SQUEEZE, and squeezes extend before they revert, so fading them is shorting into a squeeze -- and the short (fade-a-rally) leg is exactly where it breaks.
Strategy report

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