All posts
PublishedUpdatedByEvidence recordCCIoscillatormean reversiontrend followingindicatorbacktestUSD/JPY

Is the CCI ±100 Strategy Profitable? 2,448 Settings Tested

2,448 CCI settings swept on USD/JPY: the line sits outside ±100 for 40% of the year, the breakout beat the fade everywhere, and the best reading is a moving average.

Fading CCI at ±100 lost money in all six timeframe-and-year cells at period 14. Following the same ±100 break made money in five of six.

Backtest this setup

CCI (Commodity Channel Index) measures how far price has traveled from its own average, divided by how far it usually travels. Two lines are drawn at +100 and −100, and crossing them is described as the market having gone too far. What you do next is where the advice splits: one school fades the ±100 line and takes the other side; the other follows it, so a break through +100 is a buy.

The ±100 lines are supposed to be rare. The 0.015 constant in the formula is usually explained as the number that keeps roughly 70–80% of readings inside the band. Measured on USD/JPY, the line sat outside ±100 for about 40% of the year.

50%60%70%80%71014203050CCI period
M15H1H4the 70–80% target of the 0.015 constantUSD/JPY 2025, every bar of each timeframe
The 0.015 constant is supposed to keep 70–80% of readings inside ±100. On every timeframe and every period it holds 57.5–61.9%, so CCI is outside ±100 on about 40% of bars.

Mean reversion or trend following?

The fade lost in all six cells, while the breakout and zero cross mostly profited. These are USD/JPY trades over 2024 and 2025 with a 0.3-pip spread, at period 14 and level 100, read three ways: the fade takes the other side once outside ±100 (long and short added together), the breakout takes the side it broke, and the zero cross takes the side of a cross through 0.

TimeframeYearFade±100 breakoutZero cross
M152025−1,175.2+643.4−1,136.4
M152024−805.2−203.2−910.7
H12025−1,193.7+424.8+2,294.4
H12024−2,249.8+1,839.9+2,579.8
H42025−156.2+577.5+569.5
H42024−995.8+863.8+1,363.3

The fade lost in all six cells. The breakout made money in five, the zero cross in four. Measured on price alone, the move after a break also beat an average bar's in 22 of 24 cells on the 15-minute and hourly charts.

Trade counts, hourly 2025: the fade takes 210 longs and 212 shorts, the breakout 321, the zero cross 693.

Why the fade loses

Across the fade settings, the average loss was larger than the average win despite the higher win rate.

ReadingTimeframeMean win rateMean winMean lossProfitable in 2025
Fade, longH159.9%+44.4−68.727/69
Fade, shortH156.7%+44.0−83.12/69
±100 breakoutH140.1%+101.6−71.820/29
Zero crossH131.2%+59.5−23.327/30

Settings with at least one trade are included. The fade averaged a win rate above 60%, but its average loss was larger than its average win. The trend readings won less often and retained a larger payoff per winner.

The short fade is the worst of the set: on the 15-minute chart, 0 of 69 live settings finished 2025 in profit. That is not just the trend, either; 2025 closed 56 pips below where it opened.

What CCI actually measures

Three steps:

  1. Typical price = (high + low + close) ÷ 3
  2. Mean deviation = the average distance of the last N typical prices from their own average
  3. CCI = (typical price − average) ÷ (0.015 × mean deviation)

The numerator is how far price has gone; the denominator is how far it normally goes. CCI is a multiple of a normal move.

The typical price, the mean deviation rather than a standard deviation, and the constant are all choices the author made.

Changing the 0.015 constant is equivalent to changing the level

0.015 is a divisor, so changing it rescales the whole line. A different constant is the same indicator read at a different level, not a different indicator.

ConstantEquivalent level at 0.015
0.01066.7
0.015100
0.020133.3
0.030200

There are not two settings here; there is one.

The period sets a hard ceiling on the level

Deviations from a mean sum to zero, so the positive ones and the negative ones total the same amount. A single bar can hold at most all of the positive half, which caps |CCI| at period ÷ 0.03.

PeriodCeilingLargest reading in 2025 (H1)
7233.3233.3
10333.3333.3
14466.7466.7
20666.7507.2
301000.0596.4
501666.7592.1

This is not a theoretical bound the market stays away from. Nine of the eighteen timeframe-and-period cells hit their ceiling exactly during the year.

The practical consequence: shorten the period and the higher levels stop existing. In this sweep, seven settings per cell (period 7 waiting at ±250) never fired once, in all twelve timeframe-and-window cells. Period and level are not independent.

Mean deviation or standard deviation

Swapping the denominator for a standard deviation (H1, 2025):

PeriodBars that disagree about ±100Bars that disagree about zero
79.73%0%
149.11%0%
509.57%0%

