Chande Momentum Oscillator Indicator: Formula, Settings and How to Read It

The Chande Momentum Oscillator, published by Tushar Chande in 1994, compares the sum of upward closing changes with the sum of downward ones over a fixed window and expresses the difference as a percentage of their total. It is bounded between −100 and +100, centred on zero, with a default period of 14.

Senzoukria · Indicators · Updated September 2026


Chande Momentum Oscillator ships with the Senzoukria desktop app, in the Momentum group of the indicator catalogue. It is drawn in its own panel below the chart.

What Chande Momentum Oscillator measures

Each bar contributes either an up amount or a down amount, taken from the change since the previous close. The oscillator divides the difference of the two sums by their total, so +50 means upward movement accounted for three quarters of all closing movement in the window. Unlike the RSI there is no Wilder smoothing at all: the sums are raw and roll off cleanly, which makes the window exactly N bars with no exponential tail — that is the point of Chande's design. When both sums are zero, meaning the close did not move once across the entire window, the indicator returns nothing rather than zero, because a CMO of zero means as much up as down, which is a different statement.

The formula, as implemented

This is not a description of how the indicator is usually defined elsewhere — it is what the shipped code computes, documented next to the implementation:

CMO — Chande Momentum Oscillator (Tushar Chande, 1994) : up = max(0, close − closeₚ) ; down = max(0, closeₚ − close) CMO = 100 · (Σ_N up − Σ_N down) / (Σ_N up + Σ_N down) ∈ [−100, 100] SOMME GLISSANTE BRUTE, PAS de lissage de Wilder — c'est LA différence avec `rsi` (momentum.ts), et elle est voulue par Chande : sans mémoire exponentielle, le CMO réagit franchement et sa fenêtre est exactement N barres. Second écart avec le RSI : le numérateur est up − down (et non up seul), d'où une échelle centrée sur 0 au lieu de 50. Σ(up + down) NULLE (marché parfaitement figé sur toute la fenêtre) → null, JAMAIS 0 : un CMO de 0 signifie « autant de hausse que de baisse », ce qui n'est pas « aucune variation ». Défaut N=14 (Chande). Warm-up : i ≥ N (il faut N variations, la première barre n'en produit pas).

How to read it

  • Zero is the balance point — as much closing movement up as down over the window. This is why the scale is centred differently from the RSI's 50.
  • Readings toward +100 mean almost every close in the window rose; the size of those moves does not matter, only their direction and their sum.
  • With no exponential memory, a large bar leaves the calculation abruptly when it drops out of the window, so a step in the line can come from an old bar exiting rather than from the current one.
  • Extended stays beyond ±50 describe a one-directional sequence of closes and often accompany a trend rather than mark its end.
  • When the CMO and the RSI disagree on the same chart, the difference usually comes from the smoothing, not from the price.

Parameters and defaults

period (14, Chande's default) fixes the window exactly, with nothing carried beyond it. A short period reacts fully within a few bars and spends more time near the extremes; a long one requires a sustained run of same-direction closes to get there. The first value appears at index N — the N+1-th bar — since N closing changes have to exist before the sums do.

Chande Momentum Oscillator — parameters exposed in the app, with the values it ships with.
ParameterTypeDefaultRange
Periodnumber141 – 500

What it does not show

The CMO uses closes only. It ignores the intrabar range, the traded volume and the aggressor side, so a session of small persistent up-closes can reach the same reading as a strong directional move. The unsmoothed window cuts both ways: more responsive, but also prone to steps when large bars leave the window, which can be mistaken for a signal. On very quiet or illiquid series where closes rarely change, the oscillator is either undefined or driven by a handful of ticks.

Using it in Senzoukria

Add it from the Indicators panel of any footprint chart or candle chart. It runs on futures data from Rithmic or Databento and on crypto pairs from Binance and Bybit, on the same engine — the calculation does not change with the venue, only the data feeding it does. Market data subscriptions are billed by the provider, separately from the app.

See the full indicator library, or start with the order flow guide if you are new to reading aggression, delta and absorption.

Frequently asked questions

How is the Chande Momentum Oscillator different from the RSI?
Two differences, both deliberate. The CMO puts up minus down in the numerator rather than up alone, which centres the scale on zero instead of 50; and it uses raw rolling sums where the RSI uses Wilder's exponential smoothing. The result is an oscillator whose window really is N bars, with no long tail, so it reacts more sharply and forgets more abruptly.
What is the range of the CMO?
From −100 to +100. It reaches +100 only when every closing change in the window was upward, and −100 when every one was downward, since the numerator and denominator then coincide in absolute value. Intermediate values give the share of total closing movement that went one way.
Why does the CMO leave a gap on some bars?
If the close does not change at all across the whole window, the up and down sums are both zero and the ratio is undefined. Rather than print a zero, which would be read as balanced movement, the indicator emits nothing. This normally shows up only on illiquid instruments or during frozen periods.

Keep reading