What is the Stochastic Momentum Index?
Understand the Stochastic Momentum Index (SMI), a powerful technical indicator for identifying momentum and overbought/oversold conditions in trading.
Introduction to the Stochastic Momentum Index (SMI)
The Stochastic Momentum Index (SMI) is a technical analysis indicator developed by William Blau. It builds on the traditional Stochastic Oscillator by measuring the momentum of price movements relative to a range, rather than just the position of the closing price. Traders use SMI to identify overbought or oversold conditions and potential trend reversals in markets like forex, stocks, and commodities.
Key Concepts
- Momentum: Measures how far the current price deviates from the midpoint of a high-low range over a period.
- Range: Typically oscillates between -100 and +100, with values above +40 indicating overbought and below -40 indicating oversold.
- Smoothing: Applies exponential moving averages (EMAs) to reduce noise and highlight trends.
How SMI Works
The SMI calculates the difference between the current closing price and the midpoint of the high-low range over a specified period (e.g., 14 periods). This difference is then normalized and smoothed with EMAs to produce a value between -100 and +100. A signal line (often a 3-period EMA of the SMI) is added for crossover signals.
Formula (simplified):
SMI = 100 * (EMA(EMA(Close - Midpoint)) / EMA(EMA(High - Low)))
Where Midpoint = (Highest High + Lowest Low) / 2 over the period.
Trading with SMI
- Overbought/Oversold: SMI > +40 suggests overbought (potential sell), SMI < -40 suggests oversold (potential buy).
- Crossovers: When SMI crosses above/below the signal line, it may indicate a buy/sell signal.
- Divergence: If price makes a new high/low but SMI doesn’t, it could signal a reversal.
SMI in MetaTrader (MQL4)
In MetaTrader 4, you can use the built-in SMI indicator or code a custom one using MQL4. The iSMI function isn’t standard, so traders often implement it manually with arrays and EMAs.
// Example: Basic SMI calculation logic in MQL4 double CalculateSMI(int period, int smooth1, int smooth2) { double high = iHighest(NULL, 0, MODE_HIGH, period, 1); double low = iLowest(NULL, 0, MODE_LOW, period, 1); double midpoint = (high + low) / 2; double diff = Close[1] - midpoint; // Apply EMA smoothing (simplified) return diff; // Full implementation requires EMA functions }
Try It Yourself
Add the SMI indicator to MetaTrader 4 from the Navigator (if available) or code it using MQL4 to analyze price momentum on your charts.
SMI Interpretation Example:
SMI = +45 (Overbought) | SMI = -50 (Oversold)