Rate of Change (ROC) Indicator: Reading Momentum Off the Chart
The rate of change indicator measures how far price has moved, in percent, against the close n bars ago. The formula with worked numbers, the zero line and why crossovers whipsaw, the period settings sources disagree on, overbought and oversold levels per instrument, divergence and the StockCharts caveat, where ROC misleads, and an honest ROC vs RSI vs Momentum comparison.
Most momentum oscillators tell you momentum is up. Rate of Change tells you by how much. It is the percent move between today's close and the close a fixed number of bars ago, plotted as a line around zero. That is the whole indicator. It is also why ROC is useful in a way RSI isn't: a reading of +6% on a 5-minute chart with a 12-bar lookback means the stock is up 6% in the last hour, in units you can check against the candles. The rest of this post is the formula with real arithmetic, how people read the zero line, the settings sources can't agree on, and where the indicator quietly lies to you.
Quick Answer
The Rate of Change (ROC) indicator is a momentum oscillator: ROC = (close - close n bars ago) / close n bars ago x 100. Above zero, price is higher than it was n bars ago. Below zero, it is lower. StockCharts uses 12 periods, other sources use 9, 10, 14 or 20. Zero-line crossovers whipsaw, especially on short settings. Overbought and oversold levels have to be set per instrument (StockCharts cites about +/-10% as typical). Divergences often fail as reversal signals. Because ROC is in percent, it tells you how big the move was, which RSI's 0-100 scale does not.
Each of those gets its own section below, with the parts where sources disagree left in rather than smoothed over.
What Is the Rate of Change Indicator?
ROC, sometimes called price rate of change, measures the percentage change in price between the current close and the close a set number of periods back. Every source I checked defines it the same way. The StockCharts ChartSchool article on Rate of Change describes it as a pure momentum oscillator that fluctuates above and below the zero line as the change moves from positive to negative, with signals coming from centerline crossovers, divergences and overbought or oversold readings.
In trading terms, it answers one question per bar: compared with n bars ago, how far has this stock moved, in percent? Positive means up, negative means down, and the size of the number is the size of the move. When the line rises, the percent gain over the window is growing. When it falls while still above zero, the stock is still up over the window, just by less than it was. That last case trips people up, so it shows up again in the divergence section.
ROC lives in the same family as RSI, Stochastic RSI, CCI and Williams %R. If you want those covered properly, the Stochastic RSI breakdown, the CCI write-up and the Williams %R guide each go through one. This post sticks to ROC and only compares where the comparison teaches something.
The Rate of Change Formula, Worked Through
ROC = (Close - Close n periods ago) / Close n periods ago x 100
Hypothetical numbers, so the arithmetic is easy to check. A stock closes at $55. Twelve bars ago it closed at $50. ROC(12) = (55 - 50) / 50 x 100 = 10%. If it had closed at $45 instead, ROC(12) = (45 - 50) / 50 x 100 = -10%. Same $5 distance, same 10% size, opposite sign.
Now put a clock on it. On a 5-minute chart, 12 bars is one hour. Say a stock trades at $41.20 and closed at $40.00 an hour ago. ROC(12) = 1.20 / 40.00 x 100 = 3%. So the line reading +3% literally means "up 3% versus an hour ago". On a 1-minute chart the same setting covers 12 minutes, on a 15-minute chart three hours, and on a daily chart about two and a half weeks of sessions. Same number on the settings panel, very different questions.
The asymmetry nobody mentions until it matters
Percent moves are lopsided. A stock that goes from $50 to $100 shows +100%. The trip back from $100 to $50 shows -50%. StockCharts notes the same thing from the other side: ROC has no upper boundary, but a security can only decline 100%, to zero. On a low-float runner that doubles, you can see ROC readings far above anything the downside can produce, and the pullback that hands back half the move will look smaller on ROC than it felt in your account.
ROC vs the plain Momentum indicator
The Momentum indicator uses the same two closes and skips the division: Momentum = close - close n periods ago. The Forex Training Group explainer on price rate of change makes this exact point, that the two are very similar and tend to correlate closely, with ROC dividing the difference by the old close. That division is the whole reason to prefer ROC. A $5 stock going to $6 and a $200 stock going to $201 both show Momentum of +1. ROC shows +20% and +0.5%. Only one of those numbers tells you something about how hard the stock is moving.
Illustrative only: hypothetical closes with a 12-period ROC computed from them
What Does a ROC Zero-Line Crossover Tell You?
Above zero, the close is higher than it was n bars ago. Below zero, it is lower. A cross from below to above is read as momentum turning positive, and the reverse as momentum turning negative. Plenty of guides sell that as a trend-following entry. Mechanically, it is a much smaller statement: the zero cross happens on the bar where today's close passes the close from n bars ago. That is all.
Which is why it whipsaws. When price goes sideways, today's close and the close n bars back keep trading places, and ROC flips sign over and over. StockCharts says centerline crossovers are prone to whipsaw, especially short-term. You can see it in the diagram above: in the flat stretch around bars 27 to 32, ROC crosses zero five times in six bars while price goes nowhere. Each of those crosses is a "signal" if you treat crosses as signals.
What helps, roughly in order of how much: only reading crosses when price structure agrees (a cross above zero while the chart is making higher highs and higher lows means more than one in the middle of a range), using a longer period so the line moves less, and adding a short moving average of ROC as a filter, which StockCharts demonstrates with a 5-day SMA on a 20-day ROC. Each of those trades away speed for fewer false flips. None of them makes a zero cross a trade by itself.
For a momentum trader, the more useful read is the level and the slope. A stock in a clean intraday uptrend will usually hold ROC above zero for long stretches. The question on a pullback is whether ROC eases back toward zero and turns up while price holds its level, or whether it punches through zero hard as the structure breaks. The momentum trading strategy guide covers the pullback entry itself. ROC is one way to see how much the pullback has cost the move.
What Are the Best ROC Indicator Settings?
There isn't a single default, and the sources don't pretend otherwise. Here is what each one says.
| Source | Period | Context |
|---|---|---|
| StockCharts ChartSchool | 12 periods | Uses 12 periods in its examples. Also shows a 20-day ROC with a 5-day SMA |
| Forex Training Group | 9 periods | Calls nine the default for shorter-term and swing traders, and says position traders often set it higher |
Twelve and nine are the two numbers you will see most, and whichever one your platform ships with is the one most people end up using. The period is a trade-off. A short window reacts fast and flips sign constantly. A long window is smoother and late. None of these sources publishes evidence that one period outperforms another, so there is nothing to optimize toward except what the setting actually measures.
That is the better way to choose it. Decide what window you care about, in time, and convert. If you trade 5-minute pullbacks and care about the move over the last hour, 12 bars is one hour. If you only care about the last half hour, 6 bars. On a 1-minute chart a 12-bar ROC is a 12-minute look, which on most stocks is mostly noise. The setting stops being arbitrary once you can say out loud what it covers.
Does ROC Have Overbought and Oversold Levels?
Not built-in ones. RSI has 70 and 30 because it lives on a fixed 0-100 scale. ROC has no ceiling, so any threshold is something you set for the instrument and timeframe in front of you. StockCharts gives a starting point, saying extremes are typically flagged when ROC crosses above +10 or below -10, then immediately qualifies it: the levels depend on the volatility of the underlying, and a more volatile stock might use -15% for oversold while a less volatile one might use -5%.
The practical method is to look back at the chart. Scroll through the same instrument on the same timeframe and note where ROC peaked and bottomed on prior swings. That range is your normal. A large-cap on a 5-minute chart moving 10% in an hour would be an unusual day. A low-float small cap can do that in one candle. One fixed number can't describe both.
Two warnings from the StockCharts examples carry over to intraday charts. First, oversold is an alert, not a turn: prices are oversold but have yet to actually turn. Second, in a trend the extremes on the trend side are close to meaningless. In its uptrend example, StockCharts uses oversold readings as chances to join the bigger uptrend and ignores overbought readings entirely, because the trend was up. That is a continuation read, and it maps onto how momentum traders already think: a strong stock sitting above +10% for an hour is a strong stock, not a short. The diagram above shows ROC holding at or above +10% for ten straight bars while price keeps climbing.
ROC at +12% tells you the stock has run. It does not tell you whether the pullback you are about to buy is holding.
Upload the screenshot and SnapPChart grades that single image as a momentum continuation setup: structure, levels, moving averages and the volume bars in frame, then an entry, a stop with its reasoning, targets and the reward-to-risk they imply. A stretched C-grade chart is still a C.
Grade this chartIs ROC Divergence a Reliable Reversal Signal?
The sources split here, so both sides go on the table. A bearish divergence is price making a higher high while ROC makes a lower high. A bullish divergence is price making a lower low while ROC makes a higher low. Most vendor guides present these as reversal signals.
StockCharts doesn't. It says divergences fail to foreshadow reversals more often than not, and skips a detailed discussion of them for that reason. It also explains why: sustained advances often start with a big surge out of the gate, and the advances after that are usually less sharp. ROC measures the size of the move over the window, so a smaller second leg produces a lower ROC peak even though the trend is perfectly healthy. The result is a bearish divergence that means nothing except "the first leg was the biggest".
The diagram shows that exact shape. At bar 18, price closes at 58.6 and ROC reads about +12.7%. At bar 25, price closes higher at 59.4 but ROC is down to about +6.5%. Textbook bearish divergence. In this made-up example price does roll over afterwards, but the same pattern prints all the time in trends that keep going. Divergence describes a move that is slowing. Slowing is not the same as reversing.
If you use it at all, use it as a reason to tighten up or pass on a fresh entry, not as a reason to take the other side. The guide to bullish and bearish divergence treats divergence the same way, as a warning rather than a trigger, and covers the regular and hidden versions across indicators, so there's no need to repeat it here.
ROC vs RSI vs Momentum
People ask "ROC or RSI?" as if one has to win. They measure different things on different scales. ROC uses two closes and reports percent. RSI uses every close in the window and reports how one-sided the gains and losses have been, squeezed onto 0-100. Momentum is ROC without the division. The table lines them up.
| Dimension | Rate of Change (ROC) | RSI | Momentum |
|---|---|---|---|
| Formula | (Close - Close n bars ago) / Close n bars ago x 100 | 100 - 100 / (1 + RS), where RS is average gain / average loss over n bars (Wilder smoothing) | Close - Close n bars ago (some platforms multiply by 100) |
| Units | Percent | Index from 0 to 100 | Price units (dollars on a stock) |
| Bounds | No upper limit. Floor of -100%, since a price can only fall to zero | Always between 0 and 100 | No fixed scale. Depends on the price of the instrument |
| Centerline | 0 (or 100 on platforms that plot a ratio) | 50 | 0 (or 100 on platforms that plot a ratio) |
| Common default | 12 on StockCharts, 9 or 10 on many others | 14 | Varies by platform |
| Closes it actually uses | Two: today and n bars ago | Every close in the window, through averaged gains and losses | Two: today and n bars ago |
| Comparable across stocks? | Yes. 4% is 4% on a $5 stock or a $500 stock | Yes, on the fixed 0-100 scale | No. A $1 move means very different things at $5 and at $500 |
| Overbought / oversold | Set per instrument. StockCharts cites about +/-10% as typical, adjusted for volatility | 70 and 30 are the usual reference lines | Set per instrument, by eye |
| What it tells you | How big the move was, in percent, over a fixed window | How one-sided recent closes have been, on a fixed scale | The raw price distance over the window |
| Where it misleads | Jumps when a big bar leaves the window. Sits above +10% for long stretches in strong trends | Can stay pinned near an extreme while a trend keeps going | Can't compare readings between instruments or across big price changes |
The honest summary: ROC is the one to read when you want the size of the move. RSI at 72 tells you recent closes have been mostly up. It can't tell you whether the stock is up 2% or 20% over the window, and on a strong trend it will sit near the top of its range either way. ROC tells you the 2% or the 20% directly. In exchange, ROC has no fixed reference lines, so you have to know the instrument, and it is jumpier because it only looks at two closes.
Neither one is a signal on its own, and running both mostly gives you the same information twice, since they tend to rise and fall together. If RSI is already on your chart, the RSI trading strategy write-up covers how to read it, and the MACD guide for day traders covers the moving-average version of the same momentum question. Pick one momentum read you understand and spend the chart space on structure and volume instead. The roundup of which indicators earn space on an intraday chart makes the same argument with a wider lens.
Where ROC Misleads, and Reading It on a Screenshot
It only sees two closes
The path between them doesn't exist as far as ROC is concerned. A stock that grinds up steadily and a stock that spikes, crashes and recovers to the same close show the same ROC. And because the reference close shifts every bar, ROC can jump when nothing is happening now, purely because a big candle n bars back just left the window. When ROC turns sharply, glance at what price was doing n bars ago before you read it as news.
It lags, and chop wrecks it
Every input has already printed, so ROC confirms a move after it has started. StockCharts says momentum oscillators like ROC are ideally suited to sideways action with regular fluctuations, because extremes are easier to spot there. The catch for a day trader is that sideways action is also where the zero line flips constantly, and where momentum continuation setups are weakest. Most of the false signals people complain about come from reading a trend tool in a range, or a range tool in a trend.
Thresholds don't travel
A level that marks an extreme on one stock is a normal Tuesday on another, and a level tuned on a daily chart means nothing on a 1-minute chart. Platform versions differ too, which the FAQ below covers. Treat every threshold as a setting for one instrument on one timeframe.
What SnapPChart does and doesn't do with ROC
The precise version, since this is easy to oversell. SnapPChart reads one chart screenshot you upload. It doesn't compute ROC, it has no ROC field, and its instructions don't tell it to read a ROC pane, RSI or divergence. If you plot ROC under your chart before you take the screenshot, the line is in the image like everything else, but the grade isn't built on it. So ROC is yours to read. Plot it if it helps you, and read it with the checks above.
What the grader does read is the chart itself: structure, levels, moving averages, VWAP and the volume bars in frame. It trades momentum continuations only. A long is a pullback in an established uptrend, a short is a rally in an established downtrend, and it doesn't take reversal or counter-trend setups. That means using ROC divergence to call a top or a bottom is outside what it does, and an overbought ROC reading on a strong uptrend will never turn into a short from it. Which features a single image actually carries is covered in the technical analysis overview, and a neutral description of what one screenshot read covers is on the AI chart analysis page.
The split that works: use ROC to see how big the move has been and whether the percent gain over your window is still growing. Use the chart's structure to decide whether there is a trade. A stock up 8% in the last hour with the pullback holding its level is a different trade from a stock up 8% that just lost its level, and ROC reads about the same on both.
ROC = (close - close n bars ago) / close n bars ago x 100. It is the percent move over a fixed window, so convert the period into time on your chart before trusting it. Above zero means up over the window, and zero crosses whipsaw in ranges. Defaults vary (12, 9, 10 and more), so pick by the window you care about. Set overbought and oversold per instrument. StockCharts' +/-10% is a starting point, not a rule. Divergence often fails, so treat it as a warning. Compared with RSI, ROC tells you how big the move was. Neither is a signal by itself.
Frequently Asked Questions
Why does ROC move when price has not moved?
Because ROC compares today's close with one specific old close, and that old close changes every bar. Take a hypothetical stock sitting at $20.00. If the close 12 bars ago was $19.00, ROC reads about +5.3% (1.00 / 19.00). Next bar, price is still $20.00, but the bar that is now 12 bars back closed at $19.80, so ROC drops to about +1.0% (0.20 / 19.80). Nothing happened on the right edge of the chart. A bar dropped out of the window on the left. Before you read a sharp ROC turn as a change in momentum, check what the price was doing n bars ago.
Is the rate of change indicator leading or lagging?
Lagging, in the sense that every input is a close that already printed. ROC is sometimes described as leading because it can flatten or roll over while price is still making marginal new highs, which is the divergence pattern. That is a description of a slowing move, not a forecast. A move that slows can resume, and StockCharts is blunt that ROC divergences fail to foreshadow reversals more often than not. Treat ROC as a measurement of the move so far.
Is the percent change column on my scanner the same thing as ROC?
Close enough to be the same idea. A scanner column showing percent change from the prior close is a rate of change with the lookback set to one daily bar. Columns for percent change over 5 days or 1 month are ROC with longer lookbacks. The difference is that the scanner gives you one number per stock to sort by, while the indicator plots that number bar by bar so you can see whether the percent move over the window is growing or shrinking.
Why does my ROC value look different on another charting platform?
Usually because the platforms are not computing the same thing. Some versions are centered on zero, the percent formula used in this post. Others plot price divided by the old price, times 100, so the centerline sits at 100 and a 10% gain shows as 110. The lookback default also differs between platforms (12 and 9 are both common), and some apply smoothing. Check the settings panel before comparing numbers, and do not carry a threshold from one platform to another without checking.
Does SnapPChart read the ROC indicator on my chart?
No. SnapPChart reads only the chart screenshot you upload. It does not calculate ROC, it has no ROC field, and its instructions do not tell it to read a ROC pane, an RSI pane or divergence. If you plot ROC under your chart, it is in the image, but nothing in the grading is built on it, so read it yourself. The grader also trades momentum continuations only (a pullback in an established uptrend, or a rally in an established downtrend), so using ROC divergence to call a reversal is outside what it does.
This article is for educational and informational purposes only and is not investment, financial or trading advice. The ROC formula, default periods, overbought and oversold levels and the divergence caveat are as described by the cited sources (StockCharts ChartSchool and Forex Training Group) and are reproduced as their published descriptions, not as rules endorsed here. Every worked example, including the $55 versus $50 calculation, the $41.20 versus $40.00 hourly example, the $5 and $200 Momentum comparison and the $20.00 window example, is a hypothetical construction built so the arithmetic can be checked; none is a real security or session. The diagram is illustrative and computed from made-up closes, not market data. No win rate, success rate or backtest is claimed for ROC, any setting or any signal, and none is implied. Indicator readings describe price that has already traded and do not predict direction. Day trading carries a substantial risk of loss and is not suitable for every investor. SnapPChart grades a static chart screenshot you upload and returns a setup grade, entry, stop, targets and reasoning for that single image; it grades momentum continuation setups only, does not calculate or read the ROC indicator, RSI or divergence, does not take reversal or counter-trend setups, and does not use live data. Do your own analysis, size positions so that being wrong is survivable, and consider speaking to a licensed financial professional about your own circumstances before trading.
Writes about AI-assisted day trading, technical analysis, and the systems traders actually use to stay disciplined.
ROC says how far the stock has moved. It doesn't say whether your entry is any good.
Upload the chart screenshot and SnapPChart grades that one image as a momentum continuation setup, reading the structure, levels, moving averages and volume bars in frame, then returns a setup grade, an entry, a stop with the reasoning behind its level, targets, and the reward-to-risk they imply. One skipped late entry on an overextended chart covers it.