BL-SD-015: Open-Interest Accumulation Footprint

BIJECTIVE LABS


BIJECTIVE LABS . SEP 7, 2026


BL-SD-015: Open-Interest Accumulation Footprint

Status: RELEASED

Classification: PUBLIC

Revision: 1

Date: 2026-09-07

Venue: Bybit Programme: I Verdict: FALSIFIED Axis of death: Data, then idea Transferability: UNIVERSAL


1. Identification

FieldValue
Internal codeM#4, oi_accumulation_shadow
FamilySmart-money open-interest accumulation, long only
VenueBybit perpetuals
ProgrammeI
Pre-registered2026-06-17
Verdict issued2026-06-27
Pre-registration documentD-007
PredecessorNone; the fourth of the platform's original data-substrate machines

2. Economic thesis

When open interest builds sharply while price remains flat or basing, and aggressor flow over the same window is buy-dominant, and funding has not yet reached a crowded level, the design read that combination as the measurable footprint of committed capital accumulating a long position ahead of a markup, distinguished from noise because open interest measures committed contracts rather than a price-derived oscillator.

Who is forced to lose. The original design record does not name a structural forced loser. It resolves direction through aggregated taker flow and treats open interest as a structural signal rather than a counterparty-mechanism claim. This is a retrospective weakness shared with BL-SD-013, and it is one of the reasons this hypothesis sits closest, by its own design record's admission, to the programme's dead directional bucket: only the multi-hour horizon and the structural-flow basis distinguish it from tick-level prediction.


3. Falsifiable claim

Pre-registered in the design record before any shadow trade was accumulated:

Sized-NET block-bootstrap confidence interval is positive, the entries beat a random-entry long control on the same universe and horizon, the result is positive in at least two of three subperiods, and no single symbol accounts for more than approximately 40 percent of total realised profit, with funding accrued for real over the holding period.

MetricThresholdDecision if crossed
Sized-NET block-bootstrap CI95spans or is below 0REJECTED
Random-entry long nullnot beatenREJECTED
Subperiod positivityfewer than 2 of 3REJECTED
Concentrationone symbol above approximately 40 pct of PnLREJECTED

4. Mathematical specification

Notation per BL-D-011. Long-only; evaluated per symbol on each scan tick.
 
OI-build z-score, over a build window W and a rolling baseline of prior W-bar changes:
 
  rel_t(W)  = ( OI_t - OI_{t-W} ) / OI_{t-W}
  z_OI,t    = ( rel_t(W) - mean(rel_baseline) ) / std(rel_baseline)
              rel_baseline excludes rel_t(W) itself, drawn from the trailing
              baseline window ending at t-1
 
Price basing, over the same build window:
 
  ret_t(W)  = log(p_t) - log(p_{t-W})
  vol_t     = std( diff(log p) )   over a trailing realised-vol window
  basing_t  = ( |ret_t(W)| <= theta_flat * vol_t * sqrt(W) )  AND  ( ret_t(W) <= theta_early )
 
Aggressor flow, over a trailing CVD window W_cvd:
 
  cvd_imb_t = ( buy_vol_t - sell_vol_t ) / ( buy_vol_t + sell_vol_t )
 
Funding gate:
 
  funding_lo <= funding_t <= funding_hi
 
entry (long only): fire at t when
  z_OI,t >= theta_oi  AND  basing_t  AND  cvd_imb_t >= theta_cvd  AND  funding_lo <= funding_t <= funding_hi
 
exit, first of:
  price_t < basing_low                                        structural invalidation
  OI_t < OI_peak_since_entry * (1 - theta_unwind)             position unwind
  cvd_imb_t <= -theta_flip                                     aggressor flip
  price_t < high_since_entry - k_trail * ATR                  trailing stop, ratchets up only
  t - entry_t >= T_max                                         timeout, 60 hours
 
sizing: fixed reference notional per shadow trade
cost:   c_rt = 11.0 bps fee + entry_spread + exit_spread + funding_bps realised over the hold

Causality holds by construction for the entry terms: z_OI,t, basing_t, cvd_imb_t, and funding_t are each computed from observations at or before t, and the OI baseline explicitly excludes the current observation. The exit terms OI_peak_since_entry and high_since_entry are running maxima accumulated forward from the entry timestamp and never reference a future observation.


5. Operating envelope

ParameterValue for this measurement
Round-trip cost assumed11.0 bps fee, taker entry, plus entry and exit spread, plus realised funding over the hold
Execution channelTaker entry, guaranteed fill on a forming move; exit channel not separately specified in the source
Latency bandCold path; the sidecar polls at 900-second intervals against an hourly open-interest history
Measurement cadenceOpen-interest history at approximately one-hour resolution, roughly 200 points, approximately 8 days of coverage per fetch
Capital scaleProgramme default, BL-FM-002 section 6
Venue and instrumentsBybit USDT perpetuals, liquid alt universe excluding BTC, ETH, commodities, and tokenized stocks, liquidity floor 8,000,000 USD
Data eraForward shadow accumulation from 2026-06-17, spanning a 9-day altcoin decline referenced in the successor design record

6. Instrument

The pure open-interest accumulation signal engine, numpy only, unit-tested against synthetic data, with the Redis adapter and orchestrating shadow class added separately. A dedicated runner drove it in production. A separate evaluation harness, built specifically to isolate the entry signal's forward edge from the exit logic, tested it against a matched random-entry null across six horizons from 30 minutes to 24 hours.

