Almost everything on this site — delta, the footprint, absorption — is built on one simple idea: every trade has an aggressive side and a passive side. Once that clicks, order flow stops being a wall of numbers and starts being a story about who wanted it more. This article explains the idea from the ground up: market vs limit orders, how the exchange knows who the aggressor was, and what that data can and can't tell you.
(Quick note: nothing here is financial advice — this is how the machinery works.)
Two kinds of orders
A limit order says: "I'll buy, but no higher than this price" (or sell, no lower). If it can't fill right away, it doesn't disappear — it rests in the order book and waits. It might fill later, at its price or better. It might never fill at all.
A market order says: "fill me now, at whatever the best available price is." No waiting, no price guarantee — it pays for speed.
That's the mechanical difference. The more useful difference is behavioral:
- Passive orders (resting limits) provide liquidity. They sit in the book — the entire DOM is nothing but passive limit orders waiting.
- Aggressive orders take liquidity. They cross the spread and execute against whatever is resting.
One subtlety worth knowing: aggressive is about behavior, not order type. A limit order priced through the current best price fills immediately too — it acts aggressively on arrival. But as a simple rule: market orders are always the aggressor.
Every trade needs both
Here's the part that quietly fixes a lot of confused trading talk. A trade only prints when an aggressive order meets a passive one. For every contract bought, one is sold — always. Buy volume and sell volume are identical by definition.
So "price went up because there were more buyers than sellers" is sloppy language. There were exactly as many of each. What actually differed: more buyers were willing to cross the spread and pay now than sellers were willing to absorb passively at that price. The imbalance is in urgency, not headcount.
That's the entire foundation of order flow analysis in one sentence: volume tells you business was done; the aggressor side tells you who forced it.
How the exchange knows who the aggressor was
On CME futures this isn't guesswork — the exchange's own market data carries an aggressor flag on each trade. The practical convention:
- Trade executes at the ask → an aggressive buyer lifted the offer → tagged as buying.
- Trade executes at the bid → an aggressive seller hit the bid → tagged as selling.
This tagging is the raw material for the tools this site covers. The bid×ask columns in a footprint chart are aggressor data laid out per price. Delta is aggressive buys minus aggressive sells, and CVD is delta's running total — the full story is in Delta & Cumulative Delta.
Two honest footnotes. Even on CME, a small slice of trades carries no aggressor tag, so delta never captures 100% of the tape. And on markets without an exchange flag — spot crypto feeds, CFDs — platforms have to guess the aggressor from price context, which is why delta numbers can differ between platforms. Exchange-traded futures are the clean case, which is one more reason order flow tools work best there.
Stop orders: sleeping aggression
A stop order doesn't rest in the visible book — it's held as a trigger. When price trades at the stop level, it activates and executes aggressively in the direction of the move (on CME, with a built-in protection band so it can't fill at absurd prices).
That makes stop clusters something like stored fuel: dormant aggression that ignites all at once when a level breaks. It's the mechanic behind stop runs — covered properly in Liquidity Sweeps & Stop Hunts.
How price actually moves
Price isn't pushed by opinion — it moves one tick at a time through a simple fight:
- Price moves when aggressive orders eat through all the passive liquidity resting at a level. The next level becomes the new best price.
- Price stalls when the passive side refills the level as fast as aggression consumes it. Heavy aggressive volume with no price progress is absorption — the passive side winning. That pattern has its own article: Absorption vs Exhaustion.
- Price moves fast where the book is thin — even modest aggression gaps through empty shelves.
So the honest summary: it takes aggression to move price, but it takes absent or overwhelmed passive opposition for the move to travel.
What this can't tell you
Order flow data is honest about what happened, silent about why:
- You can't see who is behind an order or their reason. Aggressive selling might be a fund opening shorts — or longs' stops getting hit (= sell stops). The tape doesn't say.
- Aggressor data describes what already executed. It's context for a decision, not a prediction machine.
- Big resting orders in the DOM are intentions, not commitments — they can be pulled a second later. Prints are facts; the book is a promise.
A few common mix-ups
- "High volume = buying pressure." Volume alone has no direction — every trade is a buy and a sell. Direction only appears when you split volume by aggressor.
- "Limit orders are the smart money." Both institutions and retail use both types constantly; execution algos fire aggressive orders all day. Order type says nothing about who's behind it.
- "Positive delta means price must rise." Delta can be strongly positive straight into absorption — and price turns anyway. That divergence is one of the most-watched signals in order flow.
What you need
Reading the aggressor battle needs a platform that shows it: footprint, delta, DOM. ATAS is built exactly for this, with a free trial to look around.
The bottom line
Every trade is an agreement between someone impatient and someone waiting. The impatient side pays the spread and gets tagged as the aggressor; the waiting side builds the book that aggression has to eat through. Price moves when one side's urgency beats the other side's patience — and delta, footprints, and absorption are just different ways of watching that one fight.