Systemicalpha

Mass Index

systemic:core-miIndicatorsfunction1 cr

Inputs

NameTypeDescription
Window FastintegerThe EMA period for the **first smoothing** of the daily range.
Window SlowintegerThe EMA period for the **second smoothing** (double-EMA) of the daily range.
Price HighfloatarrayThe highest price reached during each period—one of two inputs used to calculate the daily range.
Price LowfloatarrayThe lowest price reached during each period—paired with Price High to calculate the daily range.

Outputs

NameTypeDescription
MIfloatarrayThe Mass Index value—a volatility measure that detects potential trend reversals through range expansion analysis.

The Mass Index is a unique volatility-based indicator developed by Donald Dorsey in 1992. Unlike momentum indicators that measure direction, the Mass Index measures range expansion and contraction—detecting when volatility is building toward a potential trend reversal.

Key insight: The Mass Index doesn't tell you which way the market will move—only that it's likely to change direction soon. You need other indicators to determine bullish vs. bearish.


The Reversal Bulge Pattern

The Mass Index's signature signal is the "reversal bulge":

  1. MI rises above 27 (range is expanding rapidly)
  2. MI falls below 26.5 (expansion is exhausting)
  3. A trend reversal often follows
flowchart LR
    subgraph Phase1["1. Buildup"]
        A["MI rising toward 27"]
    end
    
    subgraph Phase2["2. Bulge"]
        B["MI crosses above 27"]
    end
    
    subgraph Phase3["3. Trigger"]
        C["MI drops below 26.5"]
    end
    
    subgraph Phase4["4. Signal"]
        D["Reversal imminent"]
    end
    
    Phase1 --> Phase2 --> Phase3 --> Phase4

Mathematical Foundation

The Mass Index uses a clever ratio of EMAs to detect when price ranges are expanding unusually fast:

Step 1: Calculate the Daily Range

Range=High−Low\text{Range} = \text{High} - \text{Low}

Step 2: Smooth the Range (Fast EMA)

EMAfast=EMA9(Range)\text{EMA}_{\text{fast}} = \text{EMA}_9(\text{Range})

Step 3: Double-Smooth (Slow EMA)

EMAslow=EMA9(EMAfast)\text{EMA}_{\text{slow}} = \text{EMA}_9(\text{EMA}_{\text{fast}})

Step 4: Calculate the EMA Ratio

Ratio=EMAfastEMAslow\text{Ratio} = \frac{\text{EMA}_{\text{fast}}}{\text{EMA}_{\text{slow}}}

Step 5: Sum Over 25 Periods

Mass Index=∑i=125Ratioi\text{Mass Index} = \sum_{i=1}^{25} \text{Ratio}_i


Why This Formula Works

The ratio of single-EMA to double-EMA is normally close to 1.0 (when ranges are stable). When ranges start expanding rapidly, the fast EMA reacts quicker than the slow EMA, pushing the ratio above 1.0.

Summing 25 of these ratios:

  • Stable market: MI ≈ 25 (each ratio ≈ 1.0)
  • Expanding ranges: MI > 27 (ratios consistently > 1.0)
  • Contracting ranges: MI < 25 (ratios < 1.0)
flowchart TD
    subgraph Inputs["Price Inputs"]
        H["High prices"]
        L["Low prices"]
    end
    
    subgraph Range["Daily Range"]
        R["High − Low"]
    end
    
    subgraph Fast["Fast EMA"]
        F["9-period EMA of Range"]
    end
    
    subgraph Slow["Slow EMA"]
        S["9-period EMA of Fast EMA"]
    end
    
    subgraph Ratio["EMA Ratio"]
        RAT["Fast / Slow"]
    end
    
    subgraph Sum["Mass Index"]
        MI["Sum of 25 Ratios"]
    end
    
    H --> R
    L --> R
    R --> F --> S
    F --> RAT
    S --> RAT
    RAT --> MI

Interpreting Mass Index Values

MI ValueMarket ConditionImplication
< 25Range contractingLow volatility, trend may continue
25-26Normal volatilityNo signal
26-27Range expandingWatch for bulge formation
> 27Significant expansionReversal bulge forming
Drops below 26.5 (after >27)ExhaustionReversal signal triggered

Trading Strategies

Strategy 1: Classic Reversal Bulge

The textbook Mass Index strategy:

StepConditionAction
1MI rises above 27Alert: volatility expanding
2MI drops below 26.5Signal triggered
3Check current trendDetermine reversal direction
4Confirm with other indicatorEnter trade

Critical: The Mass Index only signals that a reversal may occur—not which direction. Use a trend indicator (EMA, ADX) to determine if you should go long or short.

Strategy 2: MI + Moving Average

ConditionInterpretationAction
MI reversal bulge + Price below 50 EMABearish trend exhaustingLook for long entry
MI reversal bulge + Price above 50 EMABullish trend exhaustingLook for short entry

Strategy 3: Volatility Confirmation

