Dynamic Momentum Index

The Dynamic Momentum Index by Tushar Chande and Stanley Kroll, Stocks and Commodities Mag. 05/1993, is similar to the Relative Strength Index (RSI) except with a variable length period. The user defined RSI period may be modified (within limits) with the average Standard Deviation value. Signals and adjustable guides are given. The user may change the input (close), period lengths, limits and guide values. This indicator’s definition is further expressed in the condensed code given in the calculation below.

Dynamic Momentum Index1

How To Trade Using Dynamic Momentum Index

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

Dynamic Momentum Index2

How To Access in MotiveWave

Go to the top menu, choose Study>Tushar Chande>Dynamic Momentum Index

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 close
//sdPeriod = user defined, default is 5
//avSdPeriod = user defined, default is 10
//rsiPeriod = user defined, default is 14
//upLimit = user defined, default is 30
//loLimit = user defined, default is 5
//stdDev = std = standard deviation
//av = average, prev = previous
//rsi = Relative Strength Index
//sma = simple moving average, index = current bar number

stdDev = std(index, sdPeriod, input);
avSd = sma(index, avSdPeriod, stdDev);
dTime = round(rsiPeriod / avSd); //period dependent on average of stdDev
lenDmi = max(min(dTime, upLimit), loLimit);  //determine period length
Plot: dmi = rsi(lenDmi, input)[0];
prevDmi = dmi[index-1]; 
highSell = dmi for last sell signal, reset to max_negative at each  buy signal;
lowBuy = dmi for last buy signal, reset to max_positive at each sell signal;
sell = (dmi moreThan topGuide) AND (prevDmi moreThan dmi  AND (dmi moreThan highSell); 
buy = (dmi lessThan bottGuide AND prevDmi lessThan dmi AND (dmi lessThan lowBuy);