A momentum oscillator that measures net price movement over a lookback period, scaled to a −100 to +100 range. Mathematically similar to RSI but without the smoothing — sharper, more responsive, more noisy.
CMO(14) on MES 5m — pure momentum cycling
What it measures
- Net momentum. Sum of up-day price changes minus sum of down-day price changes, normalized to total absolute movement.
- Pure (unsmoothed) momentum reading. Where RSI smooths the averages, CMO sums them raw — more responsive, more volatile.
- Direction certainty. The bundled Direction output (1 or −1) gives a binary momentum-direction flag.
Formula
How AlgoLift computes it
For each bar inside the lookback:
if Close[i] > Close[i-1]: UpMove[i] = Close[i] − Close[i-1]
else: UpMove[i] = 0
if Close[i] < Close[i-1]: DownMove[i] = Close[i-1] − Close[i]
else: DownMove[i] = 0
SumUp = sum(UpMove) over period
SumDown = sum(DownMove) over period
CMO = 100 × (SumUp − SumDown) / (SumUp + SumDown)
The denominator is the total absolute movement; the numerator is the net directional movement. The result ranges from −100 (all down moves) to +100 (all up moves).
Compare to RSI: RSI uses smoothed averages of up/down moves. CMO uses raw sums. The difference makes CMO more responsive to recent changes and more sensitive to single-bar shocks.
Developed by Tushar Chande in 1995.
Inputs in AlgoLift
| Setting | Default | Range | Notes |
|---|---|---|---|
| Period | 14 | 2–200 | Lookback for the up/down sums. |
Recommended periods
- 5–9 (fast): Short-term scalping.
- 14 (default): Standard. Works for most intraday strategies.
- 20–30: Smoother readings for swing setups.
Outputs in AlgoLift
| Handle | Type | Plotted | Notes |
|---|---|---|---|
| CMO | Numeric | Always | The oscillator (−100 to +100). |
| Slope | Numeric | On select | Rate of change of CMO — useful for momentum acceleration detection. |
| Direction | Numeric | On select | Binary: 1 when CMO > 0, −1 when CMO < 0. Convenient as a regime flag. |
CMO node — default state with all three outputs
How to read it
- CMO > +50: Strong upside momentum — possibly overextended.
- CMO < −50: Strong downside momentum — possibly overextended.
- CMO crossing zero: Net momentum flipped direction. The Direction output handles this for you.
- CMO near zero with low slope: Sideways action, no directional bias.
- CMO at extreme with flat slope: Momentum has plateaued — possible reversal warning.
The ±50 thresholds are less established than RSI's 70/30 — some traders use ±60 or ±70 for tighter filters.
CMO is RSI without the smoothing. Sharper signals, more responsiveness, more whipsaws. Use it when you want momentum readings that react faster than RSI; use RSI when you want smoother readings that survive more noise.
Best in / worst in
Best in instruments with clean trends and clear momentum shifts, on liquid futures and major equity indices during regular trading hours, and as a confirmation indicator alongside slower trend filters.
Worst in sideways chop (whipsaws across zero continuously), low-liquidity windows (the unsmoothed structure amplifies tape noise), and on instruments with frequent gaps that create artificially extreme readings.
Three setups
1. CMO direction as a regime filter
Use the Direction output (1 or −1) as a clean binary trend flag.
- Long-only mode: Direction = 1 — strategy permitted to take longs only.
- Short-only mode: Direction = −1 — short entries only.
A simple, no-tuning regime classifier that can sit alongside any other strategy.
CMO Direction as a regime gate
2. Extreme mean-reversion entry
Trade against CMO extremes when conditions support mean reversion.
- Long: CMO < −50 AND CMO slope > 0 (turning back up) AND KAMA ER < 0.3 (range regime).
- Short: Symmetric.
The KAMA ER filter is what makes this safe — CMO extremes in trends don't reverse; only in ranges.
3. Zero-line breakout entry
Use CMO crossing zero as a momentum-shift entry trigger.
- Long: CMO crosses above 0 AND price > EMA(50) AND CMO slope > some threshold (genuine acceleration, not noise drift).
- Short: Symmetric.
The slope requirement filters out lazy zero-line drifts that don't represent real momentum changes.
Advanced patterns in AlgoLift
CMO Direction in a Cluster. CMO + a fast moving average + ATR-based stops forms a compact short-term momentum kit. Save the combination as a Cluster once, drop it into any new short-horizon strategy.
CMO and RSI agreement. Run both indicators in parallel — only trade when they agree on extreme conditions (CMO > +50 AND RSI > 70 = strong confirmed momentum). The two indicators have different smoothing structures, so requiring agreement filters out noise that either alone would produce.
Direction output as conditional flow trigger. Wire the Direction output into a Conditional Flow node that switches the strategy between long-bias logic (Direction = 1) and short-bias logic (Direction = −1). Eliminates the need for separate strategies — one graph adapts to the current regime.
Common mistakes
- Treating CMO and RSI as interchangeable. CMO at +60 is not the same as RSI at 70. The scaling is different (CMO is −100 to +100; RSI is 0 to 100) and the underlying smoothing is different. Setting "CMO overbought = 60" requires its own validation.
- Using CMO alone as a primary signal. The unsmoothed structure makes CMO whip too much for standalone use. Always pair with a trend filter, regime detector, or second oscillator.
- Ignoring the Slope output. Slope flips precede zero-line crosses. Strategies that only read CMO value miss the early-warning signal.