Spread Proxy (ticks) Indicator: Formula, Settings and How to Read It
Spread Proxy estimates how wide the book was during a bar by dividing the bar's range in ticks by the number of distinct prices that actually traded. Low values mean prints occurred at nearly every tick of the range; values well above 1 mean price skipped ticks between prints.
Senzoukria · Indicators · Updated September 2026
Spread Proxy (ticks) 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 Spread Proxy (ticks) measures
The range is converted to ticks and rounded, since prices sit on the instrument's grid and the rounding only removes floating-point noise, then divided by the count of distinct traded price levels. The reasoning is mechanical: a thick book fills at every tick it crosses, while a thin one lets price jump two or three ticks between consecutive prints. Note the arithmetic of a fully traded bar — a range of N ticks contains N+1 prices, so filling all of them gives a value just under 1, and a value of exactly 1 means one price inside the range never printed. A bar that traded at a single price returns 0, which is a measured result, zero ticks of range over one level, not a gap. It is a proxy in the strict sense: an instantaneous spread requires tick-by-tick depth, which an aggregated footprint bar does not carry.
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:
Proxy du spread — largeur effective du book : value = round((high − low) / tick) / nombre de niveaux distincts POURQUOI : un book épais imprime à CHAQUE tick du range (ratio ≈ 1) ; un book fin fait sauter le prix de deux, trois ticks entre deux prints (ratio > 1). C'est la meilleure approximation du spread moyen que permette une barre footprint : le spread instantané exige le DOM tick par tick, que la barre agrégée ne porte pas — le nom dit « proxy » et la doc dit pourquoi. Complète `volume-per-level` (orderflow3.ts, volume/niveaux) et `effort-vs-result` (tape.ts, volume/range) : ici ni l'un ni l'autre au numérateur — c'est la GÉOMÉTRIE seule, sans volume. Convention : range en ticks ARRONDI (les prix sont sur la grille de l'instrument, l'arrondi n'absorbe que le bruit flottant) ; niveaux comptés par CLÉ distincte. Une barre à un seul prix rend 0 — valeur mesurée (zéro tick de range), le dénominateur vaut 1. Tick size inconnu (« en ticks » n'a pas de sens sans grille) ou 0 niveau exploitable → PAS de point.
How to read it
- Values a little under 1 describe a bar where every tick in the range printed, which is the normal state of a liquid instrument in an active session.
- Values climbing above 1 mean price is skipping ticks, a sign the book thinned or that a fast move outran the resting liquidity.
- Watch the series around scheduled releases and session transitions: a spike there is expected behaviour, not an anomaly to interpret.
- Compare the proxy against the same instrument's own history, never across instruments, since tick size and contract conventions differ.
- Sustained elevated values are a liquidity warning, and they matter most when you are sizing or placing stops rather than when you are picking a direction.
Parameters and defaults
There is no window or threshold: the calculation is fully determined by the bar. Colour and smoothing length are the only inputs, and smoothing sits at 1, so what you see is the per-bar value. The raw series is spiky by nature, so a moderate smoothing makes the trend legible — at the price of flattening the individual gap bars, which are usually the ones worth seeing.
| Parameter | Type | Default | Range |
|---|---|---|---|
| Smoothing | number | 1 | 1 – 200 |
What it does not show
This is not a measured bid-ask spread. It does not read the order book, cannot see quote updates inside the bar, and does not distinguish a genuinely wide market from a fast one-directional move through a normal book. It produces no value when the instrument's tick size is unknown or when no usable level exists, and it is unstable on very low-volume bars where a couple of prints determine the ratio. Bars built from long time intervals average away exactly the thin moments the measure is meant to expose.
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
- Tape Speed — Tape & flow
- Diagonal Imbalances — Tape & flow
- Stacked Imbalances — Tape & flow
- Absorption Score — Tape & flow
- Unfinished Auctions — Tape & flow
- Effort vs Result — Tape & flow
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
- Can you measure the bid-ask spread from a footprint chart?
- Not directly. A footprint bar aggregates executed trades by price, so it does not contain the quote updates a true spread measurement requires. What can be derived is how densely the traded prices fill the bar's range, which is the approximation this indicator plots and why its name says proxy.
- Why is the spread proxy slightly below 1 on a normal bar?
- Because a range of N ticks spans N+1 prices. When every one of them trades, the ratio is N divided by N+1, just short of 1 and closer to it on wider bars. A value of exactly 1 means one price inside the range was skipped, and values clearly above 1 mean several were.
- Why does the spread proxy spike during fast moves?
- Because price crosses ticks without trading at them. When resting liquidity is thin or is pulled, prints land two or three ticks apart, so the range in ticks grows faster than the count of distinct levels and the ratio rises. The spike describes how the move traded, not how far it went.