CCI Indicator Tested: Only 58% to 60% of Bars Stayed Inside ±100, Not the 70% to 80% It Was Built For, and 0 of 20 CCI Runs Passed

Key takeaways
- The Commodity Channel Index was built so that 70% to 80% of its readings stay between -100 and +100, which makes a move outside that band look special. I measured it on EURUSD and gold, M5 and M15: 16,926 EURUSD bars and 13,736 gold bars.
- Only 58% to 60% of bars stayed inside ±100, on every chart and for CCI 14, 20 and 50 alike. CCI 20 sat outside the band about 40% of the time and crossed +100 or -100 about 31 times a trading day on EURUSD M5.
- 0 of 20 CCI runs passed all three checks. Five classic rules on four charts: 3 made money after the spread, none of them in both halves and beating random entries at once.
- On EURUSD, after CCI crossed above +100, price went 1 ATR back down first 55% of the time, not up. On gold the cross was a coin flip.
- Adding the EMA 200 trend filter to the CCI zero-line cross made it worse on all 4 charts.
Donald Lambert introduced the CCI in 1980 for commodity cycles. Today it ships with MetaTrader 4 and 5 and turns up in many forex courses, usually with one of two rules: buy when CCI breaks above +100 because momentum is strong, or sell when it comes back down through +100 because the market was “overbought”.
Both rules lean on the same assumption: that a reading beyond ±100 is unusual. That can be counted, and so can the trades.
What does the CCI measure?

| Part | How it is calculated, as in MT4 |
|---|---|
| Typical price | (high + low + close) / 3 for each candle |
| Average | A simple moving average of the typical price over n candles |
| Mean deviation | The average distance of the typical price from that average, over the same n candles |
| CCI | (typical price – average) / (0.015 × mean deviation) |
The 0.015 is not a law of markets. Lambert picked it so that most readings, roughly 70% to 80%, would fall inside ±100. A reading of +100 just means the typical price is 1.5 mean deviations above its own average. CCI has no ceiling, so it can print +300 on a sharp candle.
How was it tested?