Not one bar disagrees about the zero line. The denominator is never negative, so no measure of spread can change the sign. It only moves the scale, and there it flips the ±100 reading on about one bar in ten.

Setting it up and reading it

It ships with everything. CCI draws in its own panel below the price chart, not over the candles.

PlatformWhere to add it
MT4 / MT5Insert → Indicators → Oscillators → Commodity Channel Index
TradingViewSearch the indicator list for Commodity Channel Index
Browser (Formiq)Pick "CCI" from the indicator list

The fields in the settings dialog

FieldDefaultWhat it does
Period14How many bars go into the calculation. Some traders use 20
Apply toTypical price (HLC/3)The average of high, low and close — not the close
Levels−100 and +100Two horizontal lines drawn inside the panel; the decision points

MT4 sometimes opens with no level lines at all. Add −100 and 100 on the "Levels" tab, otherwise nothing in this article is visible on your screen.

What appears

One line moving up and down inside the panel. Unlike RSI or the stochastic, it has no ceiling and no floor: it can travel far above or below zero.

Where the line isThe usual reading
Above +100Overbought, or a strong push upward
Between −100 and +100Neutral, nothing to do
Below −100Oversold, or a strong push downward
Crossing zeroThe direction turned

The "or" is there because one rule fades readings outside ±100 while another trades a break through ±100. This article measures the fade and the ±100 breakout separately.

How people trade it

NameEntryThe idea
FadeBuy below −100, sell above +100It went too far, so it comes back
Breakout (±100)Buy when it breaks above +100, sell when it breaks below −100Breaking out means momentum
Zero crossBuy crossing above 0, sell crossing belowThe direction changed

Looking at the same ±100 lines, the fade and the breakout place opposite trades. The indicator's definition does not settle which is right, so both were run under identical conditions here.

Period and level cannot be chosen independently

Period and level look like two settings, but the period also caps the level: a 7-bar CCI can never travel past ±233.3. Changing the applied price to the close gives a different line too: the ±100 state disagrees on 14.68% of bars at period 7 and 5.00% at period 50. Not a difference to wave away.

How this was measured

ItemValue
PairUSD/JPY
Window2025-01-01 to 2025-12-31, with 2024 run identically for comparison
Timeframes15-minute / 1-hour / 4-hour
ReadingsFade (take the other side past ±level) / breakout (take the side it broke) / zero cross
Periods7, 10, 14, 20, 30, 50
LevelsFade: entry 100/150/200/250 × exit 0/50/100. Breakout: 50/100/150/200/250. Zero cross: −100/−50/0/50/100
Combinations204 per cell; 3 timeframes × 4 windows = 2,448 runs
ExitThe opposite signal. Only the fade carries a separate exit level
Stops and targetsNone in the main sweep, measured separately below
Spread0.3 pips fixed, filled at the close
Size0.1 lot

The fade points one way ("below −100 is a buy" only ever buys), so the long fade and short fade were swept as separate trading rules. The breakout and the zero cross are symmetric, so entry and exit share one rule set.

What does price do after ±100?

Price alone, with no entry rule and no exit rule, leaves nothing but whether ±100 says anything.

From every bar where a 14-period CCI broke out of ±100, and every bar where it came back inside, the move over the next 10, 20 and 50 bars is measured as how much more the move was than an average bar's. USD/JPY rose 1,632 pips in 2024, so the market's own drift is taken out.

−10−50+5+10+15+10 bars+20 bars+50 barsmove from that bar, minus the drift (pips)
M15 · n=5776H1 · n=1396H4 · n=346solid: just after breaking out of ±100; dashed: just after coming back inside
On M15 and H1, the move after CCI broke out of ±100 was larger than an average bar's, and the move after it came back inside was smaller. On H4 both results were reversed.
TimeframeAfter breaking out (+10 / +20 / +50 bars)After coming back insideEvents
M15+0.46 / +0.93 / +2.04−0.86 / −1.01 / −1.925,776
H1+2.51 / +3.93 / +2.89−2.61 / −3.06 / −3.171,396
H4−3.89 / −3.14 / −9.79+2.91 / +5.02 / +12.50346

Both years and both directions pooled. On the 15-minute and hourly charts, breaking out is followed by more move than usual and coming back inside by less. Split by year, timeframe and horizon, the break-out cells beat the drift in 22 of 24 and the come-back cells fell short of it in 24 of 24.

On four-hour bars, moves after a ±100 breakout were below the unconditional average, while moves after a return inside ±100 were above it. Those results held in only 6 of 12 and 5 of 12 year-direction-horizon cells, respectively, across 346 events.

So ±100 leans toward keep going, not too far. At least on the two faster charts.

Which combination held for two years?

