Inverse Fisher Cyber Cycle

The Inverse Fisher Cyber Cycle (ICYCLE) was authored by John Ehlers. The ICYCLE incorporates the current price, three previous prices, a user defined alpha factor, Euler’s number and feedback to arrive at its value. The user may change the input (midpoint) and alpha. This indicator’s definition is further expressed in the condensed code given in the calculation below.

See also article by John Ehlers

Inverse Fisher Cyber Cycle1

How To Trade Using The Inverse Fisher Cyber Cycle

Adjust the top and bottom guides to control the quantity and quality of the trading signals. If the ICYCLE peaks above the top guide a sell signal will be generated. Conversely, if the ICYCLE troughs below the bottom guide a buy signal will be given. The 0 line divides the bulls above from the bears below.

Inverse Fisher Cyber Cycle2

How To Access in MotiveWave

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

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
//alpha = user defined, default is .07
//exp = function, returns Euler’s number (e) raised to power of its argument
//prev = previous, index = current bar number

prevP1 = price[index-1];
prevP2 = price[index-2];
prevP3 = price[index-3];
smth = (price + 2*prevP1 + 2*prevP2 + prevP3) / 6;
default = (price - 2*prevP1 + prevP2) / 4;
prevS1 = smth[index-1];
prevS2 = snth[index-2];
prevC1 = ifNull(default, cycle[index-1]);
prevC2 = ifNull(default, cycle[index-2]);;
Plot1: cycle = (1 - .5*alpha)*(1 - .5*alpha) * (smth - 2*prevS1 + prevS2)+2*(1 - alpha)*prevC1 - (1- alpha)*(1-alpha)*prevC2;
Plot2: icycle = 100 * (Math.exp(2*cycle) -1) / (Math.exp(2*cycle) + 1);
prevI = icycle[index-1];
highSell = icycle for last sell signal, reset to max_negative at each  buy signal;
lowBuy = icycle for last buy signal, reset to max_positive at each sell signal;
sell = (icycle moreThan topGuide) AND (prevI moreThan icycle) AND (icycle moreThan highSell);
buy =  (icycle lessThan bottGuide) AND (prevI lessThan icycle) AND (icycle lessThan lowBuy);