Indicators · Momentum oscillators
ROCP (rate of change percentage): returns as fractions
What ROCP is, how it differs from ROC, why adding or averaging returns misleads, a compounding example on Eli Lilly, and how to use ROCP in Finabase charts.
On this page
ROCP, the "rate of change percentage" in TA-Lib's naming, is the change in price over n bars expressed as a fraction: (close − close n bars ago) ÷ close n bars ago. A ROCP of 0.08 means an 8% gain; −0.05 a 5% loss. Despite the "percentage" in its name, it is not multiplied by 100. It is exactly what finance textbooks call the simple return over the period.
On a chart, ROCP looks identical to the Rate of Change (ROC): percentage momentum and how to read it (ROC), just with a different scale. Its value is in what you can do with the numbers. Returns written as fractions slot directly into calculations of compounding, averages and risk, and those calculations contain traps that the chart hides. This guide shows ROCP on real Eli Lilly data and uses it to explain why adding or averaging percentage changes gives the wrong answer.
ROCP, ROC and ROCR: one idea, three scales
| Study | Formula | An 8% gain reads | A 5% loss reads |
|---|---|---|---|
| ROC | (close ÷ close n ago − 1) × 100 | 8.0 | −5.0 |
| ROCP | close ÷ close n ago − 1 | 0.08 | −0.05 |
| ROCR | close ÷ close n ago | 1.08 | 0.95 |
Which one to use is a matter of what you do with the number next. For reading a chart, ROC's familiar percentages are easiest. For arithmetic on returns, ROCP is the natural unit. For multiplying returns or comparing two instruments, the ratio form, ROCR (rate of change ratio): growth factors and relative strength, is cleanest.
The formula
A worked example on Eli Lilly
On March 27, 2026, Eli Lilly (LLY) closed at $878.24. Twelve sessions earlier, on March 11, it had closed at $999.84.
| Step | Calculation | Result |
|---|---|---|
| Change | 878.24 − 999.84 | −$121.60 |
| ROCP (12) | −121.60 ÷ 999.84 | −0.1216 |
Finabase's chart shows −0.122, the lowest ROCP (12) of Lilly's year, a 12.2% fall in about two and a half weeks.
Now suppose the next 12 days had brought a ROCP of exactly +0.1216. Did the stock get back to $999.84?
| Step | Calculation | Result |
|---|---|---|
| Value after the loss | 999.84 × (1 − 0.1216) | $878.24 |
| Value after an equal gain | 878.24 × (1 + 0.1216) | $985.04 |
| Net change | 985.04 ÷ 999.84 − 1 | −0.0148 |
No. Equal-sized fractional moves down and up leave you about 1.5% short, because the gain is earned on a smaller base. To recover a loss of L, you need a gain of L ÷ (1 − L): here 0.1216 ÷ 0.8784 = 0.1384.
ROCP on a real chart: Eli Lilly 2025–2026
Lilly rose from $844.50 to $1,373.70 over the year, about 63%, much of it in two bursts: a jump of about 21% in the first two and a half weeks of November 2025, and a steady climb from the spring low to new highs in October 2026.
The distribution of its 12-day returns is worth a look:
| Measure (12-day ROCP, 251 sessions) | Value |
|---|---|
| Share of days positive | 149 of 251 (59%) |
| Median | 0.014 |
| 10th percentile | −0.056 |
| 90th percentile | 0.129 |
| Lowest | −0.122 (Mar 27, 2026) |
The 90th percentile is more than twice as far from zero as the 10th. Lilly's good 12-day stretches were much bigger than its bad ones, which is what a strong uptrend looks like in return terms.
Why adding returns misleads
Split Lilly's year into consecutive, non-overlapping 12-day blocks. From November 13, 2025 ($1,022.87) to October 29, 2026 ($1,373.70) there are 20 of them.
| Calculation | Result |
|---|---|
| Sum of the 20 ROCPs | 0.3403 |
| Product of (1 + ROCP) − 1 (the true return) | 0.3430 |
| Arithmetic mean ROCP | 0.0170 |
| Compound (geometric) mean per block | 0.0149 |
The sum happens to land close to the true return here, but the averages disagree: the arithmetic mean says a typical 12-day period returned 1.70%, while the rate that actually compounds to the year's result is 1.49%. The gap grows with volatility. For a volatile stock, averaging percentage changes can make a losing strategy look profitable.
The fix is to compound: multiply the (1 + ROCP) factors, or add log returns, ln(1 + ROCP), which do add up correctly across periods.
Choosing the horizon
The period sets the holding horizon the return describes. A ROCP (1) is the plain daily return; a ROCP (5) is roughly a week; Finabase's default of 12 is about two and a half weeks; 63 is a quarter and 252 a trading year. Two things change as the horizon grows. The typical size of the readings grows, roughly with the square root of the horizon for a stock with stable volatility, so a 12-day return of 0.13 is unusual for Lilly while a 252-day return of 0.6 was what actually happened. And the line becomes smoother, because consecutive windows share more of their bars. Pick the horizon that matches the question: how a two-week holding period would have fared, or how the last year compares with the one before.
How traders use ROCP
Return calculations and backtests. ROCP gives the return of holding for n bars from every starting day, the raw material for testing "what happened next" questions.
Momentum, read as a fraction. As a chart line, ROCP behaves exactly like ROC: zero crossings, extremes relative to history, divergence.
Volatility and risk. The spread of ROCP values, such as the 10th and 90th percentiles above, describes how large a typical move over the horizon is.
Pitfalls and limitations
Same limits as ROC. Two closes determine each value, a big day affects it on entry and exit, and there are no fixed overbought or oversold levels.
Overlapping windows. Daily ROCP (12) values overlap by 11 days, so consecutive readings are not independent. Counting 251 overlapping 12-day returns as 251 separate observations overstates how much evidence you have.
Display rounding. Finabase shows ROCP values between 0.1 and 1 to three decimals, those between 0.01 and 0.1 to four, and smaller ones to five or more.
How Finabase calculates and scores ROCP
Finabase computes ROCP with TA-Lib's ROCP function on closing prices. A new ROCP study defaults to 12
periods and is drawn in its own panel around a zero line.
ROCP (12) appears in the technical gauge on the symbol page with its latest value and carries no Buy or Sell rule, so it always counts as neutral. Use it for return arithmetic and as a momentum line.
Frequently asked questions
What is the difference between ROC and ROCP?
Only the scale. ROC multiplies by 100 (8.0 means 8%); ROCP does not (0.08 means 8%). The lines have the same shape.
Why doesn't a 10% loss and a 10% gain cancel out?
Because the gain is earned on a smaller amount. 0.90 × 1.10 = 0.99, a 1% net loss. To recover a 10% loss you need an 11.1% gain.
Can I add ROCP values over time?
Only approximately, and less accurately as returns get larger. Multiply the (1 + ROCP) factors, or add log returns, for the true total.
Summary
ROCP is the simple return over n bars, the rate of change written as a fraction. On a chart it is ROC with a different axis; in calculations it is the right unit, as long as you compound rather than add. Eli Lilly's year shows both: a 12.2% two-week drop that a 12.2% gain would not undo, and an arithmetic average return that overstates the rate that actually compounded.
Sources and further reading
- John Y. Campbell, Andrew W. Lo and A. Craig MacKinlay, The Econometrics of Financial Markets (Princeton University Press, 1997), ch. 1 — simple and log returns
- TA-Lib — ROCP function reference
- Finabase chart data — LLY daily bars, 2025-10-30 to 2026-10-29, ROCP computed by Finabase