Skip to content

Bid/ask footprints vs tick-direction data

By Author of ORDER FLOW — Market Mechanics

Two footprint charts of the same instrument, at the same moment, can show different numbers. Both can be working correctly, because they are built from different data.

Every reading layered on top of a footprint (delta, imbalances, absorption) inherits the accuracy of the classification underneath it.

What a footprint needs to know

A footprint splits each bar into price rows and shows, at every row, how much volume traded against the bid and how much against the ask.

BID selling ASK buying 21,302.00 12 48 21,301.75 25 71 21,301.50 80 35 21,301.25 92 18 Highest volume in the candle Δ -37 Candle delta
Schematic of a footprint candle on NQ. Values are illustrative.

To build that, the chart has to answer one question for every single execution: who crossed the spread? Was this a market buy lifting a resting offer, or a market sell hitting a resting bid? Every number in a footprint is an answer to that question.

There are two ways to answer it, with different accuracy.

Real bid/ask data

The exchange feed carries the trade and the state of the book around it. If the execution happened at the prevailing offer, it was aggressive buying. If it happened at the prevailing bid, it was aggressive selling. The classification is read directly from the data.

This requires a feed that carries quote data alongside trades, and a platform that keeps both in sync. On CME futures that data exists and is available.

Tick-direction inference

The cheaper approach uses only the trade series. If a print is higher than the previous print, it is labelled a buy. If it is lower, a sell. If it is unchanged, the previous label carries forward.

It is a reasonable heuristic and it is right a good share of the time. Prices generally do move up when buyers are lifting offers. But it is an estimate of the aggressor, and it fails in a systematic set of cases.

Where the two diverge

The tick rule has no way to distinguish between several executions printing at the same price. A sequence of trades at an unchanged price is classified by inertia: whatever the last direction was, that label repeats.

#PriceTick directionReal bid/ask 1 21,301.50 Buy Buy 2 21,301.50 Buy Sell 3 21,301.25 Sell Sell 4 21,301.25 Sell Buy Agree Diverge
Schematic comparison of four executions classified both ways. Illustrative sequence.

When aggressive sellers keep hitting a resting bid that does not give way, the price does not move, and a price-based rule sees nothing happening. The tick rule is least reliable in precisely the conditions where a footprint is most useful: heavy one-sided activity with little price displacement. That is the signature of absorption, and it is the thing the approximation is worst at recording.

The same problem reaches imbalances. An imbalance is a ratio between two numbers. If the classification feeding those numbers is inferred rather than observed, the ratio inherits the error, and a 3:1 threshold applied to estimated inputs becomes a different test from the same threshold applied to real ones.

And it reaches the edges of every bar. A bar's high can only be reached on an uptick, and every later print at that price repeats it, so under the tick rule the bid side of the high is empty by construction. The reading built on that cell, the unfinished auction, all but disappears from a reconstructed chart.

Why this compounds on the diagonal

To know who won the cross, an imbalance compares the ask of one level against the bid of the level below, because those are the two aggressors acting on opposite sides of the spread at the same moment. The horizontal comparison, bid against ask on the same row, measures something else: the delta of that level, built from executions that were never simultaneous.

BID ASK 21,301.75 — 210 21,301.50 40 180 21,301.25 310 — 5.25:1 1.7:1 Diagonal: who wins the cross Ask of one level against the Bid of the level below. Horizontal: the level’s delta Bid and Ask on the same level, which never execute together.
Schematic of the diagonal cross over three consecutive NQ levels. Values are illustrative.

The diagonal comparison depends on knowing which side each execution came from, at two adjacent price levels. Estimated inputs make that comparison noisier than the horizontal one, which is an uncomfortable combination: the reading that answers who won the cross is the one more sensitive to the quality of the data.

How to tell which one you are looking at

Platform documentation is usually explicit if you look for it. What to look for is whether the chart uses bid/ask volume from the quote feed, or estimates the aggressor from trade direction. Charting tools that work from a consolidated trade feed, without quote data, cannot do the former regardless of how the chart is labelled.

A practical check: on a fast, thin move, compare the delta your chart reports against the same bar on a platform with a direct exchange feed. Agreement in calm conditions and divergence in violent ones is the signature of inference.

What does not change

Better data makes the order flow record more faithful. Either version still describes the immediate past, with nothing to say about the next twenty minutes.

An approximated footprint read inside a coherent framework will serve you better than an exact one read without context. The data quality question only becomes the binding constraint once the framework is already in place. At that point it matters, because the readings you rely on most are the ones the approximation handles worst.

Accuracy is one of three limits. The second is scope: even a perfectly accurate footprint records executions rather than liquidity, which leaves a specific set of things outside the record entirely. The third is calibration: the same thresholds do not measure the same thing on NQ as on ES.