Aggression Ratio Indicator: Formula, Settings and How to Read It

Aggression Ratio compares the buying that traded in the upper half of a bar with the selling that traded in the lower half. It answers a geometric question about a footprint bar: which side was willing to chase price away from the middle of the range.

Senzoukria · Indicators · Updated September 2026


Aggression Ratio ships with the Senzoukria desktop app, in the Tape & flow group of the indicator catalogue. It is drawn in its own panel below the chart.

What Aggression Ratio measures

The pivot is the arithmetic midpoint of the bar, half the sum of the high and the low. The numerator sums buy volume at every level strictly above that midpoint, the denominator sums sell volume at every level strictly below it, and levels sitting exactly on the midpoint are left out of both sums so the pivot belongs to neither side. A reading above 1 means buyers paid more in the top half than sellers hit in the bottom half; below 1 is the mirror. When the denominator is empty, because no level traded below the midpoint or no aggressive selling occurred there, the indicator returns no value rather than an infinite one.

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:

Ratio d'agression autour du MILIEU de la barre : mid = (high + low) / 2 value = Σ buy(P) pour P > mid / Σ sell(P) pour P < mid Les niveaux EXACTEMENT au milieu sont exclus des DEUX sommes (comparaisons strictes) : le pivot n'appartient à aucun camp, l'attribuer à l'un biaiserait le rapport. POURQUOI : > 1 = les acheteurs ont payé DANS LE HAUT de la barre plus que les vendeurs n'ont vendu dans le bas — l'agression est allée chercher le prix, signature d'une poussée assumée. < 1 = miroir. Le pivot est GÉOMÉTRIQUE (milieu du range), pas volumétrique : c'est ce qui distingue cette def de `buy-sell-pressure-ratio` (orderflow3.ts), qui pivote sur le POC. Sur une barre dont le POC est collé au low, les deux répondent à des questions différentes — et c'est justement là que la lecture devient intéressante. Dénominateur nul (aucun niveau sous le milieu, ou aucune vente agressive en dessous) → null : x/0 n'est pas « ∞ », c'est une absence de référence. Barre sans niveau exploitable → null. Aucun tick size requis : la comparaison au milieu est une inégalité de prix, pas une clé de map (l'agrégation, elle, passe bien par `priceKey` — canon).

How to read it

  • Treat 1 as the neutral line: above it the aggression was concentrated in the upper half, below it in the lower half.
  • The ratio describes where aggression happened, not how much of it there was. A bar with tiny volume can print a large ratio.
  • Compare it with the bar's close: aggression in the top half combined with a close near the low is a different picture from the same ratio closing at the high.
  • Gaps in the series are informative — they mark bars with no usable reference below the midpoint, typically very narrow or one-sided bars.
  • Sequences matter more than single values; a drift of the ratio across several bars is a steadier observation than one extreme print.

Parameters and defaults

The definition has no tunable window: the pivot is always the bar's geometric midpoint, and no tick size is involved since the comparison is a plain price inequality. That leaves the plot color and the smoothing length, which is 1 out of the box and therefore plots the raw per-bar ratio. Raising it averages the ratio over more bars, which suppresses isolated spikes and delays every turn by roughly the length you choose.

Aggression Ratio — parameters exposed in the app, with the values it ships with.
ParameterTypeDefaultRange
Smoothingnumber11 – 200

What it does not show

A ratio built on geometry ignores where volume actually concentrated, so on a bar whose activity sits entirely at one extreme the midpoint is an arbitrary line. It requires trades classified by aggressor side and returns nothing on bars with no usable levels. It says nothing about the absolute size of the flow, nothing about the previous bar, and nothing about whether the aggression was rewarded. Very wide bars built from a few prints can produce extreme values with little behind them.

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.

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

How is the aggression ratio calculated on a footprint bar?
It divides the buy volume traded above the bar's midpoint by the sell volume traded below it, where the midpoint is the average of the high and the low. Levels exactly at the midpoint are excluded from both sums. If nothing qualifies in the denominator, the bar has no value rather than an infinite one.
What does an aggression ratio below 1 indicate?
That aggressive selling in the lower half of the bar outweighed aggressive buying in the upper half. Read on its own, it describes where the initiative was spent inside the bar. It carries no information about the next bar and should be checked against the close and the surrounding price structure.
Aggression ratio or buy/sell pressure ratio — what is the difference?
Only the pivot differs. Aggression Ratio splits the bar at its geometric midpoint, the average of high and low. Buy/Sell Pressure Ratio splits it at the point of control, the level with the most volume. On a bar whose point of control sits near the low, the two answer genuinely different questions and can disagree.

Keep reading