Skip to content

View original

SolOpenInterestWashoutReversal

Hypotheses

SOL Open-Interest Washout Reversal — Fade Forced Deleveraging Using the Robust OI Feed (NOT the Thin Liquidation Feed): Long the Bounce After a Sharp OI Contraction on a Down-Move, Short the Exhaustion After an OI Contraction on a Squeeze (SOLUSDT.BINANCE USD-M, 1H Bars, Long-Short, ~4–24h Hold, 3-Parameter)

Hypotheses

A LONG-SHORT, single-instrument, event-driven strategy on SOLUSDT.BINANCE (USD-M perp) that fades FORCED DELEVERAGING. It adapts the liquidation-cascade-reversal archetype to data the catalog actually holds deeply: instead of the thin, per-symbol LIQUIDATION feed that keeps dying data_unavailable (L58), it uses the robust, deep OPEN-INTEREST supplementary series — a sharp OI CONTRACTION is the aggregate footprint of a cascade of positions being force-closed, without needing individual liquidation prints. The premise: when OI collapses on a sharp DOWN move, over-leveraged longs have been flushed and price tends to bounce; when OI collapses on a sharp UP move, a short squeeze has exhausted its fuel and price tends to fade. It is deliberately COMPUTATIONALLY TRIVIAL to dodge the Layer-3 timeout / 'float not callable' failures that just killed every options sleeve: the only state is OI percent-change over a short rolling window and an ATR — a few scalars per bar, NO per-bar full-history rescans, NO sorted()/min() over long lists, NO options greeks. It avoids every dead class: NOT single-asset momentum/trend (0/213, L56), NOT funding carry/differential (L57), NOT cross-sectional baskets (dead), NOT options (infra-broken right now), NOT the thin liquidation feed (L58), NOT a sub-fee microstructure fade (the post-washout bounce is percent-scale, not tick-scale). Fills the under-represented long-short (14% vs the ≤55% long-only ceiling) and short/mid horizon buckets, and uses supplementary data. Exactly 3 tunable parameters: OI-contraction threshold, ATR stop multiple, and ATR take-profit multiple.

Hypotheses

Iteration 3 makes exactly one substantive change, and it is the one the per-side evidence in the iteration-2 report supports rather than another parameter or exit tweak (which QA correctly said cannot help). The QA numbers split sharply by side: 1 of 22 shorts won (short_win_rate 0.045) while the long leg won roughly 11 of 31 (~0.36, near the break-even hit rate for a 2.0-ATR target against a 1.2-ATR stop). A symmetric-noise signal does not produce that split; it says the two halves of the hypothesis are not mirror images. OI contraction on a sharp UP move is short-covering, and covering flow tends to continue for hours, so fading it is structurally the wrong side — which also explains why the iteration-2 confirmation filter made the short leg worse (it pushed entries deeper into the squeeze). The iteration-1 replay only tested inverting BOTH legs at once, so it could not detect this asymmetry. So: (1) the short leg is removed entirely — the up-move case now returns None, and it is deliberately NOT inverted into a squeeze-continuation long, which would be a momentum bet and a different (dead-class) hypothesis; (2) the two iteration-2 additions that measurably degraded the book (reversal confirmation, break-even lock) are reverted and max_hold_bars returns to 12, restoring the strictly less-bad iteration-1 trade construction; (3) the only iteration-2 change kept is the raised fee floor min_tp_pct 0.0060, which is pure cost hygiene. Signal, OI index, imports, three tunables, _param_bounds and sizing are untouched, so no earlier passing layer regresses, and dropping the confirmation gate restores entry frequency so the sandbox still trades. Venue stays on the USD-M perp despite the book now being long-only at leverage 1.0: open interest exists only on the perp, the bounce being traded is a perp-deleveraging effect, and BINANCE_SPOT's 0.20% round trip would double the fee hurdle on an already marginal percent-scale edge. One honest caveat, as required: if this long-only form still shows a negative avg_trade_return_pct, the correct call is to abandon the hypothesis rather than iterate again — there is no remaining structural asymmetry left to exploit.

Hypotheses

Negative-expectancy single-perp OI-washout reversion — no edge to optimize. Over 494 trades: profit_factor 0.54, Sharpe -0.41 (CI [-1.27, 0.42]), total_return -24.8%, avg_trade_return_pct -0.045% (NEGATIVE), expectancy -$50/trade, and it loses in EVERY year 2021-2026 and in all three vol regimes (calm/normal/stressed Sharpe all negative), information_ratio -1.09. It is also fee-dominated: commission 37.5% of gross on a ~1h hold, with avg_loss ($199) exceeding avg_win ($130) at a 45% hit rate — the post-washout 'bounce' drift is below the round-trip cost. The premise is already falsified after the developer's iteration-3 fix: the short (squeeze-exhaustion) leg was removed for winning 1 of 22, leaving only the long 'buy the flush' leg, and that surviving leg is still net negative — the OI-contraction-then-bounce edge is not present on SOL. This is not a data wall (OI loaded, 494 trades), so the loss is genuine signal. It is the L58/L73 single-perp supplementary-gated (OI) reversion family, edge-dead this session. No tuning of oi_drop_pct/atr_stop_mult/atr_tp_mult flips a negative per-trade edge positive, and the only other lever (the short leg) was already dropped for being worse. Failure pattern: no_edge/fee_edge single-perp OI-gated reversion (L58/L73).

