The Curve

by s7ven

Why your numbers differ from mine

Two traders watch the same instrument in the same minute on two platforms. One sees cumulative delta at plus 4,200. The other sees plus 2,850. Neither platform is broken, neither trader has misconfigured anything, and there is no correct answer to appeal to.

This is the most common source of confusion in order flow, and it is almost never explained, because explaining it requires admitting that the numbers are constructed rather than reported. What follows is the full list of places the construction can diverge, roughly in order of how much damage each one does.

What the exchange actually gives you

Start from the raw material, because most of the confusion comes from assuming it contains more than it does.

An exchange publishes two streams. A quote stream, saying what the best bid and offer are and how much sits there. And a trade stream, saying that a transaction occurred at a price, for a size, at a timestamp. That is it. There is no field marked aggressor. There is no field marked buy. The exchange knows perfectly well which order was resting and which one crossed, and in most feeds it does not tell you.

Everything in the delta family is therefore reconstructed by matching one stream against the other. The reconstruction is reasonable. It is also the origin of every discrepancy below.

1. Classification, and the trades in the middle

The basic rule is straightforward: a print at or above the prevailing offer is a buy, a print at or below the prevailing bid is a sell. Applied to a market with a one-tick spread and unhurried trading, it works almost perfectly.

Two things break it. First, prints land between the bid and the offer more often than people expect, especially in instruments with wider spreads, and something has to decide what those are. Most vendors fall back to the tick rule, inheriting the direction of the previous trade. Some use a midpoint test first. Some look further back. These produce different answers on the same data.

Second, and worse, the quote moves. The rule compares a trade against the prevailing quote, but which quote was prevailing at the instant the trade occurred is a question about clock synchronisation, not about markets. If your platform pairs a trade with a quote that arrived a few milliseconds late, that trade can be classified backwards. This happens most often in fast conditions, which is to say precisely when you are paying attention.

The uncomfortable consequence

Classification error is not evenly distributed. It concentrates in exactly the moments that order flow analysis is most interested in: fast markets, wide spreads, thin books, the open, the close, and news. The measurement is least reliable where it is most consulted.

2. Book granularity: what you can and cannot see

Book data arrives in two granularities and they are not interchangeable.

Market by price aggregates. It tells you there are 340 contracts at 5841.75. It does not tell you whether that is one order or forty, and when 20 of them fill, it simply reports 320.

Market by order publishes each order separately with its own identifier. Now you can see that the 340 was one order of 300 and eight small ones, watch queue position, and tell the difference between a level being genuinely refilled and a level that merely appears steady because a large iceberg keeps topping it up.

Any claim about absorption, iceberg detection, or order behaviour is a claim that requires market by order data to evaluate properly. Read on market-by-price data, the same observation is a guess. Feeds differ in which they carry, and the cheaper tier is almost always the aggregated one.

3. Tick filtering

Vendors process the raw trade stream before it reaches you. They may aggregate prints that occurred at the same price in the same instant into one record, drop prints flagged as out of sequence, or smooth spikes that look like errors.

This is not vendor misconduct. Raw exchange data contains genuine errors, and unfiltered feeds pass those errors straight into your volume figures. But filtered and unfiltered feeds of the same instrument produce different total volume, and therefore different delta, different profiles, and a different VPOC. If you have ever compared a volume profile across two platforms and found the point of control one tick apart, this is usually why.

4. Session boundaries

Futures trade nearly around the clock, so "the trading day" is not a fact about the market. It is a setting.

Every accumulating measurement depends on it. Session cumulative delta resets somewhere. VWAP anchors somewhere. A session volume profile covers a window that starts somewhere. Move that boundary by a few hours and every one of those changes, sometimes dramatically, because overnight activity gets included or excluded wholesale.

Platforms ship with different defaults. Two traders comparing a VWAP without first comparing session settings are comparing two different quantities that happen to share a name.

5. Continuous contracts and the roll

A futures instrument that appears to have years of history is a splice of many contracts. How the splice is made is a choice: roll on volume crossover, on open interest crossover, on a fixed date before expiry, with a price adjustment or without one.

Back-adjusted series shift historical prices to remove the roll gap, which keeps the chart continuous but means the historical prices are no longer prices anything ever traded at. Non-adjusted series keep real prices but contain jumps. For anything price-level based, a profile, a VWAP, a value area drawn across a roll, these produce visibly different results, and any long-run study built on the wrong choice is measuring an artefact.

6. Timestamps

Timestamp resolution and the point in the pipeline at which time is stamped both vary. Exchange-side timestamps, gateway timestamps and platform-receipt timestamps are three different clocks. Bar boundaries are drawn using whichever one your platform has, so a trade can land in a different bar on two systems, which moves it between footprint cells and changes the imbalances printed in both.

7. Fragmentation

Centralised futures markets are the easy case: one venue, one book, one tape. Equities are not. A delta figure computed from one venue’s feed describes that venue, not the security. This is a large part of why order flow tooling grew up around futures and remains most defensible there.

What to actually do about it

None of this makes the measurements useless. It makes them relative rather than absolute, and there is a practical discipline that follows from that.

  • Pick one feed and stay on it. Consistency matters far more than being right in some absolute sense that does not exist. A delta series is comparable to itself.
  • Write down your settings. Session start, tick filtering, roll method, imbalance ratio, profile period. Any observation you record is an observation under those settings, and it is not reproducible without them.
  • Never compare an absolute level across platforms. Compare shape, direction and relative magnitude. Those survive the differences; the level does not.
  • Distrust anything that depends on the exact number. If an observation stops holding when the imbalance ratio moves from 3.0 to 2.8, you have found a property of your settings, not of the market.
  • Know which tier of data your claim requires. Queue position and iceberg behaviour need market by order. Do not read them off an aggregated book and treat the result as evidence.

The underlying point generalises well beyond order flow. A derived measurement carries its derivation with it, and understanding the derivation is not pedantry. It is the difference between a tool and a superstition with a chart attached.


Related: trade classification, MBO and MBP, tick filtering, session boundary, data feed