- Data: EURUSD M5 from June 3 to August 26, 2026, 16,926 bars; gold M5 from June 16 to August 26, 13,736 bars. M15 built from the same bars.
- Band check: the share of bars with CCI inside ±100 and ±200, for periods 14, 20 and 50.
- Five rules, CCI 20: momentum (cross above +100 buy, below -100 sell), reversal (back down through +100 sell, back up through -100 buy), zero-line cross, zero-line cross on the EMA 200 side only, and a return from beyond ±200.
- Exit for all: stop 1.5 ATR, target 3 ATR, 48 bars at most, one trade at a time, the same exit as in the forex indicators list, ranked.
- Cost and pass: 1 pip on EURUSD and $0.30 an ounce on gold, from spread and swap costs in MT4. A run passes if it makes money after cost, in both halves (split July 15), and beats the 95th percentile of 200 random-entry runs with the same exit, as in algorithmic rule vs random entry.
How often does the CCI stay between -100 and +100?
| Share of bars | EURUSD M5 | EURUSD M15 | Gold M5 | Gold M15 |
|---|---|---|---|---|
| CCI 14 inside ±100 | 60.3% | 58.8% | 59.5% | 59.2% |
| CCI 20 inside ±100 | 60.0% | 58.3% | 58.9% | 58.9% |
| CCI 50 inside ±100 | 57.9% | 59.3% | 58.4% | 58.1% |
| CCI 20 inside ±200 | 94.9% | 94.0% | 94.0% | 93.7% |
| CCI 20 beyond ±300 | 0.42% | 0.48% | 0.53% | 1.01% |
| CCI 20, median reading, either sign | 84 | 87 | 86 | 86 |
All twelve numbers in the first three rows landed between 57.9% and 60.3%. That is well short of the 70% to 80% the constant was designed for, and it did not depend on the pair, the timeframe or the period. The typical CCI reading was 84 to 87 away from zero, so a value of 100 is barely above normal.
In practice this means the ±100 lines are crossed all the time: about 31 times a trading day for CCI 20 on EURUSD M5, 27 on gold M5, 9 to 10 on M15. The ±200 band behaved more like the “rare” zone people imagine: 5% to 6% of bars were outside it.
What happens after CCI crosses +100 or -100?
| Which 1 ATR came first, 48 bars | EURUSD M5 | EURUSD M15 | Gold M5 | Gold M15 |
|---|---|---|---|---|
| After a cross out of ±100: with the cross | 43.7% | 44.2% | 50.6% | 47.6% |
| After a cross out of ±100: against it | 54.9% | 54.7% | 47.9% | 51.0% |
| After a return inside ±100: reversal side | 47.8% | 47.9% | 47.7% | 52.1% |
| Random bar, random side | 50.4% | 50.0% | 51.0% | 53.4% |
On EURUSD a break above +100 was more often a high than a launch: price came back 1 ATR before it went another 1 ATR on 55% of crosses, against about 50% for a random bar. That fits the idea that +100 is an ordinary level the price touches and leaves. On gold neither direction stood out.
Waiting for CCI to come back inside the band, the usual “overbought” entry, did not help. The reversal side came first 48% of the time on three charts, a little worse than random.
Did any CCI rule make money?
| Profit per trade after cost | EURUSD M5 | EURUSD M15 | Gold M5 | Gold M15 |
|---|---|---|---|---|
| Momentum, cross out of ±100 | -1.29 (987) | -1.16 (257) | -0.60 (620) | +0.32 (193) |
| Reversal, back inside ±100 | -1.32 (1,147) | -1.44 (308) | -0.59 (713) | -0.23 (220) |
| Zero-line cross | -1.21 (781) | -0.72 (219) | +0.38 (499) | +0.11 (156) |
| Zero-line cross, EMA 200 side | -1.41 (630) | -1.59 (188) | -1.92 (434) | -0.07 (132) |
| Back inside from beyond ±200 | -0.73 (465) | -1.11 (154) | -0.71 (363) | -2.07 (114) |
| Random entries, median | -1.01 | -1.24 | -0.58 | -0.24 |
| Random entries, 95th percentile | -0.73 | -0.24 | +0.11 | +2.24 |
Pips on EURUSD, dollars an ounce on gold, trades in brackets. The random rows match the momentum rule’s trade count; every run was checked against its own random range.
Three of twenty runs made money after the spread, all on gold. The best, the zero-line cross on gold M5, made $0.38 an ounce a trade and beat its random range, but it lost $0.39 a trade in the first half, so it did not pass. Before cost, 7 of 20 runs were above zero, so the spread was not the only problem: most CCI rules were no better than a random entry with the same stop and target.
The ±200 reversal was the least bad rule on EURUSD M5 and the only one there with a profit before cost, +0.27 pips a trade. After the 1-pip spread it still lost 0.73. Which period and level did best on each chart is in CCI settings for MT4.
Does a trend filter fix the CCI?
No. Taking the zero-line cross only on the side of the EMA 200 made it worse on all four charts: -1.41 against -1.21 pips on EURUSD M5, -1.59 against -0.72 on M15, -$1.92 against +$0.38 on gold M5, -$0.07 against +$0.11 on gold M15. It cut 13% to 19% of the trades, and the ones it cut were the better ones. The same thing happened to MACD in MACD zero line and trend filter tested.
What would I do with the CCI?
- Do not treat ±100 as extreme. CCI sat beyond it 40% of the time on every chart here. If you want a rare reading, ±200 is closer to what the books describe.
- Do not trade the cross on its own. No CCI 20 rule passed, and the classic +100 breakout on EURUSD M5 lost more than 95% of random-entry runs with the same exit.
- Know what you are holding. CCI moved with RSI 14 at a correlation of 0.85 to 0.86. It is the same kind of momentum reading, just louder. The side-by-side is in CCI vs RSI.
- Check any oscillator the same way. How trend tools and oscillators compare as families is in trend indicators vs oscillators.
Frequently asked questions
What is the CCI indicator?
The Commodity Channel Index measures how far the typical price is from its moving average, in units of mean deviation. Readings above +100 or below -100 are usually called strong or overbought and oversold.
Does the CCI stay between -100 and +100 most of the time?
Less than designed. On EURUSD and gold, M5 and M15, only 58% to 60% of bars were inside ±100, against the 70% to 80% the formula’s constant was chosen for.
Is CCI a good indicator for forex?
Not on its own in this test. 0 of 20 runs of five classic CCI rules made money after cost, in both halves and better than random entries.
Should I buy when CCI goes above 100?
On EURUSD it was the wrong side more often than not: price fell 1 ATR before rising 1 ATR after 55% of crosses. The rule lost 1.16 to 1.29 pips a trade after the spread.
What is a good CCI level for overbought?
If you use one, ±200 behaves like a real extreme: 5% to 6% of bars were beyond it. Trading the return from ±200 still lost after cost on all four charts.
Want a line drawn by a rule, not a busy oscillator?
It is my own enhanced DeMARK Trend Line indicator for MetaTrader 4 and 5. Non repaint, clean, and free.

