BL-IS-005: Realised Cost Model
BIJECTIVE LABS
BL-IS-005: Realised Cost Model
Status: RELEASED
Classification: PUBLIC
Revision: 1
Date: 2026-09-07
1. What it computes
The round-trip cost of a position, from the operator's declared envelope rather than from a nominal fee.
c_rt = 2 * fee + spread_cost + slippage + funding_accrualFour terms. For most of the first programme the measurement path contained none
of them, which is documented in BL-IN-002 and is the single largest error in
the archive.
2. Envelope parameters are arguments
This is the design property that makes every cost-bound verdict in the record reusable.
cost_model(fee_schedule, channel, slippage_assumption, funding_series)No fee is a constant inside a function. A reader substitutes their own schedule
and re-runs any cost-bound verdict without editing logic. R-27 requires it, and
BL-EC-001 section 7 is only usable because of it.
A fee buried as a literal makes a verdict unfalsifiable by anyone else, which for a published record is close to making it worthless.
3. The terms, one at a time
Fee. From the schedule for the declared tier and channel. Both legs, and for a hedged pair both legs at their actual sizes:
pair round trip = fee_per_leg * ( 1 + beta ) + spread_per_legThe ( 1 + beta ) factor is routinely omitted. At a hedge ratio of 1.4 the pair
transacts 2.4 legs, not 2, and the omission understates cost most on exactly the
pairs a selector prefers.
Spread cost. Half-spread at the decision timestamp, read from the recorded
book rather than assumed. On the liquid set this ran around 3.0 basis points and
the census in E-0051 gives the full distribution: median 5.26, 25th percentile
2.40, 90th percentile 18.54.
Slippage. Walk-the-book against recorded depth at the intended size, not a
flat assumption. BL-IS-009 is the primitive.
Funding accrual. Realised funding over the holding period, signed by direction, and zero unless the position spans a settlement.
funding_bps = direction * sum over settlements in [t, t+h] of rate_k * 1e4The sign is the part that gets missed. A short position through a positive-funding settlement receives and a long pays, so omitting the term biases some strategies favourably and others unfavourably with no consistent direction. Omitting it is not conservative.
One strategy in the archive ran its entire evaluation with this term stubbed at zero. The defect was found during a falsification review and the strategy was rebuilt on a single data path so that shadow and live could not diverge again.
4. Quoted against measured
The model computes a floor. Measured end to end, the floor is optimistic.
| Channel | Quoted | Measured |
|---|---|---|
| Bybit taker to taker | 11.0 bps | 15.02 bps |
| Hybrid, 60-second passive budget | 8.85 to 12.17 bps |
The gap is the difference between the price a model assumed and the price that was available. A layer-zero check run against the quoted schedule is optimistic by roughly a third, and that correction should be applied by anyone reusing these figures.
5. The wait-budget finding
The model exposes a result that contradicts the first lever most operators reach for.
| Passive wait budget | Drift on unfilled names |
|---|---|
| 60 seconds | +11.7 bps |
| 1 hour | +102.2 bps |
Orders that fail to fill are not a random subset. They are the names moving away, which is why they did not fill, and their drift compounds while the order rests. Total execution cost therefore rises with the wait budget rather than falling.
Any cost model that treats an unfilled order as costless will get this backwards.
6. Interface
realised_cost(entry_ts, exit_ts, direction, size, instrument, envelope) -> CostBreakdown
Returns each term separately, never only the total.
Raises when:
any term is zero and zero is not the verified value for that term
the funding series does not cover the holding period
depth at the intended size is unavailable for the slippage termThe first check is R-17 expressed as a runtime guard. A funding term of zero is
legitimate for a position that does not span a settlement and is a defect for one
that does, and the model refuses to guess which case it is in.
Returning each term separately is not a convenience. It is what allowed the programme to see, on re-examination, that a strategy's reported return contained fourteen basis points of costs that had never been subtracted.
7. The instrument that failed
An earlier execution cost instrument double-counted adverse selection. It subtracted the markout and also subtracted a spread term that already contained it.
The instrument found the error itself and marked its own output superseded.
Both artifacts remain published, E-0013 as the original and E-0014 as the
replacement, because the pair is the evidence that the retraction happened.
R-26 requires this. An instrument found to be wrong retracts its output and is
retained alongside its replacement rather than quietly deleted.
8. Status of this instrument, stated precisely
The reference implementation published under 05_INSTRUMENTS/src/ assembles the
identity into one function. The research programme never had that function.
What existed during the programme was the terms, computed separately and at the point of use. A spread primitive. A markout primitive. A slippage adjustment living inside the stop simulator. Fee arithmetic written inline wherever a verdict needed it. Each piece was correct. Nothing owned the sum.
That is worth recording rather than glossing, for two reasons.
It is an honesty point. A reader should not infer from this document that a single audited cost model ran across the programme, because it did not, and the published implementation is new work written for this record.
It is also, in hindsight, part of the explanation for BL-IN-002. When four
cost terms live in four places and no function owns their sum, an absent term is
invisible: every individual piece looks right, and there is no single place where
you would notice that one of them is never called. A realised return computed
mid to mid survived review for weeks partly because there was nothing to compare
it against.
The remedy generalises past this codebase. Give the cost identity one owner. Make every term an explicit argument to it, so that omitting one is a missing argument rather than a silent zero, and return the terms separately so that a reader can see which of them is doing the work.
9. What it does not model
Market impact. No strategy in this record ran at a size where its own transacting moved the book, so the operator's own footprint is absent from every figure here. An operator running at size should treat every cost number in this record as a floor that omits them.
Fill probability. The model prices a fill that happened. Whether it would have
happened is BL-IS-008.
Financing beyond funding. Perpetual funding is the only carry term on this substrate. A reader on a venue with separate borrow costs needs an additional term.
10. Cross-references
BL-D-011 section 4 for the identity. BL-IN-002 for the incident. BL-EC-001
for the measured structure. BL-D-009 rules R-01, R-17 and R-27. Evidence
E-0013, E-0014, E-0051.
Copyright (c) 2026 Bijective Labs. All rights reserved.