Stacked Imbalance Indicator: Formula, Settings and How to Read It
Stacked Imbalance marks the places inside a bar where several diagonal bid-versus-ask imbalances sit on consecutive price levels. With the default settings it takes at least three consecutive levels whose diagonal ratio reaches 3, each carrying at least 10 contracts on the dominant side.
Senzoukria · Indicators · Updated September 2026
Stacked Imbalance ships with the Senzoukria desktop app, in the Delta group of the indicator catalogue. It is drawn on the price chart.
What Stacked Imbalance measures
Every level is tested with the usual footprint diagonal, comparing one side's volume at a price against the opposite side's volume one tick away; the level qualifies when the ratio reaches k and the dominant side carries at least minQty. Consecutiveness is strict, qualifying levels being exactly one tick apart, and a gap in the price grid ends the stack instead of being bridged. Where a stack is found, a square is drawn on the price chart at the price of its highest level, for buy-side and sell-side stacks alike; that placement belongs to this definition, while the marker variant of the same detection draws arrows at the top and base instead. If the instrument's tick size is unknown, nothing is drawn, because the diagonal needs the real grid and the grid is never guessed.
The formula, as implemented
This is not a description of how the indicator is usually defined elsewhere — it is what the shipped code computes, documented next to the implementation:
Pile d'imbalances diagonales (formule canon via `diagonalImbalances`, ratio k / minQty) : ≥ `minStack` niveaux STRICTEMENT consécutifs (+1 tick exactement — un trou de grille CASSE la pile, même argument structurel que tape.ts) portant le même flag. Un CARRÉ au prix du PLUS HAUT niveau de la pile, côté buy comme sell (règle de cette def — diffère de `stacked-imbalance-marker` (tape.ts), même détection mais flèches sommet/base). Tick size inconnu → aucun marqueur (la diagonale exige la grille de l'instrument, canon : jamais deviné). Défauts k=3, minQty=10, minStack=3 — les mêmes que l'indicateur stacked du repo.
How to read it
- A buy-side stack marks consecutive levels where aggressive buying dominated the other side of the diagonal. It describes where that side concentrated, not what price does next.
- The square sits on the top level of the stack in both directions, so on a sell-side stack it marks the upper edge of the zone and the levels concerned run downward from it.
- Where the stack sits inside the bar matters: one at a bar extreme and one in the middle of the range are different contexts, so check where price closed relative to it.
- Watch what happens when price returns to the zone. Trading straight back through a stack without reaction is as informative as a reaction to it.
- Markers everywhere means the filters are loose for this instrument, so raise minStack or k; none at all on an active instrument usually means they are too strict for its typical level volumes.
Parameters and defaults
Ratio k defaults to 3 and accepts 1 to 20 in steps of 0.5, setting how far one diagonal side must exceed the other. Min qty defaults to 10 and drops levels that pass the ratio on negligible volume, 3 contracts against 1 satisfying a ratio of 3 while carrying little meaning. Min stack defaults to 3, with a range of 2 to 20, and sets how many consecutive qualifying levels are required before anything is drawn. Buy and sell colors default to #26a69a and #ef5350.
| Parameter | Type | Default | Range |
|---|---|---|---|
| Ratio k | number | 3 | 1 – 20 |
| Min qty | number | 10 | 0 – 10000 |
| Min stack | number | 3 | 2 – 20 |
What it does not show
This overlay describes traded volume by aggressor side at each price and says nothing about resting liquidity, which comes from the order book and is a separate data stream. It needs per-level bid and ask volume, so a feed that does not split trades by aggressor produces no stacks at all, and market data is billed by the provider separately from the application subscription. On instruments with wide ticks or thin activity, levels are often empty and the strict one-tick rule keeps stacks from forming even where pressure is plainly one-sided. Being computed per bar, a stack also depends on how bars are built, and the same session read with a different bar type gives a different set of markers.
Using it in Senzoukria
Add it from the Indicators panel of any footprint chart or candle chart. It runs on futures data from Rithmic or Databento and on crypto pairs from Binance and Bybit, on the same engine — the calculation does not change with the venue, only the data feeding it does. Market data subscriptions are billed by the provider, separately from the app.
Related indicators
- Trades Delta — Delta
- Bid/Ask Ratio % — Delta
- Delta Z-Score — Delta
- Delta Streak — Delta
- Delta Divergence — Delta
- Delta at High — Delta
See the full indicator library, or start with the order flow guide if you are new to reading aggression, delta and absorption.
Frequently asked questions
- What is a stacked imbalance in orderflow?
- A group of consecutive price levels inside one bar, each showing a strong diagonal imbalance in the same direction. A single imbalanced level is common; several in a row on adjacent ticks describe aggression concentrated over a contiguous price zone. It remains a description of how volume was distributed in that bar.
- How many levels are needed for a stacked imbalance?
- Three by default, and the minimum is configurable from 2 to 20. Levels must be exactly one tick apart: a gap in the price grid between two qualifying levels ends the run and a new one begins, rather than the gap being ignored. That strictness is why fewer markers appear on thin instruments.
- Why are no stacked imbalance markers showing on my chart?
- Three causes account for most cases. An unknown tick size suppresses every marker, since the diagonal cannot be computed without the instrument's real grid. Filters may be set too high for the instrument, a min qty of 10 removing every level that trades below that size. And a data source without per-level bid and ask volume gives the diagonal comparison nothing to work on.