CMO Filter

The CMO Filter was authored by Chande and Kroll for Omega Research 1997. A user defined filter is applied to the real and absolute sum of the difference between current price and last price. The quotient is over sized to create an oscillator with a range of 100 to -100. Adjustable guides are given to fine tune the trading signals. The user may change the input (close), period, filter and guide values. This indicator’s definition is further expressed in the condensed code given in the calculation below.

CMO Filter1

How To Trade Using CMO Filter

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

CMO Filter2

How To Access in MotiveWave

Go to the top menu, choose Study>Tushar Chande>CMO Filter

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)
//period = user defined, default is 9
//filter = user defined, default is 3
//prev = previous, index = current bar number
//abs = absolute value, diff = difference
//MT = more than, LT = less than

prevValue = price[index-1];
diffV = price - prevValue;
absV = abs(diffV);
if (absV MT filter) diffV = 0; absV = 0;
temp1 = sum(index, period, diffV);
temp2 = sum(index, period, absV);
Plot: cmof = 100 * temp1 / temp2;
prevC = cmof[1];
highSell = cmof for last sell signal, reset to max_negative at each  buy signal;
lowBuy = cmof for last buy signal, reset to max_positive at each sell signal;
sell = (cmof MT topGuide) AND (prevC MT cmof)  AND (cmof MT highSell);;
buy = (cmof LT bottGuide AND prevC LT cmof) AND (cmof LT lowBuy);