CCI on crypto: the momentum reading works, the reversal does not
Buying when CCI rose above +100 to +200 made money with all 6 momentum settings on 4-hour bars, a median of +43.3% a year after costs. Buying below −100 to −200 lost with all 6 reversal settings.
How it works
The Commodity Channel Index measures how far the typical price, (high + low + close) ÷ 3, is from its n-bar average, scaled by the average deviation so that most readings fall between −100 and +100. Readings outside that range can be read as stretched, a reversal signal, or as strong, a momentum signal.
What we tested
- CCI over 14 or 20 bars; levels 100, 150 or 200.
- Reversal: buy below −level, sell above 0: 6 settings. Momentum: buy above +level, sell below 0: 6 settings.
Every setting was run on eight bar lengths, from 1 minute to 4 hours, on Upbit's Korean-won market: 12 large coins from January 2024 to October 2026 (from January 2025 on 5- and 10-minute bars; 8 coins from April 2026 on 1- and 3-minute bars). Signals are taken at a bar's close and filled at the next bar's open, spot buying only, with equal money in each coin. Every trade pays Upbit's 0.05% fee plus one price tick of slippage. That makes 12 single-indicator settings, and 3,423 more combinations where the best of them were given a filter or an exit rule. Full method.
Results by setting and bar length
Each cell is the yearly return after costs over the whole period. An outlined cell passed the two-period test: at least +10% a year in both the first and the second period, with the second keeping at least half of the first.
Return per year after costs, %
Sea level (0) is break-even after costs: blue is under water, green to brown is land.
Settings above water after costs: 6 of 12 on 4-hour bars, 3 of 12 on 1-hour bars, and none on 30-minute bars or shorter. Passed the two-period test: 3 on 4-hour bars.
| Setting | 1m | 3m | 5m | 10m | 15m | 30m | 1h | 4h |
|---|---|---|---|---|---|---|---|---|
| CCI(14) buy below −100, sell above 0 | −100.0 | −100.0 | −100.0 | −99.6 | −94.0 | −73.5 | −48.5 | −37.8 |
| CCI(14) buy above +100, sell below 0 | −100.0 | −100.0 | −100.0 | −99.9 | −98.1 | −84.8 | −44.0 | +39.0 |
| CCI(14) buy below −150, sell above 0 | −100.0 | −100.0 | −99.7 | −93.9 | −75.9 | −51.3 | −32.6 | −21.7 |
| CCI(14) buy above +150, sell below 0 | −100.0 | −100.0 | −100.0 | −97.9 | −89.6 | −64.1 | −18.8 | +42.9 |
| CCI(14) buy below −200, sell above 0 | −100.0 | −99.1 | −89.3 | −68.7 | −42.1 | −24.1 | −14.3 | −4.3 |
| CCI(14) buy above +200, sell below 0 | −100.0 | −99.8 | −96.6 | −81.5 | −62.5 | −36.7 | +2.6 | +29.6 |
| CCI(20) buy below −100, sell above 0 | −100.0 | −100.0 | −100.0 | −98.4 | −87.0 | −63.9 | −47.3 | −34.3 |
| CCI(20) buy above +100, sell below 0 | −100.0 | −100.0 | −100.0 | −99.5 | −94.9 | −72.7 | −23.5 | +55.1 |
| CCI(20) buy below −150, sell above 0 | −100.0 | −100.0 | −98.9 | −88.3 | −65.8 | −43.2 | −30.8 | −15.1 |
| CCI(20) buy above +150, sell below 0 | −100.0 | −100.0 | −99.8 | −95.7 | −82.5 | −45.6 | +3.0 | +48.0 |
| CCI(20) buy below −200, sell above 0 | −100.0 | −98.0 | −84.9 | −63.1 | −38.2 | −22.7 | −14.5 | −4.1 |
| CCI(20) buy above +200, sell below 0 | −100.0 | −99.6 | −95.0 | −78.0 | −57.4 | −24.8 | +8.4 | +43.8 |
Adding filters and exit rules
On each bar length, the settings with the best first-period results were combined with up to two filters (trend on a longer chart, ADX, volume, RSI range, Bitcoin's trend) or one filter and an exit rule (stop-loss, trailing stop, take-profit, time limit). Combinations were only built where this indicator ranked among the leaders in the first period.
| Bars | Combinations that traded | Passed | Best that passed | Return a year | Worst fall | Second period |
|---|---|---|---|---|---|---|
| 1-minute | 84 | 0 | None passed. Best overall: −2.3% a year | |||
| 3-minute | 557 | 0 | None passed. Best overall: −0.1% a year | |||
| 5-minute | 572 | 0 | None passed. Best overall: 0.0% a year | |||
| 10-minute | 560 | 0 | None passed. Best overall: +0.2% a year | |||
| 15-minute | 549 | 0 | None passed. Best overall: +7.2% a year | |||
| 1-hour | 579 | 17 | CCI(20) buy above +150, sell below 0 + 4-hour chart above EMA 50 + ADX(14) above 20 | +17.4% | −23.0% | +15.9% |
| 4-hour | 522 | 243 | CCI(20) buy above +100, sell below 0 + volume above 1.5× its 20-bar average | +58.4% | −22.2% | +42.8% |
What we learned
- Direction mattered more than settings: on 4-hour bars every momentum setting made money and every reversal setting lost (median −18.4%).
- CCI(20) buy above +100, sell below 0 made +55.1% a year on 4-hour bars; 3 momentum settings passed the two-period test, for example CCI(20) above +150 (+48.0%).
- With filters, 243 combinations passed on 4-hour bars. Our nine-year replay found the steadiest rule of the whole study here: CCI(14) above +150 with the close above its 100-EMA and RSI below 70 made +64% a year with slippage from 2017 to 2026, with a worst fall of 18% and no losing year.
Questions
How should CCI be used for crypto?
As a momentum signal on slow bars: buy when CCI rises above +100 to +200 and sell when it drops below zero. As an oversold signal it lost money on every bar length in our tests.
Every setup with this indicator in the explorer: 4h 1h 30m 15m