Fisher Transform

The Fisher Transform was presented by John Ehlers in the Stocks and Commodity Magazine November 2002. It assumes that price distributions behave like square waves. The Fisher Transform uses the mid-point or median price in a series of calculations to produce an oscillator. A signal line which is a previous value of itself is also displayed. Adjustable guides are also given to fine tune the signals. The user may change the input (midpoint), period lengths and guide values. This indicator’s definition is further expressed in the condensed code given in the calculation below.

Fisher Transform1

How To Trade Using Fisher Transform

Adjust the top and bottom guides to control the quantity and quality of the trading signals. The Fisher Transform has a range of +1 to -1. In addition to the adjustable guides, if the fisher crosses the signal line a change in trend is predicted. If the Fisher is above the top guide and crosses below the signal line a sell signal will be generated. Conversely, if the Fisher is below the bottom guide and crosses above the signal line a buy signal will be given. The 0 line divides the bulls (above) from the bears (below).

Fisher Transform2

How To Access in MotiveWave

Go to the top menu, choose Study>Oscillators>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 midpoint or median
//period1 = user defined, default is 10
//period2 = user defined, default is 2
//prev = previous, index = current bar number
//LT = less than
//MT = more than

median = high + low / 2;
minMedian = lowest(index, period1, median);
maxMedian = highest(index, period1, median);
prevValue = VALUE[index-1];
prevFish = FISHER[index-1];
SIGNAL = FISHER[index-period2];
temp = (median - minMedian) / (maxMedian - minMedian);
VALUE = .5 * 2 * (temp - .5) + (.5 * prevValue);
if (VALUE mT .9999) VALUE = .9999;
temp = (1 + value) / (1 - value);
Plot1:FISHER = (.25 * log(temp)) + (.5 * prevFish);
Plot2: SIGNAL;
highSell = fisher for last sell signal, reset to max_negative at each  buy signal;
lowBuy = fisher for last buy signal, reset to max_positive at each sell signal;
sell = fisher MT topGuide AND  crossedBelow(FISHER, SIGNAL) AND (fisher MT highSell);
buy =  fisher LT bottGuide AND crossedAbove(FISHER, SIGNAL) AND (fisher LT lowBuy);