Delta at High Indicator: Formula, Settings and How to Read It
Delta at High measures order flow pressure in the top ticks of a bar only, instead of across the whole bar. It sums buy volume minus sell volume for every price level inside a window measured in ticks below the bar's high, three ticks by default, so you can see who was trading at the extreme rather than on average.
Senzoukria · Indicators · Updated September 2026
Delta at High ships with the Senzoukria desktop app, in the Delta group of the indicator catalogue. It is drawn in its own panel below the chart.
What Delta at High measures
The output is a net contract count, not a ratio: inside the window each level contributes trades that lifted the offer minus trades that hit the bid, and the window total is plotted as one histogram value per bar. The window is defined in ticks below the high, never in number of levels, so a bar that printed only a few scattered prices does not quietly widen the measured zone. Price levels are aggregated on an integer tick key before the sum, which means two feed entries landing on the same tick count as one level. When the instrument's tick size is unknown or the bar holds no usable level, the bar emits no point at all rather than a substituted zero.
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:
Points d'histogramme : `f` rend `null` quand la barre n'a pas d'information — la barre n'émet alors PAS de point (contrat `HistogramPoint` : pas de trou, pas de valeur inventée). */ function histPoints( bars: readonly FootprintBar[], f: (bar: FootprintBar, i: number) => number | null, ): HistogramPoint[] { const out: HistogramPoint[] = []; for (let i = 0; i < bars.length; i++) { const v = f(bars[i], i); if (v !== null) out.push({ time: bars[i].bucketTsNs, value: v }); } return out; } function histOut( points: HistogramPoint[], positiveColor: string, negativeColor: string, ): SeriesOutput { return { shape: "histogram", points, positiveColor, negativeColor }; } /** Un niveau de la barre indexé par sa CLÉ ENTIÈRE (indice de tick quand le tick est connu, quantification 1e-6 sinon — canon : jamais de clé f64). */ type KeyedLevel = { key: number; price: number; buy: number; sell: number; }; /** Niveaux EXPLOITABLES de la barre (canon : qty = 0 et prix non fini exclus), agrégés par clé de prix et rendus en ordre ASCENDANT de prix. L'agrégation par clé est indispensable : deux entrées `levels` au même prix (source qui n'a pas fusionné, ou deux prix distincts qui tombent sur le même tick) ne doivent compter QUE POUR UN niveau — sinon `level-count`, `volume-per-level` et la garde `unique_levels ≥ 2` de l'absorption mentent. / function barLevelsByKey( bar: FootprintBar, tickSize: number | null, ): KeyedLevel[] { const byKey = new Map<number, KeyedLevel>(); for (const lvl of usableLevels(bar)) { const key = priceKey(lvl.price, tickSize); const cur = byKey.get(key); if (cur !== undefined) { cur.buy += lvl.buyVolume; cur.sell += lvl.sellVolume; } else { byKey.set(key, { key, price: lvl.price, buy: lvl.buyVolume, sell: lvl.sellVolume, }); } } return [...byKey.values()].sort((a, b) => a.key - b.key); } /** Delta des N ticks d'un BORD de la barre. bord haut : Σ (buy − sell) des niveaux de clé > maxKey − N bord bas : Σ (buy − sell) des niveaux de clé < minKey + N « N ticks » exige la grille de l'instrument : tick size inconnu → null (on ne convertit JAMAIS un nombre de ticks en nombre de niveaux, une barre creuse ferait diverger les deux). Barre sans niveau exploitable → null. / function edgeDelta( bar: FootprintBar, tickSize: number | null, topTicks: number, edge: "high" | "low", ): number | null { if (tickSize === null || !(tickSize > 0)) return null; const lvls = barLevelsByKey(bar, tickSize); if (lvls.length === 0) return null; const n = Math.max(1, Math.floor(topTicks)); const minKey = lvls[0].key; const maxKey = lvls[lvls.length - 1].key; let delta = 0; for (const lvl of lvls) { const inside = edge === "high" ? lvl.key > maxKey - n : lvl.key < minKey + n; if (inside) delta += lvl.buy - lvl.sell; } return delta; } /** Value Area d'UNE barre (profil de la seule barre courante), algorithme Steidlmayer canonique via `valueArea`. La marche ±1/±2 est en INDICES DE TICK : sans tick size les clés sont quantifiées 1e-6 et « 2 ticks » n'aurait aucun sens → null (canon : dégrader, jamais inventer). */ function barValueArea( bar: FootprintBar, tickSize: number | null, pct: number, ): { vahKey: number; valKey: number } | null { if (tickSize === null || !(tickSize > 0)) return null; const profile: Profile = new Map(); addBarToProfile(profile, bar, tickSize); return valueArea(profile, pct); } // ── Defs ──────────────────────────────────────────────────────────────────── /** Delta des N ticks SUPÉRIEURS de la barre : value = Σ (buy − sell) des niveaux de clé > maxKey − topTicks POURQUOI : le delta global d'une barre mélange ce qui s'est passé au plus haut et au plus bas. Isoler le sommet répond à la seule question qui compte sur un test de résistance — qui a payé l'offre EN HAUT ? Un delta négatif au sommet d'une barre haussière = les acheteurs n'ont pas suivi jusqu'au bout (absorption vendeuse potentielle). Défaut topTicks = 3 : la zone d'extrême usuelle des tests de niveau (1 tick est du bruit d'exécution, au-delà de 3 on remesure la barre entière). Convention : fenêtre en TICKS, pas en niveaux — une barre creuse ne doit pas élargir la zone. Tick size inconnu ou barre sans niveau → PAS de point.
How to read it
- Compare the sign at the high with the direction of the bar. An up bar that ends with negative delta in its top ticks tells you the buying that carried it did not continue into the extreme.
- A clearly positive reading at the high of an up bar means aggressive buyers were still paying the offer at the top of the range. That describes continuation behaviour; it is not a target or an entry.
- Watch the same resistance across several attempts. Repeated negative readings at the high describe sellers meeting each push, but absorption can fail and price can still trade through.
- A value close to zero often means the extreme barely traded. Little volume changed hands there, so the reading carries little weight whatever its sign.
- Read it alongside Delta at Low on the same bar. Opposite signs at the two edges describe a bar that was contested at both ends rather than driven in one direction.
Parameters and defaults
Ticks sets how deep the window reaches below the high and defaults to 3, the usual extreme zone of a level test; a single tick mostly captures execution noise, and much beyond three the reading starts to re-measure the whole bar. The parameter accepts 1 to 50, which leaves room for instruments whose bars span many ticks. Positive and negative colours change only how the histogram is drawn, not the values.
| Parameter | Type | Default | Range |
|---|---|---|---|
| Ticks | number | 3 | 1 – 50 |
What it does not show
The indicator counts executed contracts classified by aggressor side, so it says nothing about resting liquidity: it cannot tell you how large the offer was that absorbed the buying. A bar that barely traded at its extreme produces a small value that reads like balance when it is really an absence of data. Each value is computed from one bar in isolation with no memory, so it will not tell you whether the same price was defended earlier in the session. It needs both a feed carrying aggressor side and a known tick size; without either, the bar is skipped rather than estimated.
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
- Delta % — Delta
- Session CVD — Delta
- Delta momentum — Delta
- Delta min/max — Delta
- Price/Delta Divergence — Delta
- Delta % Histogram — 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 does a negative Delta at High mean on a rising bar?
- It means that in the top ticks of that bar, more contracts traded at the bid than at the offer, even though the bar closed higher. The push into the high was met by selling rather than carried by fresh buying. This is often described as potential seller absorption, but a single bar does not establish that price will turn.
- How many ticks should Delta at High use?
- The default is 3 ticks, which covers the usual extreme zone of a level test. One tick tends to measure execution noise around the last print, while a large window gradually reproduces the bar's overall delta and loses the point of the indicator. Instruments with wide bars can justify a deeper window; the setting accepts 1 to 50.
- Why is Delta at High blank on some bars?
- The indicator plots nothing when it cannot compute an honest value. That happens when the instrument's tick size is unknown, since a window expressed in ticks has no meaning without the price grid, and when the bar contains no usable price level after zero-quantity and invalid prices are discarded. A missing bar means no information, not a delta of zero.