The hourly zero cross led at 22 of 30. One year on its own is a selection problem, so here is the count of settings profitable in 2024 and 2025.

ReadingM15H1H4
Fade, long2/728/7222/72
Fade, short0/720/721/72
±100 breakout17/3020/3011/30
Zero cross6/3022/3013/30

The hourly zero cross is the most durable at 22 of 30. The short fade survives 1 of 216.

The four-hour long fade is the one respectable fade number at 22/72, but 56 of 69 live settings were profitable in 2025 alone. A reading that works for six settings in ten one year is not a reading that works.

What period should you use?

The answer changes with the trading rule, so period alone does not settle it. Period results are split into the zero-cross, ±100 breakout, and fade rules because changing period affects their annual net and profitable-setting counts differently.

Zero cross, 15-minute chart, by period

PeriodMean 2025Mean tradesProfitable 2025Profitable 2024
7−1,1214,5510/50/5
14−7303,0300/50/5
30+3281,9563/53/5
50+1,2551,4195/54/5

On the 15-minute chart the zero cross improves the longer you make it, and the reason is the trade count. Period 7 at level 0 trades 4,533 times a year, which is 1,359.9 pips of spread at 0.3 pips. It lost 1,699.3, so four fifths of the loss is the cost of trading at all. The same rule at period 50 takes 1,469 trades and finishes +614.1 in 2025 and +189.5 in 2024.

±100 breakout, hourly, by level

LevelMean 2025Mean tradesProfitable both years
±50+1,5514046/6
±100+1,3952926/6
±150+1,5191826/6
±200−936852/6
±250−675290/6

Flat from ±50 to ±150, then it falls apart. ±250 fires 29 times a year.

Zero cross, hourly, by level

LevelMean 2025Mean 2024Profitable both years
−100+166+1,8923/6
−50+1,325+2,3096/6
0+1,548+1,8176/6
+50+1,763+6534/6
+100+1,710−4253/6

No reason to move the line off zero. Only −50 and 0 are 6/6. The positive offsets look better in 2025 and collapse in 2024.

Does one year's best carry over?

Only two of four beat the median of the year they were moved into.

ReadingTimeframe2024 setting2024 net2025 net2025 median
±100 breakoutH120 @ ±100+3,393.7 pips+1,048.5 pips+1,113.0 pips
Zero crossH130 @ −50+3,046.7 pips+1,729.0 pips+1,294.1 pips
±100 breakoutM1530 @ ±50+3,250.8 pips+1,717.2 pips+549.8 pips
Fade, longH410 / 200→100+946.1 pips+176.7 pips+387.5 pips

Two of the four exceeded the 2025 median. The hourly breakout finished 64.5 pips below its median, at +1,048.5 versus +1,113.0. The four-hour fade made +176.7 against a +387.5 median.

For scale, the best four-hour breakout of 2025 was period 50 at ±250, +1,777.3 pips on 2 trades. Numbers like that cannot choose a setting.

What does the CCI zero line mean?

It is a moving average crossover. CCI's denominator is 0.015 × mean deviation, and a mean deviation is never negative. So the sign of CCI is exactly the sign of (typical price − its own simple moving average). Measured across periods 7 to 50, the signs and the crossing bars matched everywhere.

The best-performing reading in this article is therefore reproducible without CCI. What CCI contributes is the typical price. Comparing it against the identical rule reading the close (an SMA(1)/SMA(N) crossover, since SMA(1) is the close) over all 36 matched runs:

−3k−3k−1.5k−1.5k00+1.5k+1.5k+3k+3kclose / SMA cross (pips)CCI zero cross (pips)
one point per timeframe × year × period (36 in all)above the diagonal: the CCI zero cross won (25 of 36)
The zero cross against the same rule reading the close instead of (H+L+C)/3. It trades less and has a higher win rate in all 36 cells, but finishes ahead in only 25.
CCI zero crossClose / SMA cross
Trades (H1, 2025, period 14)693885
Win rate30.45%26.44%
Net pips+2,294.4+1,801.6

Across all 36:

  • Fewer trades in 36 of 36
  • Higher win rate in 36 of 36 (by 1.5 to 8.0 points)
  • More net pips in only 25 of 36

(H+L+C)/3 filters whipsaw. A close-only rule counts every bar that pokes through the average and comes back; averaging the bar's own range means it never poked through. That effect is completely consistent: no exceptions in 36 runs.

But some of the trades it removed were good ones, which is what the other 11 runs are. The filtering is certain; the improvement is not.

Filters, stops and cost

An ADX filter breaks the trend readings

The ADX filter reduced both trend-rule results. For the M15 breakout, every tested ADX threshold changed +643.4 pips into a loss. For the H1 zero cross, ADX ≥ 20 reduced +2,294.4 to +786.0 pips, with higher thresholds reducing it further.

