All posts
PublishedUpdatedByCCIoscillatormean 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.

CCI (Commodity Channel Index) measures how far price has travelled 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: past it, take the other side. The other school follows it: a break through +100 is a buy. Same line, opposite trades, and the indicator's definition does not settle which is right.

There is a quieter assumption underneath both. 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.

The line sat outside ±100 for about 40% of the year.

50%60%70%80%71014203050CCI period
M15H1H4the 70-80% the 0.015 aims atUSD/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 the line sits outside the band about 40% of the year.

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.

Three arbitrary choices sit inside that: the typical price, the mean deviation rather than a standard deviation, and the constant. Each one is checkable.

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.015Largest error
0.01066.71.1e-13
0.0151000
0.020133.35.7e-14
0.0302000

The errors are floating-point rounding. 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):

PeriodCorrelationBars that disagree about ±100Bars that disagree about zero
70.99619.73%0%
140.99509.11%0%
500.99579.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 as the article shows below, 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?

Before backtesting anything, look at price alone. No entry rule, no exit rule, so nothing is left but whether ±100 says anything.

Every bar where a 14-period CCI broke out of ±100, and every bar where it came back inside, is collected, and the move over the next 10, 20 and 50 bars is measured. Raw moves would be meaningless: USD/JPY rose 1,632 pips in 2024, so any long-side number is mostly drift. The unconditional average move over the same horizon is subtracted, leaving how much more the move was than an average bar's.

−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
Breaking out of ±100 is followed by more of the same move than an average bar; coming back inside is followed by less. The four-hour chart does the opposite of both.
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 towards keep going, not too far. At least on the two faster charts.

Mean reversion or trend following?

The fade lost in all six cells, while the breakout and zero cross mostly profited. Period 14 and level 100, read three ways. The fade column is the long and the short added together.

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. The trading result agrees with the price-only measurement above.

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.

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. The check at the centre of this series.

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: zero sign disagreements, zero crossing-bar disagreements.

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 x year x 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 wins a higher share 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 GMMA test found the same thing; this is the third time in the series.

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 widest margin in this series. 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 produces the separate numbers above, and none of them improved both years
  • The four-hour samples are small: about 40 breakout trades a year, about 20 for the fade. The four-hour chart also inverted in the price-only measurement, but on 6 of 12 cells, which decides nothing
  • "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 there were no sign disagreements and no crossing-bar disagreements. 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.