WhitmanTrading

CCI vs MACD

The commodity channel index measures how far price sits from its own average, scaled by typical deviation. MACD measures the gap between two moving averages. Both are unbounded, and one reports distance while the other reports whether that distance is changing.

Two open-scale readings, both described as momentum, both plotted in a panel below the chart. They measure different quantities, and the distinction only becomes visible when they disagree.

What each one is

The commodity channel index measures distance from a moving average, divided by how much price typically deviates, so the reading is scaled to that instrument’s normal behaviour. The commodity channel index covers it.

MACD measures the gap between two moving averages and plots it with a signal line, which is a smoothed version of the gap itself. MACD covers it.

Neither has limits. Both can print any value, which means a level on either is meaningful only against that instrument’s own history.

Where they differ

A price series with a distance-from-mean reading beneath.
How far from the middle. Illustrative chart - not real market data.

Distance against rate. One reports how far price has travelled from its average. The other reports whether two averages are separating, which is closer to acceleration.

The second half of a price series with a difference-of-averages reading beneath.
Whether the gap is widening. Illustrative chart - not real market data.

Whether there is a second line. MACD carries a signal line and most of the trades taken on it come from the crossing. The other has no equivalent, so its signals are thresholds and turns.

A slice of price data where distance and rate disagree.
Far out and slowing down is a real state. Illustrative chart - not real market data.

Whether the scale is normalised. The commodity channel index divides by typical deviation, so it adapts somewhat to the instrument. MACD’s scale is raw price difference and does not.

How each reacts to a fast move. The distance reading extends quickly and keeps extending. The gap between two averages widens and then narrows as the slower one catches up.

Where they agree

A window of price data feeding both readings.
Both are computed from the same closes. Illustrative chart - not real market data.

Both are functions of the same closes. Neither is independent of the other, so agreement between them is arithmetic rather than confirmation.

Both are unbounded. No level on either means anything until you have seen what that instrument normally prints, which is a calibration most people skip.

Both fail in a range. On this site’s shared series direction runs average 2.01 bars with a longest of 11, and short runs produce constant crossings and threshold breaches on both.

And neither supplies a stop. The ninetieth percentile bar range here is 1.101, and the invalidation belongs at structure rather than at a panel reading.

Which one to use

A range-bound stretch of price producing signals in both panels.
A range fires both, constantly. Illustrative chart - not real market data.

Run MACD when acceleration is the question. Whether a move is gathering pace or fading is a real thing to want to know, and the signal line gives it a defined trigger.

A slow-moving stretch of price stretched far from its average.
Stretch from the mean is the other question. Illustrative chart - not real market data.

Run the commodity channel index when stretch is the question. How far price has moved from its own average, normalised to how much it usually moves, is a different and equally legitimate measurement.

Run MACD when you want the wider support. It is far more discussed, so the rules you read elsewhere will be written for it rather than needing translation.

And run one, not both. Two unbounded panels reading the same closes produce a chart that looks thoroughly analysed and contains one observation.

Why unbounded readings need calibration

A candlestick chart annotated with the round-trip cost of a switch.
Every signal acted on costs a round trip. Illustrative chart - not real market data.

Because there is no reference point built in. A reading of any size means nothing until you know what this instrument typically prints, and that changes as conditions change.

A section of a price series drawn without volume context.
And a thin market inflates both readings. Illustrative chart - not real market data.

And because the calibration expires. A market that becomes twice as active prints larger values on both tools without anything about your rules having changed.

What to fix before running either

Look at a year of readings first. Write down the range each tool actually printed on your instrument, because that range is the only meaningful reference an unbounded reading has.

Pick one signal definition. A threshold, a zero cross or a signal-line cross are three different rules with three different trade counts, and running all three is running three methods at once.

Recalibrate when the market changes character. On this site’s shared series the average true range has a median of 0.5994 and a ninetieth percentile of 0.7954 — when a market moves toward the upper end of its own version of that spread, both readings inflate.

And never quote a level from one instrument on another. There is no shared scale, so the number is not transferable even between two markets that look similar.

The original data

Of the 24,971 unique videos in research/search-study-corpus.jsonl, no title compares these two directly — this pair is constructed from two subjects the corpus covers separately. Separately, MACD appears in 473 titles at a median of 3,534 across 339 channels, and the commodity channel index in 448 at a median of 9,318 across 344. The counts come from site/corpus_count.py.

A candlestick series with several gaps, the largest of them marked.
A gap inflates both readings at once. Illustrative chart - not real market data.

473 videos on one and 448 on the other, across 339 and 344 channels. Almost identical coverage, and nearly triple the audience per video for the commodity channel index — two equally taught subjects with very different levels of interest behind them.

A stretch of price bars cut short at a decision point.
Far from the mean, and the gap is narrowing. Illustrative chart - not real market data.

The answer to the question on that chart is that both readings are correct. Price is a long way out and the move is slowing — which is one situation described by two measurements, not a conflict between two indicators.

When it fails

The failure is treating their disagreement as a signal, and it is available constantly. Price stretched far from its average while the gap between two moving averages narrows is not a divergence; it is what the end of any move looks like when measured two ways. The distance reading is still high because price is still far out; the rate reading is falling because the move has slowed. Both are describing the same bars accurately, and the apparent conflict is a difference in what was measured.

The second failure is quoting levels across instruments. Neither scale transfers.

A third is running both for confirmation. They share their input.

A fourth is using a threshold you did not calibrate. The convention came from elsewhere.

A fifth is trading every signal-line cross. Ranges produce them endlessly.

And a sixth is expecting either to lead price. Both are computed after the bar.

The commodity channel index covers distance from a mean. MACD covers the gap between two averages. And the MACD crossover covers where most of its trades actually come from.

What I actually do

These two get lumped together as momentum tools and they are measuring different things. One tells you how far price has walked from the middle. The other tells you whether it is walking faster. You can be a long way out and slowing down, which is exactly when they disagree.

— Michael Whitman

This page is educational, not financial advice. Test every idea on your own charts before risking money.