ROC compares today’s close with the close a fixed number of sessions earlier and reports the change in percent. It answers one question, how far price has moved over that window, and its reading depends on both ends of the window.
What the rate of change indicator measures
The rate of change indicator, or ROC, is the percentage change between the latest close and the close n sessions earlier. It is positive when the close is above the earlier close and negative when it is below, and the further apart the two closes, the larger the reading. It is a momentum oscillator centered on zero, and unlike RSI or the stochastic oscillator it has no upper or lower bound.
- Inputs: closing prices.
- Lookback: n sessions, chosen by the chart reader; each reading needs n + 1 closes.
- Units: percent. A reading of +6.45 means the close is 6.45% above the close n sessions earlier.
- Related measure: momentum, the same comparison in dollars instead of percent.
- Cadence: on daily data each period is one session.
How to calculate ROC
Divide the latest close by the close n sessions earlier, subtract one and multiply by 100. Momentum uses the same two closes but reports their difference in dollars. Dividing by the earlier close is what makes ROC comparable across stocks with very different prices.
ROC(n) = (Close today / Close n sessions earlier − 1) × 100
Momentum(n) = Close today − Close n sessions earliern- the lookback in sessions
Close n sessions earlier- the base close, which must be greater than zero
| Stock | Base close ($) | Close today ($) | Momentum ($) | ROC (%) |
|---|---|---|---|---|
| Stock A | 25.00 | 30.00 | +5.00 | +20.00 |
| Stock B | 250.00 | 255.00 | +5.00 | +2.00 |
Use split-adjusted prices. An unadjusted 2-for-1 split halves the price overnight and would print as a −50% change that shareholders never experienced.
A stock price rate of change example
The table follows a hypothetical stock over five sessions with a 10-session lookback. Each row divides the close by the close of the session ten places earlier. In session 13 the close is higher than the day before, yet ROC drops from +7.60% to +2.50%, because the base moved from a low close of $60.50 to a high one of $64.00.
| Session | Close ($) | Base session | Base close ($) | Momentum ($) | ROC (%) |
|---|---|---|---|---|---|
| 11 | 66.00 | 1 | 62.00 | +4.00 | +6.45 |
| 12 | 65.10 | 2 | 60.50 | +4.60 | +7.60 |
| 13 | 65.60 | 3 | 64.00 | +1.60 | +2.50 |
| 14 | 66.30 | 4 | 63.20 | +3.10 | +4.91 |
| 15 | 67.10 | 5 | 62.80 | +4.30 | +6.85 |
This base effect is built into every fixed-window measure: the reading changes when an old close leaves the window, not only when today’s close changes.
Choosing the lookback period
The lookback decides which move ROC measures. Windows of 5 to 10 sessions react to swings of a week or two and are noisy; windows of 20 to 63 sessions describe moves of one to three months; 126 and 252 sessions describe half-year and one-year trends. Compare stocks only on the same lookback.
| Lookback (sessions) | Approximate span | CleverScan field or function |
|---|---|---|
| 5 | One week | perfW1Pct |
| 10 | Two weeks | PctChange(10, close) |
| 20 | About one month | PctChange(20, close) |
| 21 | One month | perfM1Pct |
| 63 | Three months | perfM3Pct |
| 126 | Six months | perfM6Pct |
| 252 | One year | perfY1Pct |
Each of these is a rate of change with a fixed lookback, computed from daily closes as (close / close n sessions earlier − 1) × 100.
Reading the zero line
Zero is the line where today’s close equals the close n sessions earlier. Above it, price stands higher than at the start of the window; below it, lower. A cross of the zero line therefore says that the close has moved past the base close, which can happen through a move in today’s price or through a change in the base.
In a steady trend ROC stays on one side of zero for long periods. In a sideways market it crosses back and forth, and those crossings carry little information on their own.
How to read ROC on a stock chart
ROC sits in a pane below the price chart with a horizontal line at zero. Read its level for the size of the move over the window and its slope for whether that move is growing or shrinking. Because the scale has no fixed ceiling, judge highs and lows against the same stock’s own history rather than against fixed levels.
- Confirm the lookback in the indicator label.
- Note which side of zero the line is on and for how long.
- Compare the current peak or trough with earlier ones on the same chart.
- Check the session that leaves the window next; a large move there shapes the coming readings.
In the hypothetical chart on this page, the first rally lifts the 10-session ROC to about +14.6%. The second rally carries price to a higher high, but ROC peaks near +5.2%: the later advance covered less ground per ten sessions.
Momentum divergence with ROC
A bearish momentum divergence appears when price makes a higher high while ROC makes a lower high, as on the chart on this page. A bullish divergence is a lower low in price with a higher low in ROC. Either one says the latest move covered less ground over the window than the previous one; neither says when, or whether, the trend changes.
Because ROC depends on the base close, a divergence can appear or vanish when a large move drops out of the window. Check which closes the two peaks are measured against before reading much into one.
Limitations of the rate of change indicator
ROC is simple to compute and easy to compare across stocks, and that simplicity creates its limits. Keep them in mind whenever you read it.
- Two closes only. The path between them is ignored, so a steady climb and a single jump can print the same reading.
- Base effects. A large move n sessions ago shapes today’s reading as much as today’s price does.
- No fixed extremes. A +10% reading can be ordinary for one stock and rare for another.
- Noise at short lookbacks. A 5-session ROC reacts strongly to a single gap.
- Adjustments matter. Splits must be adjusted, and the price series should be consistent across the window.
Writing ROC conditions in CleverScan
CleverScan expresses ROC through PctChange(10, close) and PctChange(20, close) and through the performance fields listed above. The first rule keeps stocks whose close is more than 5% above the close ten sessions earlier. The second combines two lookbacks to find stocks that are still up over 21 sessions but down over the last five.
securityType = "Stock" and PctChange(10, close) > 5A 10-session ROC above +5%.
securityType = "Stock" and perfM1Pct > 0 and perfW1Pct < 0A positive 21-session ROC with a negative 5-session ROC: a pullback inside a rising month.
Both rules use daily closes, and Scan as of runs them for an earlier session with the history available through that session. The CleverScan reference lists the syntax.
Sources
- Fidelity Learning Center, Rate of Change (ROC): formula and zero line (checked October 1, 2026)
Read our data and methodology notes for calculation context. This guide explains research tools and observations. It does not recommend a trade or investment.