CCI Indicator: Formula, Settings and How to Read It
The Commodity Channel Index, introduced by Donald Lambert in 1980, measures how far a bar's typical price sits from its own moving average, expressed in units of average deviation. It plots in a separate pane with a 20-period default and is unbounded in both directions.
Senzoukria · Indicators · Updated September 2026
CCI 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 CCI measures
Typical price is (high + low + close) / 3. The index subtracts the 20-period simple average of that typical price and divides by the mean absolute deviation over the same window, scaled by Lambert's constant 0.015 — a fixed value in this implementation, not a setting, because it belongs to the original definition. Dividing by 0.015 multiplies the distance by about 66.7, which places the ±100 marks at 1.5 mean deviations from the average and is where those familiar levels come from. Note that the denominator is mean absolute deviation, not standard deviation, so a single outsized bar distorts CCI less than it would a z-score. When a window is perfectly flat and the deviation is zero, the indicator returns nothing rather than zero.
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:
CCI (Lambert, 1980) — constante 0.015 (celle de Lambert, non paramétrée) : TP = (high + low + close)/3 CCI = (TP − SMA_N(TP)) / (0.015 · meanDev) meanDev = moyenne des |TP_j − SMA_N| sur la fenêtre meanDev = 0 (fenêtre plate) → null. Défaut N=20 (Lambert).
How to read it
- The sign says whether typical price is above or below its own average; the magnitude says by how many average deviations, on a scale where 100 equals 1.5 of them.
- ±100 are reference levels produced by the 0.015 constant, not barriers — readings far beyond them are ordinary in fast markets and describe distance, not exhaustion.
- A return from beyond +100 back inside says the distance from the average is shrinking, which may be a pause as easily as a turn.
- A higher price high paired with a lower CCI high means the second push covered less ground relative to its own recent deviation.
- A long stay on one side of zero is normal in a trend, because the average itself is moving with price; the index is under no obligation to return to zero.
Parameters and defaults
period (20, Lambert's default) governs both the average and the deviation window. Shorter periods give a sharper index that exceeds ±100 often, longer ones smooth it and make excursions rarer. The 0.015 constant is fixed and not exposed, so the period is the only way to change the effective scale.
| Parameter | Type | Default | Range |
|---|---|---|---|
| Period | number | 20 | 2 – 200 |
What it does not show
CCI is derived from price alone and cannot say whether the distance from the average was covered by aggressive buying or by an empty book. Being unbounded, it offers no natural ceiling, and comparing absolute values between instruments or bar types is misleading. In a persistent trend it can hold beyond ±100 for long stretches, so reading each excursion as a reversal will be wrong for as long as the trend lasts. On flat windows it emits no value, which is correct but leaves a visible gap in the line.
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.
Related indicators
- RSI — Momentum
- MACD — Momentum
- Stochastic — Momentum
- Stoch RSI — Momentum
- ROC — Momentum
- Williams %R — Momentum
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
- Why is CCI divided by 0.015?
- The constant is Lambert's original scaling factor, chosen so that a large majority of readings fall inside the ±100 band, which is where those conventional levels come from. It is not a statistical necessity, just a normalisation that makes the index readable. In Senzoukria it is hard-coded rather than exposed as a parameter, because changing it would no longer be Lambert's CCI.
- What does a CCI reading above +100 mean?
- It means the typical price sits more than 1.5 mean absolute deviations above its own moving average: dividing by 0.015 scales that distance by roughly 66.7, so 1.5 deviations map to 100. It describes an unusual distance from the recent average, nothing more. In trending markets CCI can hold above +100 for many bars in a row.
- Does CCI use the closing price?
- Only partly. The input is the typical price, (high + low + close) / 3, so the close counts for one third and the bar's extremes for the rest. This makes CCI respond to the range of the bar and not just to where it finished, which distinguishes it from close-only oscillators such as the Chande Momentum Oscillator.