How is Fisher Transform calculated?

Learn Fisher Transform calculation steps inputs and limitations.

What Fisher Transform is (and why the formula looks different)

Fisher Transform is a mathematical transformation designed to convert a time series (often a price series) into a form that behaves more like an unbounded oscillator. It is called a “transform” because it remaps values using non-linear functions, not because it performs statistical prediction.

In practice, the key idea is:

  1. reduce the input series to a bounded value using a rolling high/low range,
  2. apply a Fisher-style non-linear mapping (related to a log ratio),
  3. update the mapped value recursively so the indicator responds smoothly rather than purely “point by point.”

Because the mapping is non-linear and the range is computed over a window, the exact output scale and sensitivity depend strongly on your chosen settings and on the data you feed into the calculation.

The core calculation: formula, parameters, and inputs

A widely used Fisher Transform calculation follows this general structure. Exact implementation details vary by source, but the mechanics below capture the essential components.

Parameters and inputs

You need:

  • Input series: usually a derived price value (for example, the median price), provided for each time step.
  • Lookback window length (N): the number of bars used to compute rolling minimum and maximum.
  • Recursion/iteration: the Fisher mapping uses a recursive update that references prior computed values.

Step 1: compute a rolling normalised value

For each time step t (starting only after enough data exist for the lookback), compute the rolling min and max of the input series over the last N steps:

  • Lowest(t) = min of input over the window
  • Highest(t) = max of input over the window

Then compute a normalised position in the range, often of the form:

  • x(t) = 2 × ((\frac{Input(t) - Lowest(t)}{Highest(t) - Lowest(t)})) − 1

This maps the current input to a bounded value (conceptually between −1 and +1) based on where it lies within its recent min/max range.

Assumption for calculation examples: you must define what “Input(t)” is, and you must use the same N and the same window definition (inclusive/exclusive of the current bar) consistently when reproducing values.

Step 2: apply a Fisher-style non-linear mapping

Compute an intermediate value that maps the bounded normalised value into a Fisher-like domain using a log-ratio transform. A common pattern is:

  • f(t) = 0.5 × ln((\frac{1 + x(t)}{1 - x(t)}))

To avoid singularities (division by zero or log of zero) when x(t) approaches ±1, implementations typically include a safeguard such as clamping x(t) to a slightly smaller interval (for example, preventing exactly −1 and +1).

Step 3: recursive update (smoothing via prior values)

Many Fisher Transform formulas update the mapped value using the previous output. A typical recursive structure is:

  • fish(t) = fish(t−1) + f(t)

and sometimes an additional smoothing factor or intermediate “previous” variable is introduced. The exact recursive form determines the indicator’s responsiveness.

Step 4: optional rounding or scaling

Some implementations rescale or round the final series for readability. These are display choices, not the core mathematical concept.

A worked example outline you can verify independently

Because no real-time market data is assumed here, the most reliable way to learn the calculation is to reproduce it on a small, hypothetical dataset.

Example setup (define assumptions first)

  • Choose N = 5.
  • Choose Input(t) for each time step (for example, a median price series) that you provide as numeric values.
  • Decide how you handle the “first N” points (commonly you start producing outputs only after the window is complete).
  • Decide how you clamp x(t) when the range is too small.

Compute the intermediate values step by step

For each time step where the window exists:

  1. Find Lowest(t) and Highest(t) from the last N input values.
  2. Compute x(t) using (2 × ((Input−Lowest)/(Highest−Lowest)) − 1).
  3. Safeguard x(t) so it does not reach ±1 exactly.
  4. Compute f(t) = 0.5 × ln((1 + x)/(1 − x)).
  5. Update fish(t) using the chosen recursion, such as fish(t) = fish(t−1) + f(t) (with fish(t−1) initialised according to your chosen convention).

How to check you implemented it correctly

When you implement the same steps with the same assumptions, you should match:

  • the rolling min/max values,
  • the intermediate x(t) sequence,
  • the Fisher mapping f(t),
  • and the recursive fish(t) sequence.

If any one intermediate sequence differs, the final output will also differ. This is why the verification focus should be on reproducing intermediate computations, not only the final line.

Limitations and failure modes (what can break the calculation)

Even though Fisher Transform is a defined formula, its computed output can vary widely depending on how you implement details and how your data behaves.

1) Small or flat ranges in the lookback window

If Highest(t) − Lowest(t) becomes very small, the normalisation ((Input−Lowest)/(Highest−Lowest)) becomes unstable. That can cause x(t) to jump abruptly toward ±1, which then pushes the log mapping toward extreme values.

Material implication: you must define a safeguard for near-zero ranges (for example, skipping the update or clamping the computed ratio).

2) Singularities in the log-ratio transform

The mapping (ln((1+x)/(1−x))) is undefined at exactly x = 1 or x = −1. Real data and rounding can still yield values extremely close to those boundaries.

Material implication: implementations typically clamp x(t) slightly inside (−1, +1) to avoid infinite values.

3) Recursive initialisation and inconsistent conventions

Because the calculation often uses prior outputs, the choice of initial fish(0) (or the first computed fish value) affects subsequent values.

Material implication: two implementations that use the same formula but different initial conventions can diverge.

4) Input definition changes everything

If “Input(t)” is a different price measure (close vs. median vs. weighted price), the rolling min/max values change, so x(t) and therefore the Fisher output change.

Material implication: you must treat the input series definition as part of the calculation, not as an external detail.

5) Data quality issues

Missing bars, irregular timestamps, and re-sampled data can alter rolling min/max windows. Even without any “market prediction,” these calculation mechanics can distort the indicator line.

Trading foreign exchange and CFDs involves substantial risk. Information on FoxiForex is educational and is not personal financial advice. Sponsored placements are labelled clearly.