Indicator: Intrady Momentum Index

The Intraday Momentum Index (IMI), developed by Tushar Chande, is a cross-breed between RSI and candlestick analysis. IMI determines the candle type that dominated the recent price action, using that to pinpoint the extremes in intraday momentum.

As the market tries to bottom after a sell off, there are gradually more candles with green bodies, even though prices remain in a narrow range. IMI can be used to detect this shift, because its values will increase towards 70. Similarly, as the market begins to top, there will be more red candles, causing IMI to decline towards 20. When the market is in trading range, IMI values will be in the neutral range of 40 to 60.

Usually intraday momentum leads interday momentum. QStick can show interday momentum, it complements IMI. You will find it in my published indicators.

I have added volatility bands based OB/OS, in addition to static OB/OS levels. You can also turn on IMI Ehlers smoothing. BTW, all parameters are configurable, so do check out the options page.

List of my other indicators:
- - Google doc:

List of my free indicators:
List of my indicators at Appstore:
Open-source script

In true TradingView spirit, the author of this script has published it open-source, so traders can understand and verify it. Cheers to the author! You may use it for free, but reuse of this code in a publication is governed by House Rules. You can favorite it to use it on a chart.


The information and publications are not meant to be, and do not constitute, financial, investment, trading, or other types of advice or recommendations supplied or endorsed by TradingView. Read more in the Terms of Use.

Want to use this script on a chart?
// @author LazyBear 
// List of all my indicators:
study("Intrady Momentum Index [LazyBear]", shorttitle="IMI_LB")
length=input(14, "IMI Length")
lengthMA=input(6, "IMI MA Length")
obLevel=input(70, "IMI static OB level")
osLevel=input(20, "IMI static OS level")
mult=input(2.0, title="Volatility Bands Stdev Mult")
lengthBB=input(20, title="Volatility Bands Length")
applySmoothing=input(false, "Smooth IMI")
lowBand=input(10, "Smoothing LowerBand")
EhlersSuperSmootherFilter(price, lower) =>
	a1 = exp(-PI * sqrt(2) / lower)
	coeff2 = 2 * a1 * cos(sqrt(2) * PI / lower)
	coeff3 = - pow(a1,2)
	coeff1 = 1 - coeff2 - coeff3
	filt = coeff1 * (price + nz(price[1])) / 2 + coeff2 * nz(filt[1]) + coeff3 * nz(filt[2]) 

imi=applySmoothing ? EhlersSuperSmootherFilter(100*(upt/(upt+dnt)), lowBand) : 100*(upt/(upt+dnt))
basisx=ema(imi, lengthBB)
devx = (mult * stdev(imi, lengthBB))
ulx = (basisx + devx)
llx = (basisx - devx)

// Uncomment if you want more bands
hline((obLevel+osLevel)/2, linestyle=dotted)
plot(imi, color=red, linewidth=2)
plot(imi>=ulx? imi : na, color=green, style=cross, linewidth=3 )
plot(imi<=llx? imi : na, color=maroon, style=cross, linewidth=3 )
plot(ema(imi, lengthMA), color=blue)