Inverse Fisher Transform

The Inverse Fisher Transform (IFISH) was authored by John Ehlers. The IFISH applies some math functions and constants to a weighted moving average (wma) of the relative strength index (rsi) of the closing price to calculate its oscillator position. The user may change the input (close) and period lengths. This indicator’s definition is further expressed in the condensed code given in the calculation below.

See also article by John Ehlers

Inverse Fisher Transform1

How To Trade Using The Inverse Fisher Transform

Adjust the top and bottom guides to control the quantity and quality of the trading signals. IFISH values above .5 are considered to be overbought and therefore offer an opportunity to sell. IFISH values below -.5 are considered oversold and present an opportunity to buy. If the IFISH peaks above the top guide a sell signal will be generated. Conversely, if the IFISH troughs below the bottom guide a buy signal will be given. The 0 line divides the bulls above from the bears below.

Inverse Fisher Transform2

How To Access in MotiveWave

Go to the top menu, choose Study>John Ehlers>Inverse Fisher Transform

or go to the top menu, choose Add Study, start typing in this study name until you see it appear in the list, click on the study name, click OK.

Important Disclaimer: The information provided on this page is strictly for informational purposes and is not to be construed as advice or solicitation to buy or sell any security. Please see our Risk Disclosure and Performance Disclaimer Statement.


//input = price, user defined, default is closing price
//method = moving average (ma), user defined, default is WMA
//period1 = p1, user defined, default is 5
//period2 = p2, user defined, default is 9
//exp = function, returns Euler’s number (e) raised to power of its argument
//av = average, index = current bar number

rsi = rsi(p1, input)[0];
value1 = .1 * (rsi - 50);
av = ma(method, index, p2, VALUE1);
Plot: ifish = (Math.exp(2*av) - 1) / (Math.exp(2*av) + 1);
prevI = ifish[index-1];
highSell = ifish for last sell signal, reset to max_negative at each  buy signal;
lowBuy = ifish for last buy signal, reset to max_positive at each sell signal;
sell = ifish moreThan topGuide  AND prevI moreThan ifish AND (ifish moreThan highSell);
buy =  ifish lessThan bottGuide AND prevI lessThan ifish AND (ifish lessThan lowBuy);