CMO ABS Average

The CMO ABS Average, by Chande and Kroll for Omega Research 1997, uses the average of the absolute difference between the current price and the last price over 3 periods to create an oscillator with a range of 0 to 100. Adjustable guides are given to fine tune the trading signals. The user may also change the input (close) and period values. This indicator’s definition is further expressed in the condensed code given in the calculation below.

CMO ABS Average1

How To Trade Using CMO ABS Average

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

CMO ABS Average2

How To Access in MotiveWave

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

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)
//period1 = user defined, default is 5
//period2 = user defined, default is 10
//period3 = user defined, default is 20
//abs = absolute value, diff = difference
//index = current bar number

lastV = price[index-1];
diff = price - lastV;
absDiff = abs(diff);
diffSum1 = sum(index, period1, diff);
absSum1 = sum(index, period1, absDiff);
diffSum2 = sum(index, period2, diff);
absSum2 = sum(index, period2, absDiff);
diffSum3 = sum(index, period3, diff);
absSum3 = sum(index, period3, absDiff);
temp1 = diffSum1/absSum1;
temp2 = diffSum2/absSum2;
temp3 = diffSum3/absSum3;
Plot: cmoAbsAv = abs(100 * (temp1 + temp2 + temp3) / 3);
prevC = cmoAbsAv[index-1];
highSell = cmoAbsAv for last sell signal, reset to max_negative at each  buy signal;
lowBuy = cmoAbsAv for last buy signal, reset to max_positive at each sell signal;
sell = cmoAbsAv moreThan topGuide AND prevC moreThan cmoAbsAv AND cmoAbsAv moreThan highSell;
buy = cmoAbsAv lessThan bottGuide AND prevC lessThan cmoAbsAv AND cmoAbsAv lessThan lowBuy;