Implementation

Long-only, event-driven washout-reversal on SOLUSDT.BINANCE USD-M perp (1H bars). A sharp contraction in open interest over a 4-hour window is the aggregate footprint of positions being force-closed; when that contraction coincides with a sharp DOWN move (>= 1 ATR of washout score), over-leveraged longs have been flushed and the strategy buys the bounce. The signal is continuous every bar: contraction = (-oi_change)/oi_drop_pct times the negated ATR-normalised move, so it varies bar to bar and its magnitude is conviction. Entries additionally require the ATR target to be at least 0.60% of price (six times the 0.10% round-trip taker cost) and observe a 4-bar post-trade cooldown. Exits are an ATR stop, an ATR take-profit, and a hard 12-bar time stop. Sizing risks 0.5% of equity at the stop and is capped at 0.6x equity notional; leverage 1.0. Three tunables: oi_drop_pct, atr_stop_mult, atr_tp_mult. The squeeze-exhaustion short leg from iterations 1-2 has been removed.

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

Data/plumbing sound: OI loaded, 494 trades, no liquidation — genuine no-edge read, not a data wall

Backtest Review

Computationally trivial as intended (no timeout risk); contained drawdown (25.2%)

Backtest Review

Negative expectancy: profit_factor 0.54, Sharpe -0.41 (CI [-1.27,0.42]), total_return -24.8%, avg_trade_return_pct -0.045%, expectancy -$50/trade

Backtest Review

Loses in every year 2021-2026 and in all three vol regimes; information_ratio -1.09

Backtest Review

Fee-dominated: commission 37.5% of gross, avg_loss ($199) > avg_win ($130) at 45% win rate — the post-washout bounce is below cost

Backtest Review

Premise falsified after the iteration-3 short-leg removal: the surviving long-only leg is still net negative

Backtest Review

L58/L73 single-perp supplementary-gated (OI) reversion family, edge-dead this session

Iteration History

Verification failed (Layer 4 — QA review): - Negative-edge / fee-viability failure, confirmed as NOISE by the developer's own bidirectional replay (checklist #7, L6/L7). The sandbox is a badly losing book: total_return -9.83%, Sharpe -1.45 (CI [-3.07, 0.08]), avg_trade_return_pct -0.26% (deeply below the 0.15% floor), profit_factor 0.199, win_rate 0.268, avg_loss 204 vs avg_win 111, over 82 trades. Decisively, the developer's full 4.7-year offline replay shows per-trade return negative across the ENTIRE default grid AND negative when the polarity is INVERTED — both signs lose, which rules out a fixable sign error and means OI-contraction-plus-move is close to noise on SOL rather than a reversal predictor. A signal whose forward and inverse are both negative net of fees has no edge for the optimizer to find at any parameter setting.

Iteration History

Verification failed (Layer 4 — QA review): - Negative-edge failure confirmed and WORSENED by iteration 2 (checklist #7, L6/L7, L58). The trade-construction fixes (reversal confirmation, break-even lock, 24-bar hold, 0.60% fee floor) were correctly implemented but did not rescue the edge — they degraded it: profit_factor fell 0.199 -> 0.130, avg_trade_return_pct fell -0.26% -> -0.29%, win_rate 0.268 -> 0.226, and short_win_rate collapsed to 0.045 (1 of 22 shorts won), total_return -6.61%, Sharpe -1.39 (CI [-2.95, 0.13]), over 53 trades. Iteration 1's full-history replay already showed BOTH the signal and its inverse were negative net of fees (noise); iteration 2 confirms it — adding an entry-confirmation filter and break-even lock to a signal with genuine edge would raise win rate and PF, but here both fell, so the OI-contraction-plus-move signal is anti-predictive/noise on SOL, not merely mis-exited. No parameter or exit change turns a signal whose forward, inverse, raw, and confirmed forms are all negative into a positive one.

Iteration History

Verification failed (Layer 4 — QA review): - Negative-edge failure across all three iterations — the mechanism has no edge on SOL in any form tested (checklist #7, L6/L7, L58). Iteration 3 removed the short leg (which won 1 of 22) and reverted the degrading iteration-2 exit additions, leaving the long-only washout bounce. It is still a losing book: total_return -4.50%, Sharpe -1.05 (CI [-2.65, 0.64]), avg_trade_return_pct -0.237% (negative, below the 0.15% floor), profit_factor 0.307, win_rate 0.348, avg_loss 216 > avg_win 124, over 46 long trades. The developer's thesis that the long leg was ~break-even is falsified: 0.348 win rate is below the ~0.375 break-even for a 2.0-ATR target / 1.2-ATR stop, and winners are not even reaching target (avg_win < avg_loss). The per-trade progression is -0.26% -> -0.29% -> -0.237% — every construction negative. Removing the worst leg only shrinks the loss, it does not create an edge.
Strategy report

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