Use MI as a filter for other signals:

MI StateOther SignalTrade?
MI > 27Any entry signalWait—reversal coming
MI < 25Trend-following signalProceed—trend stable
MI dropping from 27+Breakout signalHigh probability setup

Missing Data

A bar is skipped whenever High or Low is missing there. Both EMAs and the final rolling sum run over the observed-bar subsequence — a Friday-to-Monday gap bridges as one adjacent step, not three calendar days — then the result is placed back at the original bar positions. Every skipped bar and the warm-up before the first computable value are None at full input length; nothing is forward-filled or defaulted to 0.

Known divergence (out of scope): the underlying implementation applies window_fast to both EMA stages — window_slow only sizes the final rolling sum, never a second EMA period as the formula above implies. This predates the null-handling migration and is not corrected here.

Configuration Parameters

ParameterDefaultDescription
Window Fast9EMA period for smoothing the daily range
Window Slow9EMA period for double-smoothing

Note: Unlike most indicators, the fast and slow windows in Mass Index are typically the same (both 9). The "slow" EMA is applied to the fast EMA, not to the original data.

Alternative Configurations

StyleFastSlowEffect
Standard99Classic Dorsey settings
Sensitive77Earlier signals, more noise
Smooth1212Fewer signals, more reliable

Mass Index vs. Other Volatility Indicators

IndicatorMeasuresMI Advantage
ATRAverage range magnitudeMI detects changes in range, not absolute size
Bollinger BandsStandard deviationMI uses ratio approach, less lag
VIXImplied volatilityMI works on any asset, uses price only
Keltner ChannelsATR-based bandsMI specifically designed for reversals

Strengths

AspectBenefit
Direction-agnosticWorks equally in uptrends and downtrends
Early warningSignals form before the reversal, not after
Unique approachMeasures range dynamics others ignore
Clear threshold27/26.5 levels provide objective signals

Limitations

AspectChallenge
No directionMust combine with trend indicators
Rare signalsBulges above 27 don't occur frequently
False signalsCan trigger in choppy, trendless markets
Requires confirmationNever trade MI signals alone

Combining MI with Other Modules

CombinationPurpose
MI + EMADetermine reversal direction (long vs. short)
MI + RSIConfirm overbought/oversold at reversal
MI + MACDDual confirmation of momentum shift
MI + ADXVerify trend strength before reversal
MI + ATRSize positions based on current volatility

Historical Context

Donald Dorsey introduced the Mass Index in his 1992 article in Technical Analysis of Stocks & Commodities magazine. His insight was that trend reversals are often preceded by range expansion—prices become more volatile before changing direction.

The indicator remains valuable because it captures a market dynamic that most momentum indicators miss: the exhaustion of a trend through increasing volatility.


Data Alignment and Multi-Input Considerations

The Mass Index requires synchronized High and Low price series. When connecting different data sources:

Input Alignment

ScenarioSystem BehaviorImpact on MI
Same source, same timeframeNo adjustment neededAccurate range calculation
Different timeframesUpsampling via forward-fillArtificial range consistency
Different data lengthsPadding via last-value extensionEdge distortion

Critical Alignment Warning

Because the Mass Index relies on the relationship between High and Low prices:

Range=High−Low\text{Range} = \text{High} - \text{Low}

Misaligned data can produce:

  • Negative ranges if Low exceeds High after misalignment
  • Artificially stable ranges when forward-fill creates repeated identical values
  • Distorted EMA ratios that generate false reversal signals

Best Practice: Always source High and Low prices from the same OHLC data feed and timeframe. Never mix daily High with intraday Low data.

Window Parameters

The window_fast and window_slow parameters are constants and require no alignment consideration—they define the EMA periods applied uniformly across the synchronized price data.


Indicator Profile

quadrantChart
    title MI Indicator Profile
    x-axis Low Popularity --> High Popularity
    y-axis Low Reliability --> High Reliability
    quadrant-1 High potential  
    quadrant-2 Established leaders
    quadrant-3 Niche tools
    quadrant-4 Popular but risky
    MI - Stocks: [0.35, 0.65]
    MI - Crypto: [0.25, 0.55]

Profile Dimensions

DimensionStocksCryptoExplanation
Popularity0.350.25Niche indicator—known primarily among volatility specialists. Less documented than mainstream indicators like RSI or MACD.
Reliability0.650.55Specific reversal bulge pattern has historical backing, but signals are rare. Cryptocurrency volatility patterns less studied.
ComplexityModerateModerateDouble-EMA ratio approach requires understanding EMA mathematics. Threshold-based signals are straightforward once understood.
VersatilityLimitedLimitedDesigned specifically for reversal detection—not adaptable to trend-following or mean-reversion strategies without modification.
Recent InterestStableGrowingClassic indicator with consistent niche following. Crypto traders increasingly exploring volatility-based indicators.

Further Reading

Rendering diagrams...
© 2026 WanoLabs. All rights reservedAlpha build v0.1.5