Diagonal imbalance
A diagonal imbalance is a footprint imbalance computed across two adjacent price levels: the ask volume at one price is compared with the bid volume one tick below it, rather than with the bid on the same row. This convention, associated with ATAS, pairs the two prints that an aggressive order actually crosses when it moves the market by one tick.
Senzoukria · Glossary · Updated September 2026
Why the comparison is offset by one tick
When a buyer lifts the offer at price P and the market moves up, the sellers who were hit last were resting at the bid one tick lower. Comparing ask(P) with bid(P − 1 tick) therefore puts the aggressor's print next to the print of the side it overwhelmed. The same logic applies in reverse for a sell imbalance, where bid(P) is compared with ask(P + 1 tick). This is the reasoning behind the diagonal convention that ATAS popularised and that Senzoukria follows.
Diagonal versus vertical
Neither convention is wrong. What matters is that a chart, a backtest and a written rule all use the same one, and that results computed under one are not compared with results computed under the other.
| Aspect | Diagonal (ATAS, Senzoukria) | Vertical (Sierra Chart Numbers Bars default) |
|---|---|---|
| Cells compared | ask(P) versus bid(P − 1 tick); bid(P) versus ask(P + 1 tick) | bid(P) versus ask(P) on the same row |
| Rows without a neighbour | No buy check on the lowest row, no sell check on the highest row | Every row can be tested |
| Sensitivity to price grouping | High: regrouping changes which diagonals exist | Lower, but the row totals still change |
| Tick size required | Yes, the grid defines the neighbour | No |
In Senzoukria
The footprint highlights diagonal imbalances in the cells, and the Diagonal Imbalances indicator in the Tape & flow group plots the number of diagonal flags per bar in its own pane, with the Ratio k and Min qty parameters exposed (defaults 3 and 10). A level can carry both a buy and a sell flag, and each flag counts once. If the instrument's tick size is not known, the indicator returns no value rather than guessing a grid, because the diagonal neighbour cannot be located without it.
For scripting, the Buy imbalances template reads diagonal imbalances level by level from the footprint, which is a starting point for a strategy that decides on per-level flags. Such a strategy needs the tick drain: server bars that carry OHLC, volume and delta but no footprint levels cannot feed it.
Points to check before trusting a flag
- The bar's price grouping is one tick per row, or the ratio has been re-derived for the grouping in use.
- The minimum quantity is set for the contract being traded, not inherited from another product.
- Hollow bars, where some prices inside the range never traded, are handled by referring to P minus one tick size rather than to the next traded row.
- The data feed provides aggressor-tagged trades; a feed of quote updates cannot produce a footprint at all.
Related
This page in other languages
Frequently asked questions
- Does a diagonal imbalance need a specific bar type?
- No. The test runs on any bar that has bid and ask volume per price level, whether the bar closes on time, ticks, volume or range. The bar type changes how much volume each column holds and therefore how often the ratio fires, so the ratio and minimum quantity should be reviewed when the bar type changes.
- Can a single price level be both a buy and a sell imbalance?
- Yes, under the diagonal convention. The buy test compares the ask at P with the bid below, and the sell test compares the bid at P with the ask above; the two tests use different neighbours and can both pass. The Diagonal Imbalances indicator counts each flag separately, while the Imbalance Levels indicator counts the level once.