Debated1 min read
◆ The PatternSpeed rather than level: the percentage change over N bars, the first derivative of price
Rate of Change — a pure momentum oscillator measuring percentage price change.
ROC = ((Close − Close_N) / Close_N) × 100
Oscillates around zero. Positive = upward momentum; negative = downward.
Uses:
• ROC crossing above zero → bullish shift
• Divergences between ROC and price signal weakening trends
• Common period: 12 or 14
• ROC crossing above zero → bullish shift
• Divergences between ROC and price signal weakening trends
• Common period: 12 or 14
Worked example
Five-day ROC on day 13: the close of 99 against 108 five days earlier (day 8) gives 100 × (99 / 108 − 1) = −8.3%. On day 15 it is +0.97% (104 against 103 on day 10): the fall has stopped, not reversed.
The example data: 15 days, used in every indicator here
| Day | High | Low | Close | Volume |
|---|---|---|---|---|
| 1 | 101 | 99 | 100 | 50,000 |
| 2 | 103 | 100 | 102 | 62,000 |
| 3 | 103 | 100 | 101 | 48,000 |
| 4 | 105 | 101 | 104 | 70,000 |
| 5 | 108 | 104 | 107 | 85,000 |
| 6 | 108 | 105 | 106 | 60,000 |
| 7 | 110 | 106 | 109 | 90,000 |
| 8 | 110 | 107 | 108 | 72,000 |
| 9 | 108 | 104 | 105 | 80,000 |
| 10 | 105 | 102 | 103 | 66,000 |
| 11 | 105 | 102 | 104 | 55,000 |
| 12 | 104 | 101 | 102 | 75,000 |
| 13 | 102 | 98 | 99 | 95,000 |
| 14 | 102 | 99 | 101 | 64,000 |
| 15 | 105 | 101 | 104 | 71,000 |
Where it misleads
- It rests on a single price N bars back, so one unusual day enters the reading and later drops out of it.
- Zero-line crossings come late in a reversal and often in a range.
- Percent changes are not comparable across volatility: −8% means something different for a utility than for a crypto asset.
In code
df['roc5'] = 100 * (df['close'] / df['close'].shift(5) - 1)
Assumes import numpy as np, import pandas as pd, and a DataFrame df with columns high, low, close and volume — the 15 days above.
Sources
- N. Jegadeesh & S. Titman, “Returns to Buying Winners and Selling Losers”, Journal of Finance 48(1), 1993 — momentum measured as past returns
- Technical Analysis of the Financial Markets, J. J. Murphy, New York Institute of Finance, 1999
Last reviewed October 2026 · How this site checks its content · Report a mistake
Pattern bridge: Rate of change is the discrete gradient of price — the slope at each point. In statistics, it’s the first difference used to make time series stationary.
Linked from 4
- ML MathGradient DescentRolling downhill on the loss landscape to find optimal weights
- ML MathOptimizersBeyond vanilla SGD — momentum, adaptive learning rates, Adam
- Timeseries EngineeringAR ModelsRegressing a series on its own past
- Timeseries EngineeringAutocorrelation (ACF/PACF)Measuring how a series remembers its own past