Module 5 · Lesson 9 of 17 · Order flow and auction market theory · About 7 minutes
Reading Delta and Imbalance on a Bid/Ask Volume Chart
On this page
- What you will learn
- What does a bid/ask volume chart show?
- How is delta read on this chart?
- Where do bid and ask labels come from?
- What is an imbalance?
- What is a stacked imbalance?
- Bid and ask volume diagram
- How do you describe absorption as an observation?
- What is delta divergence?
- What are the limits of delta and imbalance readings?
- What this does not tell you about delta and imbalance
- Method in Practice
- Check yourself
- Reflect on your own process
- Sources
Before you read: Order Flow Basics: DOM, Time and Sales, Delta
ILLUSTRATIVE · Constructed for teaching · Not real market data · Not a recommendation or signal
What you will learn
- How a bid/ask volume chart (often called a footprint chart) lays out bid volume, ask volume and delta at each price.
- How diagonal imbalance and stacked imbalance are calculated, and which settings change them.
- How to describe absorption and delta divergence as observations, without turning them into forecasts.
This lesson extends order flow basics. Read that first for the meaning of the aggressor, bid volume and ask volume.
What does a bid/ask volume chart show?
If you could see every trade inside one candle, sorted by price and by which side initiated it, what would you look at first?
A bid/ask volume chart splits each bar into price rows. Each row shows two numbers:
- Bid volume: contracts that traded at the bid, classified as initiated by sellers.
- Ask volume: contracts that traded at the ask, classified as initiated by buyers.
They are often printed as “bid × ask”, for example 120 × 85. Many layouts add the row’s delta (ask volume minus bid volume) and a bar total at the bottom.
Platforms give this chart different names. This lesson uses “bid/ask volume chart” as the generic description.
How is delta read on this chart?
Is a bar with positive delta a bar where “buyers won”?
Delta appears at three levels:
- Per row: ask volume minus bid volume at one price inside one bar.
- Per bar: the sum of the rows. A constructed bar with 1,400 contracts at the ask and 1,100 at the bid has a bar delta of +300.
- Cumulative: the running total of bar deltas through the session (cumulative delta).
A positive bar delta says that, by the classification rule in use, more volume was initiated at the ask than at the bid during that bar. It does not say buyers “won”. Every contract has a buyer and a seller. Delta counts who crossed the spread, not who was right, and a bar can close lower with a positive delta.
Where do bid and ask labels come from?
How does a data feed decide whether a trade was a buy or a sell?
Each trade has to be tagged as bid-side or ask-side. Some exchange data feeds include a field that marks which side was the aggressor on each trade. Where that field is missing, software infers the side with a trade classification rule, for example comparing the trade price with the last bid and ask, or with the previous trade price. Different rules can label the same trade differently, especially when the quote changes in the same instant as the trade. Some charting tools do not classify individual trades at all by default. TradingView’s volume footprint, for example, estimates buy and sell volume from the direction of lower-timeframe bars unless its optional tick-based mode is turned on.
That is why two platforms can show different delta for the same contract and the same minute. Before comparing numbers across tools, find out which method each one uses.
What is an imbalance?
If 300 contracts lift the ask at one price and 60 hit the bid one row below, is that lopsided?
On a bid/ask volume chart, an imbalance is a row where one side’s volume is much larger than the other side’s, by a ratio you choose. Many platforms compare diagonally: ask volume at one price against bid volume one row below.
A worked constructed example with a 3-to-1 threshold:
- Ask volume at 100.25: 300. Bid volume at 100.00: 60.
- Ratio: 300 ÷ 60 = 5.0, which is above 3.0, so the platform marks an ask imbalance at 100.25.
- Ask volume at 100.00: 120. Bid volume at 99.75: 100.
- Ratio: 120 ÷ 100 = 1.2, below 3.0, so no imbalance at 100.00.
Change the threshold to 1.1 and the second row is marked too. Change it to 6.0 and the first one disappears. Some platforms also let you set a minimum-volume filter so that 3 against 1 does not count. The imbalance is therefore a product of the data and your settings together.
What is a stacked imbalance?
Does it mean more when several imbalances sit in a row?
A stacked imbalance is several consecutive rows with imbalances on the same side, for example three ask imbalances at 100.25, 100.50 and 100.75. It describes a stretch of prices where one side initiated much more volume than the other through several ticks in a row.
As with single imbalances, the count needed to call it “stacked” is a setting. Some traders mark stacked imbalances as zones on the bars that follow. That is a choice to watch those prices, not evidence that anything happens there.
Bid and ask volume diagram
Illustrative diagram constructed for teaching. Not real market data.
The diagram shows two constructed bars as a bid/ask volume chart: bid × ask numbers in each row, row delta, a bar delta total, diagonal comparisons with a 3-to-1 threshold, and three stacked ask imbalances highlighted.
How do you describe absorption as an observation?
What can you write down about heavy volume that does not move price, without guessing who was behind it?
Absorption is the word traders use when a lot of aggressive volume hits one side and price makes little or no progress. On a bid/ask volume chart you might see large bid volume on several rows near a low, while the low itself barely changes.
Here is a descriptive version for a constructed bar:
“Between 99.50 and 99.75, 2,600 contracts traded at the bid in this bar. The bar’s low was 99.50, the same as the previous two bars.”
And here is a story version:
“A big buyer absorbed all the selling and is defending 99.50.”
The first is an observation you can check against the data. The second adds an identity, an intention and an implied forecast, none of which the chart contains. Large passive interest at one price could come from one participant or many, could be refilled or pulled at any moment, and says nothing on its own about what comes next. Practice writing the first version.
What is delta divergence?
When price makes a new high but cumulative delta does not, what has actually been observed?
Delta divergence describes a mismatch between price and delta: price reaches a new session high while cumulative delta stays below its own earlier peak, or the reverse at a low. The observation is precise: two series moved differently over a stretch of time.
People attach many interpretations to divergence. Treat them as hypotheses that need the testing steps in honest backtesting. A divergence can persist through a long move or vanish after one bar, and it depends on where you start counting cumulative delta.
What are the limits of delta and imbalance readings?
Which parts of these numbers come from the market, and which from your settings?
- Classification error. Bid and ask labels depend on the feed and the rule used to infer them.
- Thresholds are choices. The imbalance ratio, minimum volume and stack count change what is marked.
- No identities. The chart cannot show who traded or how many separate participants were involved.
- Passive side is partly hidden. Delta counts aggressive trades. Resting orders that were canceled before trading never appear.
- One market at a time. Activity in related instruments, such as an ETF tracking the same index, is not on the chart.
- Hindsight. Features look clearer once you know what happened next.
What this does not tell you about delta and imbalance
- Positive delta does not mean price has to rise, and negative delta does not mean it has to fall.
- An imbalance, stacked or not, is not a level that price has to respect.
- Absorption is an observation about volume and price change, not proof of a large buyer or seller.
- Delta divergence describes two series moving differently. It does not forecast a turn.
Method in Practice: stacked imbalance as a condition
Fictional example. John, Harbor Index futures, the prices, times, costs and results are all invented for teaching. This shows how a written plan can be built and tested. It is not a recommendation, and nothing here says how often this idea works.
Try it on a real chart. Test this idea yourself on past sessions with bar replay. Keep your own count, including the days with no trade.
The idea. A stacked imbalance is a run of price rows where one side traded much more than the other, by a ratio you set. John uses it as one condition on a breakout above a level he marked in advance. The threshold is his setting, and the no-trade replay shows how one setting decides whether a trade happens at all.
John's plan
- Setup
- range high 101.00, marked on the pre-session map
- Enter if
- a 5-minute bar closes above 101.00 and has at least three stacked ask imbalances (3-to-1, diagonal). Buy.
- Wrong if
- a 5-minute bar closes below 100.85
- Manage
- take half at 101.50, the rest at 101.90 or by 14:30
- Risk
- $150 maximum, costs included
Three outcomes
-
Worked: the breakout carried → +$96
-
Failed: stacked imbalances, then a close back below → −$86, inside the limit
-
No trade: only two rows passed 3-to-1 (the third was 2.4-to-1) → $0
Show the full replays
| Item | Plan |
|---|---|
| Context | Range high 101.00 from the pre-session map. Bid/ask rows at 0.05 |
| Entry condition | A 5-minute bar closes above 101.00 with three or more consecutive rows where ask volume ÷ bid volume one row lower is at least 3.0. Buy 2 at market after that close |
| Wrong if | A 5-minute bar closes below 100.85. Exit at market after that close |
| Management | Take profit on half at 101.50 (limit) and move the exit for the rest to the entry price (stop). Rest at 101.90 (limit). Time limit 14:30 CT |
| Risk cap and size | $150. Exiting just under 100.85 is planned to cost about $50 per contract, so 2 contracts |
| Not trading if | Scheduled major release within the hour, or no setup by 12:00 CT |
Replay A: worked
| Time (CT) | What happened | John |
|---|---|---|
| 10:30–10:35 | Closes 101.12. Diagonal rows: 300÷60 = 5.0, 270÷80 = 3.38, 250÷70 = 3.57 | Three stacked: buys 2 at market, filled 101.17 |
| 10:35–11:10 | Trades 101.50 at 11:10 | Sells 1 at 101.50 (limit). Exit for the other moves to 101.17 |
| 11:10–12:50 | Never back to 101.17, trades 101.90 at 12:50 | Sells the last 1 at 101.90 (limit) |
Result after costs: +0.33 point = +$33, +0.73 point = +$73, commissions −$10. Net +$96. Journal: "Level, close and stack all present. Both exits were limits."
Replay B: failed
| Time (CT) | What happened | John |
|---|---|---|
| 09:50–09:55 | Closes 101.08. Rows: 320÷64 = 5.0, 250÷70 = 3.57, 210÷65 = 3.23 | Three stacked: buys 2 at market, filled 101.13 |
| 09:55–10:00 | Reverses, closes 100.80 | Wrong-if met: sells 2 at market, filled 100.75 |
| 10:00–15:00 | Rotates back inside the range | Done for the idea |
Result after costs: 2 × −0.38 point = −$76, commissions −$10. Net −$86. Journal: "A clean stack, then a full reversal within five minutes. The stack was a condition, not a promise."
Replay C: no trade
| Time (CT) | What happened | John |
|---|---|---|
| 11:15–11:20 | Closes 101.10. Rows: 300÷60 = 5.0, 270÷80 = 3.38, 190÷79 = 2.41 | Only two rows reach 3.0: no trade |
| 11:20–12:00 | Drifts 100.95–101.25 | No setup. 12:00 cutoff |
Result: $0. Journal: "At 2.4-to-1 this would have been a trade. My threshold is 3.0, so it wasn't."
Test it yourself
- Write the ratio, minimum volume and stack count first, and never change them mid-test.
- Replay every close above a marked level. Split the results by "had a stack" and "didn't".
- Re-run with a 2.5-to-1 and a 4-to-1 threshold. A rule that only works at one exact setting is fragile (Overfitting and Repainting: When Indicator Results Look Too Good).
Where it breaks
- Bid and ask labels depend on your feed's classification rule (this lesson).
- A stack shows where aggression happened, not who traded or what comes next (the failed replay).
- One setting decides whether the trade exists at all (the no-trade replay).
Calculators: position sizerisk/rewardexpectancy
Reflection question: Which numbers in your plan are settings you chose, and have you tested what happens when they change?
Check yourself
Reflect on these; there is no score.
- A row shows
140 × 220. What is its delta? Hint: ask minus bid. - Ask volume at 101.00 is 180 and bid volume at 100.75 is 50. With a 3-to-1 diagonal threshold, is 101.00 an ask imbalance? Hint: divide 180 by 50.
- Rewrite “sellers got trapped at the low” as a sentence that only reports volume and price. Hint: give prices, contract counts and whether the low changed.
- Two platforms show different bar deltas for the same minute. Name one reason why. Hint: how is each trade tagged as bid-side or ask-side?
Trademark note. Footprint is a registered trademark of its owner. ‘Bid/ask volume chart’ is used here as a generic description.
Reflect on your own process
- Which imbalance ratio, minimum volume and stack count does your written setup use, and why those numbers?
- How do you note which classification method produced the delta values in your journal?
- When you describe absorption in your notes, which numbers do you record so someone else could check it?
- Which numbers in your plan are settings you chose, and have you tested what happens when they change?