A crypto order book is locked when its best bid equals its best ask and crossed when the best bid exceeds the best ask. With spread defined as ask minus bid, those observations produce zero and negative spreads. First check whether the two prices belong to one venue, one instrument and one valid book state. A combined display, delayed update or auction can require a different diagnosis; none establishes that both prices can be traded together.
Start with the raw quotes
The best bid is the highest displayed buying price; the best ask is the lowest displayed selling price. Define the signed spread as best ask − best bid, in the quote asset per unit of the base asset. Keep that sign when investigating an unusual book.
For a fictional ABC/USDT spot market, a bid of 99.90 and ask of 100.10 produce a positive 0.20 USDT spread. A bid and ask both at 100.10 produce a locked observation. A bid of 100.15 against an ask of 100.10 produces a crossed observation: the spread is −0.05 USDT per ABC.
This terminology describes the relationship between the quotes. It does not explain how they arrived on the screen. The same zero can come from equal raw prices or a display that rounds two different prices together. The same negative number can describe quotes from separate venues or an incorrectly reconstructed local book.
Do not take the absolute value or clamp negative spreads to zero before validation. Both operations erase the distinction you need to investigate. If either side is missing, the spread is unavailable; replacing a missing ask with zero manufactures a cross.
The bid-ask spread guide covers ordinary spread measurement and execution costs. The question here is narrower: what evidence explains equality or an inverted pair of quotes?
One matching engine and two venues are different cases
In ordinary continuous matching, an eligible incoming buy order priced at or above an available ask can trade against resting sell orders. The unmatched remainder is handled under the venue's order rules. A marketable limit price is therefore not automatically a new resting bid at that price.
For one documented implementation, Coinbase Exchange describes a continuous order book, price-time priority and matching at the resting order's price. Its order lifecycle distinguishes receiving an order from the unfilled portion becoming open. Coinbase Exchange matching engine documentation.
Consequently, an enduring crossed view of a venue supposedly in ordinary continuous trading warrants investigation. Check market mode, feed reconstruction and publication boundaries before concluding that the matching engine is offering both sides. A received order is not proof of a resting quote, and a screen's sign alone cannot identify an engine fault.
A combined display has a different construction. It may select the highest bid from Venue B and the lowest ask from Venue A. The two exchanges have separate matching engines. Neither automatically matches its customers' orders against the other exchange's book.
Even with accurate concurrent data, this combined spread describes two locations. It does not reserve either quote, provide balances at both venues or coordinate two fills. Label it as a composite and preserve the venue attached to each selected side.
A delayed ask makes a false cross
Consider this entirely hypothetical replay of ABC/USDT spot quotes. All prices are USDT per ABC. Source and local clocks are stipulated to agree so the example isolates message delay; these are not measured exchange latencies.
At source time 12:00:00.000, A quotes 99.90/100.10 and B quotes 99.85/100.15. Their initial observations arrive locally at 12:00:00.005 and 12:00:00.006 respectively. At source time 12:00:00.030, A changes to 100.05/100.30, but this update does not arrive until 12:00:00.080.
B changes to 100.10/100.20 at source time 12:00:00.040, arriving at 12:00:00.045. It then changes to 100.15/100.25 at source time 12:00:00.060, arriving at 12:00:00.065. The application always displays the last received state from each venue.
The table shows local display time within the same 12:00:00 UTC second. Each venue cell lists bid/ask. The composite takes the maximum stored bid and minimum stored ask.
| Display time | Stored A quote | Stored B quote | Composite spread |
|---|---|---|---|
| .006 | 99.90 / 100.10 | 99.85 / 100.15 | +0.20 |
| .045 | 99.90 / 100.10 | 100.10 / 100.20 | 0.00, locked |
| .065 | 99.90 / 100.10 | 100.15 / 100.25 | −0.05, crossed |
| .080 | 100.05 / 100.30 | 100.15 / 100.25 | +0.10 |
At .045, the display selects B's 100.10 bid and A's old 100.10 ask. At .065, it selects B's 100.15 bid against that same old ask: 100.10 − 100.15 = −0.05.
Neither venue's individual quote is crossed at any step. More significantly, A stopped offering 100.10 at source time .030, before either later B quote existed. The negative composite never represented concurrent source quotes in this constructed history. When A's delayed update arrives, the selected bid and ask are both from B and the spread becomes 0.10.
A screenshot of the .065 row cannot establish that history by itself. You need the source observations, arrival times and identities. The market data freshness guide explains why event time, arrival time and the decision clock answer different questions.
A negative spread does not validate a paired trade
Suppose the crossed display also shows 3 ABC at A's cached ask and 2 ABC at B's bid. The smaller displayed quantity limits the apparent common size to 2 ABC. Multiplying the 0.05 USDT difference by three would already overstate the observation.
Now make a separate counterfactual assumption: both quotes actually exist together, both orders fill completely at those prices, and each venue charges an invented 0.10% fee in USDT. Buying 2 ABC costs 200.20 USDT before fees; selling 2 receives 200.30. The gross difference is 0.10 USDT.
The assumed purchase fee is 0.20020 USDT and sale fee is 0.20030. Total fees of 0.40050 turn the result into −0.30050 USDT, even before any other costs. These are illustrative rates, not a venue fee schedule.
Actual evaluation would also require available funds and inventory at the respective venues, compatible instruments, current depth, eligibility and a plan for partial or failed orders. A filled purchase and rejected sale leave an exposure. Moving assets afterward introduces another process; the crossed display supplies no settlement or withdrawal guarantee.
The auction exception is explicit
In an auction, a venue can intentionally collect orders without continuously matching them.
Coinbase Exchange's product-book documentation, checked on 28 October 2026, states that during the auction's collection phase, orders do not match and the book may appear crossed in market data. The response identifies auction mode, and the documented auction states distinguish collection, opening and completion. Its indicative values can change before trading resumes and are not firm quotes. Coinbase Exchange product book and auction details.
That is a documented exception for a particular implementation. Do not infer that another venue has the same phases or exposes the same fields. Likewise, an indicative opening price or anticipated post-auction bid and ask should not be substituted for the current continuous book. The Coinbase auction channel documentation explicitly describes those anticipated quotes.
Preserve the market mode with the observation. Otherwise, a correct auction message can be mislabeled as an execution-ready continuous quote, or an ordinary feed error can be excused as an auction that never existed.
Diagnose the representation before resetting the feed
Begin with precision. A raw bid of 100.101 and ask of 100.104 have a positive spread of 0.003. Rounded to two decimal places, both display as 100.10. That screen appears locked even though the source prices differ. Use the raw decimal prices or documented price ticks for equality checks.
Grouping adds another interpretation layer. A row label can describe a bucket containing multiple prices. It is not necessarily a price at which the entire displayed quantity is available. Check the order-book price-level grouping explanation before comparing rounded or grouped rows as executable quotes.
Next inspect reconstruction. If one message changes both sides, publishing the result after only its bid changes can temporarily combine a new bid with an old ask. Publish after the complete documented update boundary. Retaining a deleted ask or merging a fresh snapshot with unrelated incremental updates can create a longer-lived error.
For Binance Spot's documented diff-depth feed, reconstruction combines buffered events with a snapshot and update identifiers. If an event's first update ID is greater than the local update ID plus one, Binance instructs the consumer to discard the local book and rebuild. Its level quantities replace existing quantities, and zero removes a level. These are feed-specific rules. Binance Spot local order-book procedure.
The absolute versus delta quantity guide explains why confusing replacement values with changes corrupts the reconstructed quantities. A recent timestamp does not repair a missed deletion or an incorrect update operation.
Finally, verify identity. ABC/USD, ABC/USDT spot and an ABC perpetual contract are different markets. A currency conversion also needs its own rate, time and cost assumptions. Do not describe an unadjusted comparison between them as a locked or crossed book for one instrument.
A worksheet for the next unusual reading
Capture the evidence before refreshing away the incident. This compact record supports both a manual investigation and an automated data-quality check.
| Record | What to verify |
|---|---|
| Venue and product on each side | Same book, or explicitly labeled composite; exact base, quote and contract type |
| Raw bid, ask and quantities | Positive available sizes, original precision, correct side sorting |
| Source and arrival times | Quote age, delayed arrival, clock uncertainty and asynchronous sides |
| Market mode | Continuous trading, auction, pause or another documented state |
| Snapshot and update references | Valid reconstruction under the particular channel's rules |
| Grouping and display settings | Bucket labels or rounding have not replaced actual best prices |
| Intended use | Research observation, diagnostic alert or input to an execution decision |
Recompute the signed spread only after both sides are identified. If a side is absent, retain an unavailable result. If raw prices are unequal but formatted prices match, record a display-precision issue. If the venue is collecting auction orders, interpret the record under its auction rules. If reconstruction is invalid, withhold that book from price-dependent decisions while the documented recovery runs. Treat an unexplained raw lock or cross on one continuous book as unresolved even if the socket is connected.
For a valid cross-venue difference, keep the constituent quotes and assess the two locations separately. The next useful record is the raw pair of observations with their times, quantities and market modes. Those details let you distinguish a quote difference from an auction or a display that combined incompatible information.