ReadingTimeframeYearADX conditionTradesNet
±100 breakoutM152025None1,298+643.4 pips
±100 breakoutM152025≥ 20854−183.8 pips
±100 breakoutM152025≥ 25577−618.9 pips
±100 breakoutM152025≥ 30358−229.5 pips
Zero crossH12025None693+2,294.4 pips
Zero crossH12025≥ 20399+786.0 pips
Zero crossH12025≥ 25285+617.2 pips
Zero crossH12025≥ 30179−19.7 pips

Adding a trend filter to a trend rule is a duplicated condition.

The four-hour fade is the exception (2025 improves from +796.2 to +1,091.2 at ADX ≥ 30, on 16 trades) but the same filter takes 2024 from +26.6 to −527.9. It does not cross the year boundary.

Sessions

The Tokyo window (UTC 0–8) helped the breakout: M15 2025 +643.4 → +877.0, M15 2024 −203.2 → +1,718.7, H1 2025 +424.8 → +1,146.8. H1 2024 slipped from +1,839.9 to +1,746.0, so three of four. It did not help the zero cross (H1 2025 +2,294.4 → +571.3).

Stops and targets

On the hourly zero cross, a 100-pip stop with a 200-pip target lifts 2025 to +2,811.4 but drops 2024 to +2,095.4 against a +2,579.8 baseline. A 24-bar time exit gives +3,588.2 in 2025 and +2,303.0 in 2024. Nothing improved both years.

Cost

Net pips fall linearly with the spread. Pips lost = trades × spread held with no error on all four settings.

SettingTradesSpread 00.31.0Break-even
±100 breakout, M151,298+1,032.8+643.4−265.20.80 pips
±100 breakout, H1321+521.1+424.8+200.11.62 pips
Zero cross, H1693+2,502.2+2,294.4+1,809.33.61 pips

The hourly zero cross breaks even at 3.61 pips. The 15-minute breakout has 0.80 pips of room and does not survive a one-pip spread.

Notes

  • One pair, two years. CCI was built for commodity futures; on a different market even the share of time outside ±100 would change
  • The spread is fixed at 0.3 pips. In practice it widens around releases, and a setting with 0.80 pips of room does not survive that
  • Exits are the opposite signal. Adding stops and targets improved only one year in every case
  • The four-hour chart traded only about 40 breakouts and 20 fades a year, and it also inverted in the price-only measurement, so its figures deserve less weight than the other timeframes'
  • "The typical price helps" is consistent for trade count and win rate only. For net pips it is 25 of 36, and whether that counts as helping depends on which column you read

Questions people ask

What are the best CCI settings?
In this test the reading mattered more than the numbers. Reading ±100 as a breakout beat reading it as an overbought/oversold fade in every one of six timeframe-and-year cells at period 14. The single most durable setting was the zero-line cross on the hourly chart, which finished +2,294.4 pips in 2025 on 693 trades and +2,579.8 pips in 2024 on 727, and stayed profitable in both years for 22 of 30 settings.
Is a CCI reading past ±100 unusual?
No. The 0.015 constant in the formula is usually explained as putting roughly 70-80% of readings inside ±100. Measured on USD/JPY in 2025, the share inside the band was 57.5-61.9% on every one of eighteen timeframe-and-period cells, so the line spends about 40% of the year outside it.
Should CCI be used for mean reversion or trend following?
Trend following won. At period 14 and level 100 the fade lost money in all six timeframe-and-year cells, while the breakout made money in five of six. Price agrees: measured with no strategy at all, the move after breaking out of ±100 beat the unconditional drift in 22 of 24 fifteen-minute and hourly cells, and the move after coming back inside fell short of it in 24 of 24.
What does the CCI zero line mean?
It is the typical price crossing its own simple moving average, exactly. CCI's denominator is never negative, so the sign of CCI is the sign of (typical price minus its average). Across periods 7 to 50 the signs and the crossing bars matched on every bar. The only thing CCI adds over a close-price moving average crossover is the (H+L+C)/3 input, which cut the trade count in all 36 matched runs and lifted the win rate in all 36, but improved net pips in only 25.
Does the CCI period change what levels are reachable?
Yes, and it is a hard limit. Deviations from a mean sum to zero, so |CCI| can never exceed the period divided by 0.03. A 7-bar CCI tops out at ±233.3, which is why every rule waiting at ±250 with period 7 sat dead in all twelve timeframe-and-window cells of this sweep. Nine of eighteen timeframe-and-period cells actually touched their own ceiling during the year.

Formiq is a free browser-based FX terminal with replay practice and no-code backtesting. Open the chart or see what the free plan includes.