CMO And WMA was authored by Chande and Kroll for Omega Research 1997. The CMO uses the absolute difference of price and previous price with sums and averages to arrive at its value. A signal line which is a Weighted Moving Average (WMA) of the CMO is also plotted. Adjustable guides are given to fine tune the trading signals. The user may change the input (close), method (WMA), period lengths and guide values. This indicator’s definition is further expressed in the condensed code given in the calculation below.


How To Trade Using CMO And WMA

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 is above the top guide and crosses below the CMOWMA a sell signal will be generated. Conversely, if the CMO is below the bottom guide and crosses above the CMOWMA a buy signal will be given. The 0 line divides the bulls above from the bears below.


How To Access in MotiveWave

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

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 9
//period2 = user defined, default is 9
//method = moving average (ma), user defined, default is WMA
//abs = absolute value, prev = previous
//index = current bar number

cmo = cmo(index, period1, input);
Plot: cmowma = ma(method, index, period2, CMO);
highSell = rmaix for last sell signal, reset to max_negative at each  buy signal;
lowBuy = rmaix for last buy signal, reset to max_positive at each sell signal;
sell = crossedBelow(CMO, CMOWMA) AND cmo moreThan topGuide AND (cmo moreThan highSell);
buy = crossedAbove(CMO, CMOWMA)  AND cmo lessThan bottGuide AND (cmo lessThan lowBuy);
Method cmo(index, period, input)
sumD = 0;
for (i = index-period+1; i lessOr= index; i++)
    iprice = price[i];
    prevP = price[i-1];
    sumD = sumD + (Math.abs(price - prevP));
priorP = price[index-period];
cmo = 100 * (price - priorP) / sumD;
return cmo;