How it works
The Chande Momentum Oscillator takes the same two ingredients as RSI — the sum of up moves and the sum of down moves over a window — and combines them differently. Instead of a ratio passed through a bounded transform, it takes the difference divided by the total, scaled to run from -100 to +100. A reading of +100 means every bar in the window closed up; -100 means every bar closed down; zero means gains and losses were exactly balanced.
The deliberate design choice is the absence of smoothing. RSI applies Wilder's exponential average to the gains and losses before dividing, which is what makes it lag. CMO uses raw sums over the window, so it responds immediately to a change in the balance of the last N bars. The consequence is exactly what you would expect: a faster, more volatile oscillator that reaches its extremes far more often than RSI does, and one that is more useful for measuring how one-sided a stretch has been than for gentle overbought calls.
There is a neat relationship worth knowing. If you computed RSI using simple averages rather than Wilder's smoothing, CMO would equal exactly two times that RSI minus 100 — the same information mapped from a 0-to-100 scale onto a -100-to-+100 one. The practical difference between the real indicators is therefore entirely about the smoothing method, not about what is being measured.
Its author's own intended use was as a trend-strength gauge rather than a reversal signal. Because the reading is a direct measure of one-sidedness, an absolute value near 100 says the market has been moving in one direction almost every bar, which is the definition of a strong trend. That reading also feeds Chande's variable-index dynamic average, where the absolute CMO controls the smoothing constant of an adaptive moving average: strong one-sidedness makes the average faster, balance makes it slower.
In use it sits alongside RSI rather than replacing it. Where RSI is the smoothed, conservative version that suits mean-reversion frameworks, CMO is the raw version that suits regime detection and adaptive systems. Traders who apply a moving average to CMO end up with something very close to RSI again, which is a useful sanity check on what the smoothing is actually doing.
Calculation
The arithmetic in words, in the order it happens.
Over the last N bars, separate each bar's close-to-close change into gains and losses. Let SU be the sum of all the positive changes and SD the sum of the absolute values of all the negative changes. Then CMO = 100 x (SU - SD) / (SU + SD). The default N is 9. Note that these are plain sums over the window with no exponential smoothing, which is the essential difference from RSI. The output is bounded between -100 and +100, with zero meaning gains and losses over the window were exactly equal. If both sums are zero — a completely flat window — the value is defined as zero.
Source
An AlgoBeamScript implementation of the formula above, written by us from the arithmetic so the code and the calculation agree line for line.
Runs unchanged on the platform and in the AlgoBeamTS runtime. The language reference is in the documentation.
Inputs
Defaults are the values most charting packages ship with. They are conventions, not optimal settings — the right length depends on your instrument and your holding period.
| Input | Default | What it changes |
|---|---|---|
| Length | 9 | Bars in the summation window. The short default makes CMO a fast oscillator; 14 aligns it with RSI's conventional window for direct comparison, and 20 or more turns it into a slower measure of how one-sided a whole trend leg has been. |
| Source | Close | The series the bar-to-bar changes are measured on. Close is standard; using a smoothed source reintroduces the lag the indicator was designed to avoid. |
| Overbought / oversold levels | +50 / -50 | Conventional guide lines on the -100 to +100 scale, corresponding roughly to RSI's 75 and 25. Because the raw sums make the line volatile, many users widen them to ±70 to keep signals rare. |
How to read it
What practitioners take from the plot. Read these as descriptions of market state, not as entry signals.
- Above +50
- Gains have outweighed losses by three to one over the window. Stretched in a range; simply strong in a trend.
- Below -50
- The mirror case on the downside, with losses dominating the window by a wide margin.
- Absolute value near 100
- Almost every bar in the window moved the same way. This is a trend-strength reading, and it is what the indicator was originally designed to detect.
- Oscillating tightly around zero
- Gains and losses are cancelling out — a genuinely balanced market. Adaptive systems that use CMO as a speed control slow right down here.
- Crossing zero
- The balance of the window has flipped. A fast regime marker, but one that flips often on short settings.
Limitations
Where this indicator misleads. None of these are fixed by a better parameter.
- No smoothing means high variance: the line jumps around considerably more than RSI and produces far more threshold crossings, most of which are not tradable.
- Being a windowed sum, it suffers a drop-off effect — a large bar leaving the back of the window changes the reading without anything happening today.
- It saturates near ±100 in strong trends just as RSI does, so it cannot be used to call turns on level alone.
- The short default of 9 bars is very sensitive on intraday charts, where a couple of unusual bars can dominate the entire window.
Educational reference. This page explains how an indicator is built and how it is commonly read. It is not investment advice, not a recommendation and not a signal service. No indicator is profitable on its own — each is a way of describing a market, and any rule built on one has to be tested with realistic costs before it is traded.