Chande Momentum Oscillator

The Chande Momentum Oscillator (CMO) was authored, not surprisingly, by Tushar Chande. The CMO is the difference between, the sum of all recent gains and the sum of all recent losses, and dividing the result by the sum of all price movements of the given period. It is bounded between the range +100 and -100. The user may change the input (close) and period length. This indicator’s definition is further expressed in the condensed code given in the calculation below.

Chande Momentum Oscillator1

How To Trade Using Chande Momentum Oscillator (CMO)

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

Chande Momentum Oscillator2

How To Access in MotiveWave

Go to the top menu, choose Study>Tushar Chande>Chande Momentum Oscillator (CMO)

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 14
//MT = more than
//LT = less than
//prev = previous, diff = difference
//index = current bar number

prevPrice = price[index-1];
diff = price - prevPrice;
if (diff MT 0) cmo1 = diff;
if (diff LT 0) cmo2 = -diff;
sum1 = sum(index, period, CMO1);
sum2 = sum(index, period, CMO2);
cmo = ((sum1-sum2)/(sum1+sum2)) * 100;
buy = crossedAbove(CMO, topGuide);
sell = crossedBelow(CMO, bottomGuide);