A data-integrity correction was made before evaluation: the sidecar initially read CVD and mid price from the websocket hot-path feed while itself running as a cold-path, minutes-to-hours strategy, a shadow-versus-live substrate mismatch. The correction moved the sidecar to an all-ccxt substrate, open interest history, OHLCV, tickers, and trades all drawn from the same source the live execution path would use, so that the shadow measurement and any eventual live execution would read identical data.


7. Results

ArmnFindingThresholdResult
All shadow trades10789 long entries against 1 short entry, accumulated through a 9-day altcoin declineDiffuse across at least 3 regime contexts, beats a random-entry nullFAIL, directionally one-sided into a market downtrend
Funding term107Returned zero throughout the sampleReal funding accrual per the section 4 cost modelFAIL, NET overstated by an unmeasured amount

The kill ledger records 89 long entries against 1 short entry within a 107-trade sample. The strategy was specified long only, with the short side explicitly out of scope for this version, so the remaining 17 trades in that accounting are not reconciled by any source reviewed for this dossier. That gap is reported rather than resolved by assumption.


8. Verdict, axis of death, and transferability

Verdict: FALSIFIED. Axis: data, then idea. Transferability: UNIVERSAL.

The data-axis component is the funding accrual defect: the cost model required realised funding to be subtracted from every trade whose hold crossed a settlement, and the recorded field returned zero throughout, meaning the reported net figures are an upper bound rather than a measurement.

The idea-axis component is independent of that defect and is the one that settles the verdict. A design that requires price to be basing at entry, as a condition for calling the open-interest build genuine accumulation rather than late chasing, produced 89 long entries against 1 short during a sustained multi-day decline. That is not the behaviour of a mechanism that distinguishes accumulation from a market simply falling with rising short-side open interest; it is a directional long bias with no regime gate, confirmed structurally rather than by a single bad sample. No fee substitution repairs a signal that fires long into a market that is falling.


9. Cost and capacity analysis

The funding accrual defect means the true, funding-inclusive net return was never measured; the recorded figures are known to be an upper bound rather than a lower bound or a point estimate. Capacity was not measured, and the question did not become live, since the mechanism failed on the idea axis before the funding correction alone could have settled the verdict.


10. Envelope sensitivity and reopening conditions

No binding parameter exists to name, because the finding is a sign and regime-selectivity failure, not a magnitude shortfall against cost.

Reversal condition:  none computable.

Correcting the funding accrual defect alone does not rescue this hypothesis, because the directional bias into a declining market is a defect of the entry logic, not of the cost accounting. BL-D-002 section 4 asks whether the result would be positive under arbitrarily favourable envelope parameters; here the answer is bounded by a mechanism that does not distinguish the condition it claims to detect.

What would reopen it: an explicit market and symbol regime gate that prevents a long entry during an active systematic markdown, together with a verified, non-zero funding accrual path. Both were built directly as the successor design and are recorded as BL-SD-017.

What would not reopen it: fixing only the funding accrual bug while leaving the entry logic unchanged. The directional bias would remain.


11. Reference implementation

Published as 05_INSTRUMENTS/strategies/python/src/oi_accumulation.py, with 35 tests. It is superseded, in the same volume, by 05_INSTRUMENTS/strategies/python/src/accumulation_distribution.py, the successor described in BL-SD-017, which carries the regime gate and the corrected funding accrual this hypothesis lacked. Both are published, because the pair is what shows what the successor added.

Two things in the published module are worth a reader's time beyond the signal itself.

The funding cost function is where this row's data defect landed, and the function was not the defect. It sums the settlement rates spanned by a hold, with the long's sign already correct, and during this measurement it was handed an empty sequence on every trade because the feed above it was not delivering rates. An empty sequence still returns zero in the published version, deliberately: a hold spanning no settlement really does pay no funding. What R-17 requires is that the caller distinguish no settlements from no data, because this function cannot see the difference. The test suite pins both cases side by side.

The entry gate skips on any missing input rather than proceeding on the ones it has, and that asymmetry is this family's own lesson written into a signature. A missing funding reading could mean funding is fine or that the feed is down, and treating absence as permission is precisely how 107 trades were taken against a cost term that was not being measured.

The exit carries no fixed basis-point stop anywhere. It is structural invalidation, then an open-interest unwind, then a flow flip, then a volatility-scaled trail, then timeout. That follows directly from BL-SD-009, where a tight stop on a multi-day thesis produced 438 trades a day against a design target of 5 to 50.


12. Evidence register

Related artifactCarries
None assignedThis measurement rests on the narrative decision record rather than an emitted machine-readable artifact, and is registered as D-007 in BL-A-006

13. Lessons extracted

This hypothesis produced the design brief for its own successor. The successor's opening section names three specific defects inherited directly from this measurement: no regime gate, causing the strategy to long into a 9-day decline; a regime field that was an empty stub rather than a populated classification; and a funding accrual that was never live, with every recorded hold under 2.8 hours. Each defect was addressed by name in the successor's design rather than left to be rediscovered.


14. Cross-references

BL-SD-017 for the successor that addresses each defect named here. BL-D-006 on data integrity, for the substrate-mismatch correction in section 6. BL-SD-000 ledger row OI-ACC.


Copyright (c) 2026 Bijective Labs. All rights reserved.