Trade classification (aggressor side inference)
Trade classification is the rule that assigns each executed trade to the buy side or the sell side, that is, decides which party took liquidity. Some feeds carry the aggressor side explicitly; others require it to be inferred from the price of the trade relative to the prevailing bid and ask, and the choice of rule changes every delta computed downstream.
Senzoukria · Glossary · Updated September 2026
Explicit side versus inferred side
Every execution has a buyer and a seller. Classification is about who initiated it. On CME futures feeds such as those reached through Rithmic or Databento, each trade carries an aggressor flag stated by the exchange, so a footprint counts volume at the ask when the buyer was the aggressor and volume at the bid when the seller was. Delta is then ask volume minus bid volume per price level.
On Binance, the feed documents a buyer-is-maker flag: if the buyer was the maker, the seller was the aggressor, and the trade goes to the bid side. Where no side is transmitted at all, as with many spot forex feeds or candle-only sources, an inference rule is applied instead: compare the trade price with the quote at that moment (quote rule), or with the previous trade price (tick rule), and label accordingly. The Lee-Ready procedure combines the two.
Why the rule matters
- Two applications reading the same day can print different deltas if one uses the exchange flag and the other infers from price movement.
- Inference degrades on trades executed at the midpoint, on spread changes and on feeds that batch or delay quotes.
- A candle-derived split of volume into buy and sell is an estimate of direction, not an observation of aggression, and should be presented as such.
- Session boundaries, price grouping and dropped events also change totals; classification is one of several reasons footprints disagree.
In Senzoukria
The desktop footprint uses the aggressor side carried by the feed. For Rithmic and Databento the side is the exchange's; for Binance and Bybit it is derived from the documented maker flag. The Bid × Ask cell type shows the two sides per price inside each candle: the left number is what traded at the bid, the right number what traded at the ask. The L1 CSV export from the Replay screen writes every tick with its timestamp, price, size and aggressor side, so the classification applied to a session can be inspected outside the application.
Indicators in the catalogue that depend on this classification include bar delta, cumulative session delta, buy/sell volume and the aggression ratio. When a source does not provide a side, the application does not invent one and the affected values are absent rather than shown as zero.
Common mistakes
- Comparing footprints from two tools without first checking which classification rule each one applies.
- Reading a broker's client-position ratio as aggressor data: it is a snapshot of open positions at one broker, not executed aggression at a venue.
- Assuming that a large delta proves buying: with an inferred rule, part of the number is the rule's error.
Related
- Order flow data for forex
- Crypto order flow and footprint charts
- Bar delta indicator
- Aggression ratio indicator
- Tick data
This page in other languages
Frequently asked questions
- What is the difference between the tick rule and the quote rule?
- The quote rule compares the trade price with the bid and ask in force at the time: at or above the ask is a buy, at or below the bid is a sell. The tick rule looks at the direction of the last price change: an uptick is a buy, a downtick a sell. The quote rule needs synchronised quotes; the tick rule needs only trades but misclassifies more often when prices oscillate within the spread.
- Does an exchange-provided aggressor flag remove all ambiguity?
- It removes the inference step, which is the largest source of disagreement. Ambiguity can remain in how a platform handles implied trades, spread legs, block trades and trades reported without a side. The safe reading is that the flag states who took liquidity in the matching engine, and everything else is a platform convention to check.