Rate of Change (ROC): The Simplest Momentum Calculation There Is
Rate of Change is a percentage. It compares today’s close with the close N bars ago and plots the difference. Every other momentum oscillator on your chart is a more complicated version of this one calculation, which is exactly why running several of them is not confirmation.
In one sentence:
It shows how much price has changed, as a percentage, over a fixed number of bars: nothing more complicated than that.
Rate of Change (ROC) at a glance
| Difficulty | Beginner: the simplest momentum calculation in common use |
| Calculation | ((current close − close N bars ago) / close N bars ago) × 100 |
| Scale | A percentage, centred on zero. Unbounded, but directly comparable between instruments |
| MT5 availability | Does not ship with MT5. MetaTrader provides Momentum instead, which is the same calculation expressed around 100 rather than zero. For a true ROC line you need a custom indicator, or simply read Momentum and subtract 100 |
| Common periods | 9, 12 or 14 for short-term work; 25 or more for a slower read |
| What it ignores | Everything between the two closes it compares, plus all highs, lows and volume |
| Effectively duplicates | Momentum exactly; overlaps RSI, MACD and every other close-based oscillator |
| What kills it | Ranges, where it oscillates around zero producing constant meaningless crosses |
What it is and why it works
Take today’s closing price. Take the closing price from N bars ago. Subtract the second from the first, divide by the second, multiply by a hundred. That is the Rate of Change, and there is genuinely nothing else in it. A reading of +2 means price is 2% higher than it was N bars ago. A reading of −1.5 means it is 1.5% lower.
Two things follow immediately. First, ROC only ever looks at two prices: the current close and one close from the past. Everything that happened in between is invisible to it. A market that rose 5% and fell back, and a market that drifted steadily sideways, produce identical readings if they happen to sit in the same place N bars later. Second, because it is expressed as a percentage, ROC readings are comparable across instruments in a way that most indicators are not. A 2% move is a 2% move whether it is gold or a currency pair.
The relationship with Momentum deserves a plain statement, because MetaTrader makes this confusing. MT5’s Momentum indicator calculates the current close divided by the close N bars ago, multiplied by 100. So it oscillates around 100 rather than around zero. ROC is that same number minus 100. They are the same line with a different label on the axis. If you have Momentum on your chart and you add ROC, you have added nothing at all.
The redundancy goes further than that. RSI is built from the sizes of up and down closes, MACD is a difference between two averages of closes, and the stochastic is where the close sits within a recent range. All of them, ROC included, are transformations of the same closing-price series. They will move together most of the time because they are computed from the same data, and their agreement is arithmetic rather than evidence. If you want a second opinion, it has to come from something that is not a function of the closes: volume, structure, or a higher timeframe.
How to trade it, step by step
- Get a ROC line onto the chart. MT5 does not ship one, so either install a custom Rate of Change indicator from the MQL5 community, or add the built-in Momentum indicator (Insert → Indicators → Oscillators → Momentum) and read it as ROC by treating 100 as your zero line. The shape is identical; only the axis differs.
- Choose the period to match your holding time, not to look good. The period is the lookback in bars. A 12-period ROC on H1 answers “how much has price changed in the last twelve hours?” If you hold trades for a day, that is a sensible question. If you hold for a week, it is not. Set the period so the question the indicator answers is the question you actually care about.
- Calibrate what a big reading means for this instrument. ROC is unbounded, so there is no fixed overbought level. Scroll back several hundred bars and note the values the line typically reaches at swing highs and swing lows. That range is your reference. Anyone quoting a universal “ROC above 5 is overbought” is quoting a number that applies to one instrument on one timeframe.
- Read the zero line as a state, not a trigger. Above zero, price is higher than it was N bars ago. Below zero, it is lower. That is a useful, honest description of the current condition, and it is a reasonable filter on which direction of trade you are willing to take. It is a poor entry signal, because in a range it flips constantly.
- Use acceleration rather than level for the more informative read. A ROC that is positive and rising means price is gaining ground faster than it was. A ROC that is positive but falling means price is still above where it was, but the advance is decelerating. Deceleration while price still makes new highs is the observation that has genuine content.
- Check divergence only between comparable structural points. Compare the ROC value at the current swing high with its value at the previous swing high. If price is higher and ROC is lower, the latest push covered less ground in the same time. Read that as a change in the character of the move rather than as a reversal signal, see divergence for why the distinction matters.
- Beware the lookback artefact. ROC compares the current close to one specific bar from the past. When that old bar happens to be an outlier, the line moves for a reason that has nothing to do with today. If ROC jumps and price did not, look at what dropped out of the window N bars ago before concluding anything.
- Pair it with something that is not made of closes. If you want confirmation, take it from volume, from structure, or from the higher timeframe. Adding RSI to ROC and waiting for both to agree is waiting for two views of the same closes to agree.
Size every one of those entries with the position size calculator and check the trade is worth taking with the risk/reward calculator before you commit.
The conditions it needs
Comparing strength across different instruments
This is ROC’s genuine advantage over most oscillators. Because it is a percentage, a 3% reading on an index and a 3% reading on a currency pair mean the same thing. Ranking a watchlist of instruments by ROC over the same period is a legitimate and simple way to find where movement actually is.
Trending markets, as a directional filter
Used as a coarse state filter (only take longs while ROC is above zero, only shorts while it is below) it removes a large proportion of trades taken against the prevailing direction. It is not sophisticated, but it is honest and it is hard to over-fit.
Detecting deceleration inside a strong move
The reading that adds most. A trend where each successive push produces a smaller ROC peak is covering less ground per bar than it used to, which is a real change in behaviour that the price chart shows only subtly. It is a signal to manage a position, not to reverse it.
As the single momentum measure on an otherwise structural chart
Because it is the simplest of the family, it is the easiest to understand and the hardest to fool yourself with. A chart with structure, one volatility measure and ROC contains less duplication than one carrying RSI, MACD, stochastic and CCI all at once.
When it fails
- It is blind to everything between the two closes. ROC compares one price with one other price. A violent round trip and a flat drift can produce the same reading. Any conclusion that assumes the path mattered is unsupported by the calculation.
- In a range, zero crosses are pure noise. Price oscillating around a mean produces a ROC that oscillates around zero, generating a continuous stream of crosses that look like signals and are not. This alone accounts for most losses attributed to the indicator.
- It duplicates Momentum exactly and RSI substantially. MT5’s Momentum is ROC plus 100. RSI, MACD and the stochastic are all further transformations of the same closes. Waiting for several of them to agree feels like confluence and is arithmetic self-agreement.
- The old bar dropping out moves the line for no reason. Because the comparison point is a single bar from N periods ago, the line jumps when that bar leaves the window even if today was completely uneventful. Traders read that jump as new information. It is not.
- There are no fixed overbought or oversold levels. ROC is unbounded and its typical range varies by instrument, timeframe and volatility regime. Any threshold you adopt is fitted to a particular market at a particular time, and it will quietly stop working when volatility changes.
- It lags, and no setting fixes that. The value depends on a close from N bars ago, so the indicator is by construction describing the past. Shortening the period reduces the lag and increases the noise. That trade-off cannot be optimised away, and hunting for the setting that does is time not spent on structure.
Markets it is most informative on
- NAS100 (Nasdaq): Strong, persistent intraday trends where a percentage-based momentum read is meaningful.
- Gold (XAU/USD): Large percentage moves make ROC readings clear, and cross-instrument comparison is genuinely useful here.
- BTC/USD (Bitcoin): Percentage framing suits an instrument whose absolute price level changes enormously over time.
- GBP/JPY: Trends hard enough that a simple zero-line filter removes a lot of poor counter-trend trades.
For different levels of experience
If you are brand new
ROC is the easiest indicator on this whole site to understand, so use that. It answers one question: how much has the price changed, in percent, since a set number of bars ago? Above zero means higher than it was. Below zero means lower.
The most useful beginner habit is to use it as a permission slip rather than a signal. If the line is above zero, you only look for buying opportunities. If it is below, you only look for selling ones. That single rule stops the most common beginner mistake, which is trying to catch a falling market because it looks cheap.
What you should not do is buy when the line crosses above zero and sell when it crosses below. In a quiet market it will cross back and forth many times a day, and each cross costs you the spread. The line tells you which way things have been going. Where to actually enter has to come from the price chart itself.
If your results are inconsistent
The intermediate correction is about chart redundancy, and ROC is the clearest example of it on any platform. Look at what you have running. If your chart has RSI, MACD, stochastic and ROC, you have four transformations of the same closing prices. They agree because they must, and that agreement is what makes a mediocre setup feel like a strong one. The remedy is to delete three of them, and it will improve your results more than any setting change.
The second adjustment is to read acceleration rather than level. The most informative thing ROC ever says is not “price is 2% up” but “price is 2% up and that figure has been shrinking for the last ten bars while price kept making new highs”. That is a genuine change in behaviour and it tends to precede the end of a leg. It is a reason to tighten a stop, not to take the other side.
Finally, learn the lookback artefact. Set a period of 20, then watch what happens to the line when a big bar from twenty periods ago drops out of the window. The line moves noticeably with nothing happening in the present. Once you have seen it, you will stop reading every ROC jump as news.
If you are experienced
ROC is a first difference over a lag of N, normalised by the base price. Framed as a filter, it is a crude high-pass with a comb response; it has nulls at frequencies whose period divides N, which is why ROC on a market with a strong session periodicity can be systematically blind to exactly the cycle you care about. That is also the mechanism behind the drop-out artefact traders notice but rarely explain: the single-lag comparison gives the old bar the same weight as the new one, forever, until it exits the window.
The normalisation is its one real advantage. Percentage returns are approximately scale-free, so ROC is directly usable in cross-sectional work in a way that price-unit oscillators are not. Cross-sectional momentum ranking, sorting a universe by N-period return, is one of the most durable effects in the literature, and ROC is simply that measurement drawn on a chart. Read that way, it is not a weak indicator, it is a well-understood factor plotted for one instrument at a time, which is the least informative way to use it.
For time-series use, the raw level is not stationary across volatility regimes, so a threshold fitted in one regime fails in the next. Dividing ROC by realised volatility over the same window gives a comparable signal-to-noise measure and removes most of the parameter fragility. Also note the asymmetry: percentage change is bounded below at −100 and unbounded above, so the distribution is skewed and any symmetric threshold pair is quietly mis-specified. Log returns fix that if you are building rather than reading.
Risk management for this strategy
ROC provides no stop and no target, and its percentage scale is tempting to misuse as one. A reading of 3% does not mean a 3% stop is appropriate; the two numbers are unrelated. Take stops from structure and size from the position size calculator.
Where ROC genuinely helps risk is in setting expectations. If ROC readings on your instrument have recently been running at twice their usual size, the market is covering twice as much ground per bar and your normal stop distance is now half as far away in behavioural terms. The correct response is a wider stop and a proportionally smaller position, not the same position with more room.
The specific trap is fading an extreme reading. An unusually large ROC feels like it must revert, and it often does, but a market that is capable of a 4% move in twelve bars is capable of another one before it reverts, and a position sized for normal conditions will not survive that. Extremes are a reason to reduce size on both sides of the trade, not to take the other side confidently.
Where Market Structure Pro fits
ROC’s weakness is not the calculation, which is honest and transparent. It is that the same reading means opposite things in a trend and in a range, and the indicator itself cannot tell you which you are in. Above zero in a trend is a state worth trading with; above zero in a chop is a number about to flip.
Market Structure Pro is built to answer exactly that question. Its dedicated ranging and chop filter exists to say NO TRADE when the market is oscillating rather than trending, which is precisely the condition where ROC crosses become noise. Rather than a percentage you have to interpret, you get one verdict (TRADE, TRANSITION or NO TRADE) with a confidence percentage, an A/B/C grade and a plain-English explanation of what is behind it.
It also addresses the redundancy problem directly. Where a typical chart carries four transformations of the same closing prices that agree by construction, MSP fuses 27 genuinely different tools (structure, volatility, participation, session and spread among them) into a single weighted read. And because the state locks on the closed bar and never repaints, the momentum condition you acted on is still the one shown when you review the trade later.
One verdict with a confidence score, an A/B/C grade and a plain-English reason. Non-repainting, on every MT5 instrument and timeframe.
Stop guessing whether the setup is valid
Market Structure Pro reads structure, trend, momentum, levels, volatility, volume and session in one pass and gives you a single answer with the reasoning attached. Free 7-day trial, no card required.
Start free trialFrequently asked questions
What does the Rate of Change indicator measure?
It measures the percentage difference between the current closing price and the closing price a set number of bars ago. A reading of plus two means price is two per cent higher than it was over that lookback, and a reading of minus two means it is two per cent lower. Nothing that happened in between affects the value.
Is ROC the same as the Momentum indicator?
In MetaTrader they are the same calculation with a different scale. MT5's Momentum divides the current close by the close N bars ago and multiplies by 100, so it oscillates around 100, while ROC subtracts and expresses the result as a percentage around zero. Subtract 100 from Momentum and you have ROC.
Does the Rate of Change indicator come with MetaTrader 5?
No, MT5 does not ship a Price Rate of Change indicator. It provides Momentum instead, which is the same measurement centred on 100 rather than zero. If you specifically want a zero-centred ROC line you need a custom indicator, though reading Momentum with 100 as the zero line gives you identical information.
What is the best period for the ROC indicator?
The period should match how long you actually hold trades, because it defines the question the indicator answers. Common short-term choices are 9, 12 or 14, and 25 or more for a slower read. Shorter periods react faster and produce more noise, and there is no setting that avoids that trade-off.
What are the overbought and oversold levels for ROC?
There are none that apply universally. ROC is unbounded and its typical range depends on the instrument, the timeframe and the current volatility, so any fixed threshold is fitted to one situation. The workable method is to look back over several hundred bars and note the values the line has actually reached at past swing extremes.
Is ROC a leading or lagging indicator?
Lagging, despite being described as a momentum tool. Its value depends on a close from N bars ago, so it is by construction a summary of what has already happened. It can show deceleration before price turns, which is often mistaken for leading, but it cannot see ahead of the data it is built from.
Should I use ROC together with RSI?
There is little benefit, because both are transformations of the same series of closing prices and will broadly agree by construction. Waiting for the two to confirm each other feels like confluence but adds almost no independent evidence. A more useful second opinion comes from volume, structure or a higher timeframe.
Why does ROC sometimes jump when price barely moved?
Because it compares the current close with one specific bar from N periods ago. When that old bar was unusually high or low, it dropping out of the lookback shifts the reading even though nothing happened today. Checking what left the window explains most unexplained ROC moves.
Related reading
- Momentum: The same calculation MT5 actually ships, expressed around 100 instead of zero.
- RSI: A bounded momentum oscillator built from the same closing prices.
- MACD: Another close-based momentum tool: useful to understand how much these overlap.
- Divergence: The reading ROC does best: a new price extreme reached with less ground covered.