Educational disclaimer: This article explains how an indicator is calculated and read. It is not investment advice, it contains no trade recommendations, and no indicator reading predicts future prices. Trading carries a real risk of loss.
The stochastic momentum index (SMI) is William Blau's 1993 rework of the stochastic oscillator. It asks one question: how far is today's close from the middle of the recent high-low range, measured against the size of that range? The answer runs from -100 to +100, with zero meaning the close sits right on the midpoint, and that's the whole idea; the trouble is the formula. When we compared the pages that rank for this term, we found three different calculations printed as if they were the same indicator. Code the wrong one and your line won't match the chart you're looking at.
This guide prints the correct construction once, works it through on a labelled 14-bar sequence, and shows what the two common wrong versions read on those exact same bars. It also covers what the +40 and -40 lines really mark, which of the three default settings to change first, and why TradingView's "SMI Ergodic" is a different calculation altogether.
What is the stochastic momentum index?
The classic stochastic oscillator, popularised by George Lane in the 1950s, places the close inside the range by measuring it against the low. A close at the low reads 0, a close at the high reads 100, and a close exactly at the midpoint of the range reads 50. Wikipedia's entry on the stochastic oscillator lays out that %K and %D construction if you want the background.
Blau moved the anchor. The SMI measures the close against the midpoint of the range, then divides by half the range. It's the same data with a different zero: a close at the midpoint now reads 0 rather than 50, a close at the top reads +100, and a close at the bottom reads -100. According to the luxalgo library entry, the original appeared in the January 1993 issue of Technical Analysis of Stocks & Commodities.
He then smoothed both the numerator and the denominator twice with exponential moving averages. That second step is what makes it the SMI rather than a rescaled stochastic, and if you skip it you get a different line, as the worked example below shows.
The correct SMI formula, step by step
Three settings drive the calculation, and most platforms default to 10, 3 and 3. Call them n (the lookback), a (the first smoothing) and b (the second smoothing).
- Find the range. HH = the highest high of the last n bars. LL = the lowest low of the last n bars.
- Find the midpoint. mid = (HH + LL) / 2.
- Distance. D = close - mid. This is positive when the close sits in the upper half of the range.
- Range. R = HH - LL.
- Double-smooth both. DS = EMA(EMA(D, a), b). RS = EMA(EMA(R, a), b).
- Scale. SMI = 100 × DS / (0.5 × RS).
- Signal line. An EMA of the SMI itself, often 10 periods (some platforms use 3).
Step 6 is where the page-one confusion lives, so here it is written two ways. These are the same equation:
SMI = 100 × DS / (0.5 × RS)
SMI = 200 × DS / RS
The amCharts developer documentation prints the second form: smi = 200 * (ds / dhl), where dhl is the double-smoothed full range (HH - LL). Per the amCharts docs, that is the version their stock chart ships. It's correct, and it only looks different from the first form because the "half" moved out of the denominator and into the multiplier.
The scaling trap: 100 and 200 each belong to one denominator
Here's the rule: if the denominator is the full range, multiply by 200, and if the denominator is half the range, multiply by 100. Mix them up and your line lands outside the intended bounds.
- 100 × DS / RS (full range, 100 multiplier): every reading is halved. The line lives between -50 and +50, so a +40 crossing almost never happens.
- 200 × DS / (0.5 × RS) (half range, 200 multiplier): every reading is doubled. The line can swing to ±200, and the ±40 lines get crossed all the time.
Neither mistake throws an error, and the chart still draws a wiggly line, which is why the error survives copy-paste from one article to the next.
There's a third variant in circulation. The xbtfx broker blog prints a single-pass version: SMI = 100 × (close - midpoint) / (0.5 × range), with no smoothing at all. Run the algebra and that collapses to 2 × %K - 100, so in plain terms it's the fast stochastic stretched onto a -100 to +100 scale. It has none of the double smoothing that Blau built the indicator around, so it whipsaws exactly as much as raw %K does.
A worked example on 14 bars
This is an illustrative sequence, not market data, and we built it by hand so every number can be checked on a calculator. It's an up-move, a pullback and a recovery, which is the shape where the formulas disagree most. To keep the table short we use n = 5, a = 3, b = 3. Each EMA is seeded with its first input value, so the first two or three SMI readings are warm-up and shouldn't be trusted.
Bars 1 to 14 (high / low / close): 101.0/99.2/100.5 · 102.4/100.6/102.0 · 103.1/101.5/102.2 · 102.8/101.0/102.5 · 104.0/102.1/103.8 · 105.2/103.4/104.1 · 104.6/102.9/104.4 · 106.1/104.0/105.7 · 105.4/103.6/104.0 · 104.2/102.3/102.8 · 103.5/101.8/103.3 · 104.9/102.7/104.6 · 106.8/104.6/106.5 · 107.3/105.5/105.9.
| Bar | HH | LL | Mid | D | R | Blau SMI | Single-pass | 100 / full | 200 / half |
|---|---|---|---|---|---|---|---|---|---|
| 5 | 104.0 | 99.2 | 101.60 | 2.20 | 4.8 | 91.7 | 91.7 | 45.8 | 183.3 |
| 6 | 105.2 | 100.6 | 102.90 | 1.20 | 4.6 | 82.1 | 52.2 | 41.1 | 164.2 |
| 7 | 105.2 | 101.0 | 103.10 | 1.30 | 4.2 | 75.0 | 61.9 | 37.5 | 150.0 |
| 8 | 106.1 | 101.0 | 103.55 | 2.15 | 5.1 | 75.7 | 84.3 | 37.9 | 151.5 |
| 9 | 106.1 | 102.1 | 104.10 | -0.10 | 4.0 | 58.1 | -5.0 | 29.1 | 116.3 |
| 10 | 106.1 | 102.3 | 104.20 | -1.40 | 3.8 | 24.3 | -73.7 | 12.2 | 48.7 |
| 11 | 106.1 | 101.8 | 103.95 | -0.65 | 4.3 | 1.5 | -30.2 | 0.8 | 3.1 |
| 12 | 106.1 | 101.8 | 103.95 | 0.65 | 4.3 | 3.0 | 30.2 | 1.5 | 6.0 |
| 13 | 106.8 | 101.8 | 104.30 | 2.20 | 5.0 | 27.3 | 88.0 | 13.7 | 54.6 |
| 14 | 107.3 | 101.8 | 104.55 | 1.35 | 5.5 | 39.0 | 49.1 | 19.5 | 78.1 |
Take bar 10 as the check: the double-smoothed distance there is 0.525 and the double-smoothed range is 4.316, so the Blau SMI is 100 × 0.525 / (0.5 × 4.316) = 24.3. You can reproduce every row the same way with a spreadsheet and the bar values above.
Now read across the table. Four formulas, one set of bars, four different stories:
- On bar 10, the single-pass version reads -73.7, deep below -40. The Blau SMI reads +24.3, still positive. One says "close sits near the bottom of the range today," while the other says "the smoothed close is still in the upper half." Both are arithmetically right; they describe different things.
- On bar 13, the single-pass line jumps to +88.0, way above +40. Blau reads +27.3, still under the line. Anyone using the single-pass formula would see an "extreme" reading the real SMI never printed.
- The 100/full column tops out at 45.8 on the first warm-up bar and stays under 40 from bar 7 onward. The ±40 lines become almost useless.
- The 200/half column sits above +40 on 8 of the 10 bars. Every reading looks extreme.
That's the practical cost of the formula mix-up. The levels people quote, ±40, only mean something on the correctly scaled, double-smoothed line.
What +40 and -40 really mark
Blau's lines are usually drawn at +40 and -40, and a lot of articles call them overbought and oversold. That language is borrowed from the classic stochastic, and it's misleading here.
A reading of +60 says one thing: over the last few bars, after smoothing, the close has been sitting well into the upper part of its recent range. It says nothing about whether price is "expensive," because in a steady uptrend the close keeps printing near the top of the range, so the SMI can stay above +40 for weeks. A reading above +40 is a description of position, not a forecast.
We'd read the bands this way: above +40 means the close has been consistently strong inside its range. Between -40 and +40 is the normal zone, where the close moves around the middle. Below -40 means the close has been consistently weak. A move back inside the band after a long stay outside tells you the close has stopped pressing the edge of its range. Whether that matters depends on everything else on your chart.
The 10/3/3 default: which number to change first
| Setting | Default | What it controls | Raise it and… |
|---|---|---|---|
| Lookback (n) | 10 | How many bars define the high-low range | The range widens, readings move toward zero, extremes become rarer |
| First smoothing (a) | 3 | The first EMA on distance and range | The line slows down and loses some of its bar-to-bar jitter |
| Second smoothing (b) | 3 | The second EMA on the already-smoothed series | Further smoothing, with a bit more lag |
| Signal EMA | 3 or 10 | The trigger line drawn over the SMI | Fewer signal crossings, each one later |
If the line crosses its signal too often, change the first smoothing before anything else. The lookback changes what you're measuring, because a 20-bar range is a different question from a 10-bar range, while the smoothing only changes how noisy the answer is. Raising a from 3 to 5 or 8 is the cleaner fix for chop. Leave the lookback alone until you've decided the range itself is the wrong size for your timeframe.
The surjithctly SMI script on TradingView, one of the most-used public versions, carries the author's own note that it can produce several crossings inside one trend. That's the real complaint most users have, and it's a smoothing problem first.
Signal-line crossings versus zero-line crossings
The SMI produces two kinds of event, and they mean quite different things for anyone reading the chart.
Signal-line crossings happen when the SMI crosses its own EMA. They're fast and frequent, and they tell you the SMI's direction has turned, which is a statement about the indicator, not directly about price.
Zero-line crossings are tied to the definition. Zero is the midpoint of the range, so when the SMI crosses from negative to positive, the smoothed close has moved from the lower half of the range into the upper half. That's a concrete, checkable statement about where price sits, and it fires more slowly and less often. In the worked example, the Blau line came close to zero on bar 11 (+1.5) but never crossed it, while the single-pass line crossed zero twice between bars 8 and 12.
SMI vs SMI Ergodic: check the formula, not the name
This one catches a lot of people, because TradingView's built-in list includes indicators named SMI Ergodic Indicator and SMI Ergodic Oscillator. They are not Blau's stochastic momentum index; the Ergodic family is built on the True Strength Index, which double-smooths price changes (momentum) rather than the close's distance from a range midpoint. Wikipedia's True Strength Index page gives that construction. Blau designed both, which is where the shared name comes from.
So if you load the built-in "SMI Ergodic" and then follow an SMI article's rules about ±40, you're applying one indicator's levels to another indicator's line. Even the luxalgo library page uses an "SMI Ergodic" preview image beside its SMI explanation. Before trusting any SMI on any platform, open the source or the docs and confirm it uses the high-low midpoint and double smoothing.
Divergence on the SMI, and when it means nothing
A bullish divergence is a lower low in price paired with a higher low on the SMI. Mechanically, that says: price made a new low, but relative to the range at that time, the close didn't sit as deep below the midpoint as it did at the earlier low. The same logic runs in reverse for bearish divergence. We cover the confirmation side of this in our RSI divergence settings guide, and most of it carries over.
Here's the condition that breaks it: the SMI is measured against a moving range. If the range itself has shifted a long way between the two lows, perhaps because a big outside bar dropped out of the lookback window, the two readings aren't measured on the same ruler. A "higher low" on the SMI can come purely from a wider range in the denominator. Check that HH and LL are roughly comparable at both points before reading anything into the divergence.
Where the SMI fits in a chart
The SMI is a position-in-range tool that answers "where is the close relative to recent highs and lows?" That overlaps heavily with the classic stochastic and partly with RSI, which measures the balance of up-closes against down-closes. Our RSI definition page covers that calculation. Putting the SMI, a stochastic and RSI on the same chart mostly shows you the same information three times. Our guide on how to stack indicators without false signals explains why that kind of overlap inflates confidence without adding evidence.
A better pairing is the SMI plus something that measures a different thing, such as volume or money flow. That's the idea behind our own Adaptive AI Oscillation Engine: momentum, money flow, divergence mapping and volume-based reversal detection in one panel, rather than three oscillators that all read the same range. If you're still choosing your core set, the Quantzee guide to trading indicators and signals walks through the main families and what each one measures.
What we won't claim about SMI signals
You won't find a win rate, a hit rate or a reversal percentage for SMI crossings in this article. We didn't run one, none of the ranking pages publishes one either, and any number you see quoted without context isn't usable.
A figure worth reading would have to state five things:
- The instrument, or the list of instruments.
- The timeframe, such as 15-minute, 1-hour or daily bars, and the date range.
- The exact crossing definition: signal line or zero line, and the 10/3/3 or other settings.
- The exit rule, because a cross with no exit is not a testable strategy.
- The cost assumption: commissions, spread and slippage.
If a claim leaves out any of those, treat it as a description, not evidence. The CMT Association, the professional body for technical analysts at cmtassociation.org, publishes material on testing methodology that's worth reading before you trust any indicator statistic.
Frequently Asked Questions
Methodology: the formula comes from the amCharts developer documentation and the Blau citation on the luxalgo library page. The 14-bar table is an illustrative sequence we computed in Python and checked by hand on bar 10. No market data or performance figures are used anywhere in the piece.
