The fisher transform indicator squeezes price into a fixed range, then stretches the extremes back out. Ehlers built it so a mostly bell shaped price series turns into one with much sharper peaks. Fisher and Trigger run in their own pane, with reference levels at 1.5 and -1.5.
This build ships as a compiled .ex4 for MT4 and .ex5 for MT5; the screenshots below come from EURUSD H1.
| Platforms | MT4 (.ex4) + MT5 (.ex5) |
|---|---|
| Chart window | Separate window (levels 0 / 1.5 / -1.5) |
| Plots | 2: Fisher, Trigger |
| Alerts | popup, push notification, email, sound |
| Inputs | 8 |
What each plot looks like
Fisher (blue) carries the transformed value after both smoothing steps.
Trigger (orange red) repeats the Fisher value from the previous bar, so it lags by exactly one.
Three levels cross the pane at 0, 1.5 and -1.5, matching the SignalLevel default and its mirror.
- Fisher: plot, dodger blue, width 2
- Trigger: plot, orange red, width 1

How the source computes it
Normalising the price channel
The code scans FisherLength bars for the highest high and the lowest low. It then measures where the current bar midpoint sits inside that channel and shifts the result to run from minus a half to plus a half.
That step alone turns price into a bounded series. Everything after it works on that bounded number rather than on price.
The transform itself
A smoothing pass comes first. The new normalised value gets weighted at 0.66 of double the reading, with 0.67 of the previous smoothed value carried forward.
Then comes the logarithm: half the natural log of one plus the value over one minus it, with half the previous output added back. A value near the edge of the channel pushes that logarithm towards its extremes, which produces the sharp peaks.
Where Trigger comes from
Trigger needs no separate calculation. The code copies the Fisher value from one bar earlier straight into the second buffer.
So a crossing between the two lines means the reading has turned rather than continued. No averaging happens on that side at all.
What the output means
Fisher crossing Trigger is the turn this family is known for.
A reading past 1.5 or under -1.5 means price sat near the edge of its FisherLength channel.
Those peaks are deliberately sharp. That is the transform working, not the market behaving unusually.
The zero line marks the middle of the recent channel rather than any absolute price level.
Alert channels in this build: popup, push notification, email and sound, one message per closed bar.
Alerts cover popup, push, email and sound. A bar time check runs first, so a crossing produces one alert per closed bar.
Every Fisher Transform Indicator input
Core settings
| Setting | What it does | Default |
|---|---|---|
FisherLength |
Fisher length (price channel). FisherLength sets the channel the normalisation measures against. It defaults to 10. A longer window makes extremes rarer. | 10 |
SignalLevel |
Signal threshold. SignalLevel is the reference threshold, 1.5 by default, drawn in the pane along with its negative. | 1.5 |
Alert settings
| Setting | What it does | Default |
|---|---|---|
EnableAlerts |
EnableAlerts gates the message block and defaults to true. | on |
EnablePopup |
(see inputs panel) | on |
EnablePushNotify |
EnablePushNotify sends each signal to the MT4 mobile app. It defaults to false. | off |
EnableEmail |
(see inputs panel) | off |
EnableSound |
(see inputs panel) | off |
SoundFile |
(see inputs panel) | alert.wav |

Where the settings fit
The screenshot uses EURUSD H1. A ten bar channel on H1 turns over several times a day, which suits intraday work. On H4 and daily the readings hold at an extreme for longer stretches. Lengthening FisherLength is the usual answer when the pane spends most of its time pinned past the levels.
Where it falls short
The transform exaggerates by design. An extreme reading only says price sits near the edge of a ten bar channel, which is a very short memory.
In a trend the reading pins past the level and the crossings against that trend keep coming.
The recursion carries part of the previous value forward twice, so one bad reading takes several bars to wash out.
When the channel range collapses, the normalised value swings hard on tiny price moves.
Copy the compiled Fisher Transform Indicator file into your MQL4/Indicators folder, and the MT5 build into MQL5/Indicators, then restart the terminal and drag it onto a chart. The step-by-step guide with screenshots is at how to install MT4 and MT5 indicators.
Background reading on the method behind the Fisher Transform Indicator: International Fisher effect on Wikipedia, Prings Bottom Fisher at StockCharts ChartSchool.
Download the Fisher Transform Indicator for MT4 and MT5
The zip holds the compiled Fisher Transform Indicator build for MT4 and MT5, plus a short README. Compiled files only, no source. Enter your email below and the download link arrives in your inbox.
Download this indicator free
Enter your email and the file is yours. You also get the full MT4 and MT5 library.
FAQ
Why does the Fisher line spike so much harder than price?
The logarithm does it. As the normalised value approaches plus or minus a half, the ratio inside the log runs towards zero or infinity, so the output stretches out fast. That is the entire point of the transform: it makes the edges of the channel obvious at a glance.
Is Trigger an average of the Fisher line?
No. The code copies the Fisher value from one bar earlier into the Trigger buffer, with no smoothing whatsoever. That makes it a one bar lag of the same series. A crossing therefore only means this bar reading turned against the previous one.
What does FisherLength 10 actually measure?
It sets how many bars the highest high and lowest low come from. The current bar midpoint then gets placed inside that channel. Ten bars is a short memory, so what counts as an extreme changes quickly. Raise it for a steadier reading.
Should SignalLevel stay at 1.5 on a fast chart?
It draws a reference line rather than enforcing a rule, so changing it moves what you see and nothing else. On a fast chart the reading passes 1.5 often, and pushing it to 2.0 narrows the marked region down to genuinely rare readings.
Are results guaranteed?
No. Trading involves risk. Results are not guaranteed; past performance is not indicative of future results. Use the Fisher Transform Indicator as one input. Always backtest before trading live.
Category: this is part of our Signal and Forecast collection. Also, truly, browse more Signal and Forecast for MetaTrader, or explore every MT4 indicator and MT5 indicator on the site.
External references
- For background on this concept, see International Fisher effect on Wikipedia.
- For broader market context, see Prings Bottom Fisher at StockCharts ChartSchool.
