Fisher Transform Indicator: Formula, Settings and How to Read It

Fisher Transform, published by John Ehlers in 2002, rescales where the bar midpoint sits inside its recent range and then pushes that position through an inverse hyperbolic tangent, which stretches the ends of the scale. Turning points that a linear oscillator flattens into a plateau appear instead as sharp peaks.

Senzoukria · Indicators · Updated September 2026


Fisher Transform ships with the Senzoukria desktop app, in the Momentum group of the indicator catalogue. It is drawn in its own panel below the chart.

What Fisher Transform measures

The input is the bar midpoint (high + low) / 2, not the close, positioned between the lowest and highest midpoint of the last N bars - 9 by default. That 0-to-1 position is centred on zero and fed into a first recursion with Ehlers' fixed coefficients, 0.66 on the new value and 0.67 on the previous one; the result is clamped to plus or minus 0.999 and passed through the transform, which in turn keeps half of its own previous output. None of those constants scale with the chosen period and none are exposed as settings. The clamp is structural rather than cosmetic: the first recursion has fixed points at exactly plus and minus 1, a run of bars pinned at the edge of their window converges on that bound, and the transform is infinite there - without the clamp, one extended push would emit an infinity and the second recursion would carry a NaN through the rest of the chart. Both recursions start from zero on the first bar with a full window; when the window is perfectly flat there is no position to compute, so the indicator emits no value and leaves its state untouched instead of repeating the previous reading.

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:

Fisher Transform (John Ehlers, 2002) — rend GAUSSIENNE la distribution du prix normalisé, pour que les extrêmes deviennent lisibles : ratio = (hl2 − min(hl2, N)) / (max(hl2, N) − min(hl2, N)) ∈ [0, 1] value ← clamp( 0.66·(ratio − 0.5) + 0.67·value₋₁ , ±0.999 ) fish ← 0.5·ln( (1 + value)/(1 − value) ) + 0.5·fish₋₁ POURQUOI : les prix ne sont PAS gaussiens — leurs extrêmes sont fréquents et un oscillateur linéaire les écrase. La transformée de Fisher (= atanh) étire violemment les bords de [−1, 1] : un `value` de 0.95 sort à 1.83, un 0.999 à 3.80. Les retournements deviennent des pics nets au lieu de plateaux. LES DEUX LISSAGES sont EXPONENTIELS À FACTEUR FIXE (ce ne sont PAS des EMA de période N) : 0.67 sur la normalisation, 0.5 sur la transformée — les coefficients d'Ehlers, non paramétrés pour rester à parité TradingView. `value` et `fish` sont amorcés à 0 (convention d'Ehlers) au premier point où la fenêtre de N barres est pleine. LE CLAMP À ±0.999 EST STRUCTUREL, pas cosmétique : la récurrence value ← 0.33·s + 0.67·value₋₁ (s = ±1) a pour points fixes ±1 exactement, et une série de barres toutes au plus haut de leur fenêtre y converge géométriquement (1 − value = 0.67^k). Or atanh(±1) = ±∞ : sans borne, une poussée directionnelle assez longue ferait sortir un `Infinity`, puis un `NaN` par la récurrence de `fish`, et l'indicateur mourrait DÉFINITIVEMENT pour le reste du chart. Le clamp plafonne la sortie à ln(1999) ≈ 7.60 — variante « clamp » et non le `round_()` de TradingView (qui rabat tout |x| > 0.99 sur 0.999, donc peut DIMINUER une valeur en la bornant) : ici, seules les valeurs qui dépassent réellement 0.999 sont ramenées, la transformation reste monotone. Défaut N=9 (Ehlers). Fenêtre PLATE (max == min) → null ET état FIGÉ (ni valeur inventée, ni report). Warm-up : i ≥ N − 1.

How to read it

  • The zero line separates a midpoint sitting in the upper half of its N-bar range from one sitting in the lower half.
  • Because the tails are stretched, a short excursion to a large absolute value describes a midpoint that reached the extreme of its window, not a proportionally larger price move.
  • Sharp reversals of the line are the readable event; the transform was designed to turn slow rolls into visible pivots.
  • Readings near the cap of roughly 7.60 describe a midpoint that has sat at the edge of its window for several bars running, and there the line stops separating one bar from the next.
  • The scale is dimensionless, so the same reading means the same relative position on any instrument - but only relative to that chart's own N-bar range.

Parameters and defaults

Period defaults to 9 and accepts 2 to 200; it controls only the lookback used for the high-low normalisation. A shorter window reaches the extremes far more often, since price only has to exceed a handful of bars to sit at the edge of its range. The smoothing coefficients are fixed at Ehlers' values and cannot be changed.

Fisher Transform — parameters exposed in the app, with the values it ships with.
ParameterTypeDefaultRange
Periodnumber92 – 200

What it does not show

The Fisher Transform is a rescaling of where price sits in a window. It contains no volume, no trade size and no order flow, and it cannot distinguish a slow drift to a new high from an aggressive one. Both recursions carry state, so every reading depends on prior readings and an abrupt change of regime shows up late. Extreme values are common by construction - that is the design goal - so an extreme is not by itself unusual. In a flat window where the highest and lowest midpoints are equal, the position is undefined and the line simply stops.

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

Why does the Fisher Transform stop around 7.6?
The value fed into the transform is clamped at 0.999 in absolute terms, and the inverse hyperbolic tangent of 0.999 is about 3.80. The plotted line adds half of its own previous value on every bar, so a sustained run settles at twice that, near 7.60 - exactly ln(1999). The clamp exists because the transform is infinite at exactly 1, and a long directional run drives the internal value arbitrarily close to it.
Does the Fisher Transform use the close price?
No. It uses the bar midpoint, the average of the high and the low, which is Ehlers' original specification. Two bars with the same close but different ranges therefore produce different inputs.
What period should the Fisher Transform use?
The default is 9 bars, the value Ehlers published. A shorter lookback makes the line hit its extremes on almost every swing, since fewer bars have to be exceeded; a longer one makes extreme readings rarer and slower to appear. Only the normalisation window changes with this setting - the internal smoothing constants stay the same.

Keep reading