A LONG-SHORT, SINGLE-INSTRUMENT, single-venue swing on BTCUSDT.BINANCE USD-M perpetual whose signal is the RELATIONSHIP between price change and OPEN-INTEREST change — a positioning/leverage tell, not a price-shape pattern and not an intraday flow-extreme fade. Open interest measures the stock of committed leveraged capital. A price move that is NOT confirmed by a matching build in open interest lacks fresh committed money behind it and statistically reverts; a move confirmed by rising OI has conviction and is left alone. The strategy classifies each daily bar into a price×OI quadrant using rolling multi-day changes and trades ONLY the two DIVERGENCE quadrants, contrarian: (1) price UP while OI is FALLING — a rally driven by short-covering / position closing rather than new longs, unsustainable → go SHORT; (2) price DOWN while OI is FALLING — a selloff driven by long-liquidation / deleveraging that exhausts forced sellers → go LONG (washout reversal). When price and OI move TOGETHER (both up = new longs with conviction; both down is already covered above) the strategy STANDS ASIDE and does not fight confirmed positioning. This is deliberately the OPPOSITE construction of a trend/OI-confirmation breakout (which trades price–OI AGREEMENT and is a known dead class here): the edge is specifically the divergence. It is NOT a taker-flow or mark-index-premium fade (different feed: stock of open interest vs per-bar aggressor flow / basis), NOT a cross-venue or basket construction, NOT a positioning L/S-account ratio divergence, and NOT an OHLCV-only mean-reversion (OI is the trigger; price change is only the sign). DAILY bars with 2-7 day holds mean round-trip fees (~0.10%) are a rounding error against multi-percent reversion targets, structurally sidestepping the fee_edge graveyard that kills fast strategies. Only 2 free parameters (OI-change lookback in days, divergence z-threshold) plus a fixed ATR stop and time stop, to stay clear of the overfit graveyard. All per-bar work is O(1) via incremental rolling change/z-score — no full-series rescans, sorts, or min()/max() over history — to avoid the smoke-test timeout.