Commodity Channel Index
CCI measures how far price has strayed from its statistical norm: beyond ±100 is "abnormal" — it works as both a breakout and an overbought/oversold tool, two faces of one indicator.
What it is
The Commodity Channel Index, published by Donald Lambert in 1980, computes how far the Typical Price (H+L+C ÷3) deviates from its moving average, normalized by a 0.015 constant so that roughly 70–80% of readings fall between ±100. Beyond ±100, price is statistically "abnormal" — Lambert intended this as an early-trend signal, but the market developed a second use as an overbought/oversold reversion tool. One indicator, two faces.
Origin
CCI was created by analyst-mathematician Donald Lambert and published in 1980 in Commodities magazine (later Stocks & Commodities). It was born in commodity futures — hence the name. Lambert's key contribution is the 0.015 constant: it makes the ±100 levels mean the same thing across instruments regardless of price scale, enabling cross-market comparison.
Download Camovia Tray free — check quotes, manage positions, and hide in one click from your system tray.
Download FreeThe formula
Three steps:
Mean Deviation is the average of |TP − SMA| across the window — less sensitive to outliers than standard deviation. The 0.015 constant is Lambert's normalization: without it, instruments of different price scales would have incomparable CCI values; with it, ±100 is universal.
Worked example
A small numeric example of "straying from the norm":
- An instrument's 14-day TP averages 100 with a mean deviation of 2 — "normal" wiggle is about ±2.
- Today TP = 105: a deviation of +5, 2.5× the normal size.
- CCI = 5 ÷ (0.015 × 2) = 166.7 — far beyond +100: statistically abnormal.
"Abnormal" has two readings: a new trend starting (breakout use — Lambert's intent) or an extreme about to revert (overbought use — the market's later development). Which reading is right depends on the regime — structurally identical to the two faces of a Bollinger touch.
How to read it
CCI ranges and the two usage systems:
| Range | Common interpretation |
|---|---|
| Above +100 | Abnormally strong: breakout use = new uptrend; reversion use = overbought |
| 0 – +100 | Normal, bullish tilt |
| Near 0 | The equilibrium midline |
| 0 – −100 | Normal, bearish tilt |
| Below −100 | Abnormally weak: breakout use = new downtrend; reversion use = oversold |
The fork depends on regime: Lambert's original logic (follow the break) works best at trend births; the reversion logic (fade ±100) wins in clear ranges. Pairing with ADX for regime detection is the mainstream approach.
Common signals & usage
Breakout beyond ±100 (Lambert's original)
CCI crossing above +100 marks a new uptrend (below −100, a downtrend) — the original "chase the abnormal" use, with stops for the pullback risk.
Reversion at ±100
In a range, CCI spiking above +100 and crossing back down = the reversion sell; symmetric at −100 — statistically driven, banned in trends.
Divergence
Price new high without a CCI new high — fading momentum; CCI divergences often lead RSI's by half a step (more sensitive to extremes).
Zero-line filter
CCI crossing 0 is a rough mid-term momentum switch — noisy alone, use only as a secondary filter.
Limitations & common mistakes
- Mixing the two faces is the cardinal error: the breakout use chases strength, the reversion use fades it — the same signal means opposite things. Pick the regime first.
- Never touch the 0.015 constant: changing it redefines the whole scale — tune sensitivity via the period N, not the constant.
- Fat tails and flattening coexist: CCI reacts to extremes faster than RSI, yet strong trends can pin it beyond ±100 for long stretches — same flattening risk as RSI.
- Mean deviation is blunter than std-dev: CCI reacts more mildly than Bollinger to one huge bar — watching both is complementary.
- Lower-timeframe noise: 15-minute CCI ping-pongs across ±100 — reversion trades there need strict regime filtering.
CCI in MT5
CCI is a built-in MT5 oscillator (single line). The MQL5 function for programmatic use is iCCI:
| MQL5 function | iCCI() |
| Default period | ma_period=14 |
| Default applied price | PRICE_TYPICAL (note: not CLOSE) |
| Variant | iCCIX() (extended typical-price version) |
| Display window | Sub-window (guides at ±100) |
iCCI defaults to PRICE_TYPICAL — one of the few built-ins not using the close, faithful to Lambert's paper (TP carries intraday high/low information). iCCIX is an extended variant on the same algorithm. Changing the applied price changes the character of the readings — check conventions when comparing analyses.
Behavior across timeframes
15-minute
The reversion use's high-frequency home — but false signals abound; filter with a larger timeframe
1-hour / 4-hour
The main field for breakout use (±100 crosses with an ADX filter)
Daily
Lambert's native habitat: the 14-period ±100 system is most classic here
Weekly
Weekly CCI beyond ±200 often marks the start of multi-month moves
Indicator combinations
Common pairings for CCI:
- With ADX: ADX > 25 → follow the break (CCI crosses with the trend); ADX < 20 → fade the extremes — the regime referee plus a double-edged blade. ADX
- With RSI: both are oscillators with different engines (mean deviation vs gain/loss ratio) — joint extremes make the strongest divergence signals. RSI
- With MA: MA200 sets the macro direction; CCI only times entries at extremes in that direction — trend filter plus abnormality timing. MA
FAQ
Q What is the 0.015 constant in CCI?
Lambert's normalization constant: multiplying the mean deviation by 0.015 scales all instruments to a common frame where ~70–80% of readings fall within ±100. It is part of the formula, not a tunable parameter — adjust the period N for sensitivity instead.
Q Should I buy or sell when CCI crosses +100?
Both answers are correct in the right regime: Lambert's original logic reads +100 as a new uptrend (buy); the range-regime logic reads it as overbought (sell). Use ADX or price structure to pick the regime, then the usage.
Q How is CCI different from RSI?
Same oscillator family, different engines: CCI is based on deviation of the typical price from its MA (normalized by mean deviation) — faster at extremes, unbounded; RSI is based on gain/loss ratios — bounded 0–100 and smoother. CCI flags divergences earlier; RSI is steadier.
Q Why does MT5's CCI default to Typical price?
Lambert's original paper uses TP=(H+L+C)/3 — it carries intraday high/low information that fits the statistical "deviation from norm" concept better than closes. MT5 follows the original. Third-party implementations using CLOSE will read differently.
Q How do I add CCI in MT5?
Menu: Insert → Indicators → Oscillators → Commodity Channel Index, or drag it from the Navigator. Defaults: period 14, applied price Typical; add custom levels like ±200 in the levels tab for extreme readings.
Turn MT5 / MT4 into a Tray Tool
Check quotes, manage positions, and hide in one click.
Download Camovia TrayThis page is educational content about a technical indicator. It is not investment advice. Indicator signals can and do fail — always combine them with your own risk management.