MA Disparity Mean Reversion: 4,320 Settings Tested
4,320 disparity index settings tested on USD/JPY. The 5% level textbooks quote was never reached on a 25-period line, and the zero line is a moving average crossover.
The disparity index measures how far the close sits from its own moving average, as a percentage of that average. There is one line of arithmetic behind it:
disparity = (close − moving average) / moving average × 100
Some platforms plot close / average × 100 instead, which is the same series with 100 added to it. A reading of +5 here is a reading of 105 there.
The level quoted with it is almost always the same one: a 25-period average, and 5% as the point where price has gone too far and should come back. That number comes from daily equity charts.
So the first thing worth measuring is whether it exists here. On USD/JPY across 2024 and 2025, on 15-minute, hourly and 4-hour bars, not one bar printed a 25-period disparity of 5%.
What the MA disparity actually measures
The numerator is the distance from the average. The denominator is the price level at the time. Zero means the close is sitting on the line.
That is what separates it from RSI or Stochastics. Those are squeezed into a 0-to-100 frame, so 70 means the same thing on every instrument. This one is not squeezed into anything: it is a fraction of the current price, so the range it reaches depends on the market and on the timeframe.
Measured on a 25-period simple moving average:
| Timeframe | Median | Nine bars in ten | 2024 max | 2025 max |
|---|---|---|---|---|
| 15-minute | 0.09% | 0.27% | 1.94% | 1.94% |
| Hourly | 0.19% | 0.56% | 2.78% | 1.67% |
| 4-hour | 0.41% | 1.05% | 4.54% | 2.35% |
Median and the nine-in-ten figure are 2025. The same "5%" is an extreme a 4-hour chart did not reach in two years, and 2.6 times the largest reading a 15-minute chart produced at all.
Does ±5% ever arrive on USD/JPY?
Lengthen the period and 5% does appear. Over both years, three settings out of the thirty measured got there:
| Timeframe | Period | Year | Bars past 5% | Largest reading that year |
|---|---|---|---|---|
| 4-hour | 200 | 2024 | 4.02% | 9.60% |
| 4-hour | 75 | 2024 | 0.39% | 7.08% |
| Hourly | 200 | 2024 | 0.22% | 6.25% |
All three are 2024. USD/JPY rose 1,632 pips that year with a 2,237-pip range; 2025 fell 56 pips with a 1,900-pip range. In these two years, only periods 75 and above in 2024 crossed 5%.
At the period the level is actually published with, 25, even 3% was reached in only one of six cells: 4-hour bars in 2024, on 0.38% of them.
Is percent of price a stable unit?
It is not. Two measurements say what that unit costs in practice.
One percent is a different number of pips every month
USD/JPY traded between 139.723 and 161.940 in 2024. The same 1% gap is 139.7 pips at the low end of that year and 161.9 pips at the high end. In 2025 the range was 139.923 to 158.663, so 1% ran from 139.9 to 158.7 pips.
The same level fires two to three and a half times as often in one quarter as another
This matters more. A percent threshold and an ATR threshold were each calibrated on the whole year to fire on exactly 20% of its bars, then read quarter by quarter.
| Timeframe | Year | Percent: quietest quarter → busiest | ATR: quietest quarter → busiest |
|---|---|---|---|
| 15-minute | 2024 | 11.4% → 32.4% (2.83x) | 18.0% → 21.9% (1.22x) |
| 15-minute | 2025 | 12.5% → 28.6% (2.30x) | 18.0% → 21.8% (1.22x) |
| Hourly | 2024 | 12.3% → 32.8% (2.66x) | 17.2% → 21.6% (1.26x) |
| Hourly | 2025 | 12.8% → 31.3% (2.44x) | 16.2% → 22.6% (1.40x) |
| 4-hour | 2024 | 9.7% → 34.5% (3.56x) | 18.5% → 20.9% (1.13x) |
| 4-hour | 2025 | 14.9% → 30.5% (2.05x) | 16.3% → 22.7% (1.39x) |
The percent unit swung more in all six cells. Its quietest quarter came in under 10% and its busiest went over 34%. The ATR unit stayed between 16 and 23 everywhere.
The steadier unit did not make more money
The trading results break that expectation: if percent is the wrong unit, ATR should trade better.
Across 90 cells (the same reading, period, timeframe and year, with each unit allowed its own best level), ATR finished ahead in 26. Comparing medians rather than bests, ATR won 33 of 90.
The reason is trade count. Holding the fire rate steady means firing in quiet markets too. On 15-minute bars the long fade took a median of 29 trades a year in percent and 161 in ATR. As the cost section below shows, cost is trade count times spread, so steadying the rate is also multiplying the bill.
Does it return to zero because price returns?
The average catches up, not the price. "It always comes back to zero" is true. What comes back is the question.
Every bar that pushed the reading past a level was followed forward to the bar the sign flipped, and that round trip was split into the part price moved and the part the average moved. The two shares sum to 100%.
| Timeframe | Year | Price's share | Average's share | Bars to zero |
|---|---|---|---|---|
| 15-minute | 2024 | −1.6% | 101.6% | 20.2 |
| 15-minute | 2025 | −0.7% | 100.7% | 19.5 |
| Hourly | 2024 | −26.8% | 126.8% | 20.1 |
| Hourly | 2025 | −4.0% | 104.0% | 16.7 |
| 4-hour | 2024 | −24.1% | 124.1% | 20.6 |
| 4-hour | 2025 | +9.2% | 90.8% | 17.3 |
Period 25, level 0.25% (0.5% on 4-hour bars). Across all 18 cells, which add periods 10 and 75, the price share was negative in 13. The average's share ran from 61.6% to 139.6%.
Read plainly: price does not have to move at all for the reading to return to zero, because the average is moving towards price the whole time. The "reversion" the indicator is named for is mostly arithmetic.
Counting episodes instead of averaging them changes the picture. Price did end up back in the trade's favour in 52.0% to 78.1% of round trips. More than half come back; the mean is still negative because the ones that do not come back travel much further. The price series therefore shows a high return rate but a negative mean outcome before any trading rule is applied.
Shuffling the bars changes almost nothing
Each close-to-close change was kept exactly once and put in a random order, so the volatility, the drift and the fat tails all belong to the market and only the sequence does not. Period 25, 2025:
| Timeframe | Nine-in-ten (real / shuffled) | Share past 0.25% | Bars to zero |
|---|---|---|---|
| 15-minute | 0.269% / 0.258% | 11.9% / 10.9% | 19.5 / 20.7 |
| Hourly | 0.558% / 0.521% | 39.6% / 39.5% | 16.7 / 17.1 |
| 4-hour | 1.051% / 0.998% | 69.5% / 67.3% | 15.2 / 12.7 |
Nearly identical. The round trip is a property of subtracting a trailing mean of closes from a close, not a property of this market.
One column does separate them. The 99th percentile was 0.563%, 1.129% and 1.997% on real bars against 0.462%, 0.899% and 1.573% on shuffled ones. The extremes belong to the market; the round trip does not.
What is the zero-line cross?
It is a moving average crossover. The denominator is a price and prices are positive, so the sign of the reading is the sign of (close − average). Zero disagreements over three timeframes and five periods, and zero again between the percent and ATR versions of the same reading.
The backtest says the same thing. Running the zero cross against a crossover of the close (a 1-period simple average) and the same N-period average:
| Period | Trades under both trading rules | Annual net under both trading rules |
|---|---|---|
| 5 | 1,688 | +1,323.4 pips |
| 10 | 1,053 | +2,007.6 pips |
| 25 | 600 | +2,227.8 pips |
| 75 | 335 | +787.0 pips |
| 200 | 268 | −1,966.8 pips |
Hourly bars, 2025. Swapping the simple average for an exponential, weighted, smoothed or Hull average produced the same identity in all five cases.
Reading the zero line is reading a moving average crossover. Adding the disparity has not added a condition.
One cell out of sixty did diverge between the two units: 4-hour bars, 2024, period 200. The ATR basis divides by an average true range over the same window and Wilder's smoothing needs its own window before that settles, so it is given twice the warmup and starts later. The sign never changed; the line simply began on a different bar.
Adding it to a chart
Stated as facts:
- MT4 / MT5 ship no indicator by this name. What they do ship is Envelopes (Insert > Indicators > Trend > Envelopes), which draws lines at the average times (1 ± d/100): the same calculation, drawn on the price pane instead of underneath it. For the oscillator form, install a distributed .mq4 or .mq5 file.
- TradingView has community scripts published as "Disparity Index". It is not in the built-in list.
- Formiq (browser) has it in the indicator list. Period, guide lines and the unit (percent or multiples of ATR) are settings, and the backtest side accepts four readings: level, level fade, break out of ±level, and the zero cross.
The envelope reads wicks; the disparity reads closes
The lower envelope band sits at average × (1 − d/100), so touching the lower band and printing a reading below −d% are the same condition, differing only in which price is judged. The envelope looks at the bar's low and high; the disparity looks at its close.
Entering at the lower line and exiting at the upper one, period 25:
| Signal price | Year | Timeframe | Level | Side | Trades | Annual net |
|---|---|---|---|---|---|---|
| Envelope (wick) | 2025 | Hourly | 0.5% | Long | 40 | +26.8 pips |
| Disparity (close) | 2025 | Hourly | 0.5% | Long | 31 | +769.9 pips |
| Envelope (wick) | 2024 | Hourly | 0.5% | Long | 46 | +873.0 pips |
| Disparity (close) | 2024 | Hourly | 0.5% | Long | 29 | +169.5 pips |
Over 36 cells (three timeframes, two years, three levels, both directions) the close never traded more often than the wick: 36 of 36. It finished ahead in 20 of 36. Judging on closes reliably cuts the trade count and does not reliably improve the result.
How this was tested
| Item | Value |
|---|---|
| Pair | USD/JPY |
| Timeframes | 15-minute, hourly, 4-hour |
| Periods | 5, 10, 25, 75, 200 |
| Levels (percent) | 0.15, 0.3, 0.5, 0.8, 1.2 |
| Levels (ATR) | 1.0, 1.5, 2.0, 2.5, 3.0 |
| Exit levels (percent) | 0 (back to the average), 0.15, 0.3 |
| Exit levels (ATR) | 0, 0.75, 1.5 |
| Averages | simple, exponential, weighted, smoothed, Hull |
| Windows | 2024, 2025, first half 2025, second half 2025 |
| Spread | 0.3 pips |
| Lot | 0.1 |
| Fills | at the close |
| Stops and targets | none in the sweep, measured separately |
| Combinations | 4,320, plus 360 for the averaging grid |
Three readings were run:
- Fade: past the level, take the other side, and give it back when the reading returns to the average. This opens buys or sells but never both, so the long fade and short fade were swept as separate trading rules.
- Break: up through +level opens a long, down through −level a short. Symmetric, so entry and exit share one rule set.
- Zero cross: through zero one way opens, through it the other way reverses.
How do the three readings differ?
The fade won around 65% of its trades, the zero cross 24%, and only the hourly zero cross held. 2025, measured in percent:
| Reading | Timeframe | Profitable | Median | Mean win rate | Median trades |
|---|---|---|---|---|---|
| Fade, long | 15-minute | 35/75 | +0.0 pips | 65.2% | 29 |
| Fade, long | Hourly | 42/75 | +110.5 pips | " | 30 |
| Fade, long | 4-hour | 60/75 | +466.2 pips | " | 20 |
| Fade, short | 15-minute | 31/75 | −76.5 pips | 66.4% | 23 |
| Fade, short | Hourly | 53/75 | +201.4 pips | " | 27 |
| Fade, short | 4-hour | 63/75 | +718.9 pips | " | 21 |
| Break | 15-minute | 15/25 | +300.0 pips | 36.7% | 37 |
| Break | Hourly | 9/25 | −749.4 pips | " | 42 |
| Break | 4-hour | 8/25 | −851.6 pips | " | 30 |
| Zero cross | 15-minute | 2/5 | −641.6 pips | 23.8% | 2,704 |
| Zero cross | Hourly | 4/5 | +1,323.4 pips | " | 600 |
| Zero cross | 4-hour | 1/5 | −918.6 pips | " | 149 |
Mean win rate pools the three timeframes. The fade wins about two trades in three and finishes ahead in most cells; the zero cross wins one in four and only survives on hourly bars. Counting settings that were profitable in both years cuts that down hard: 19, 13 and 7 of 75 for the long fade, and 11, 17 and 11 for the short.
Does last year's best still work?
Only one of the four transferred. For each row, the setting with the largest 2025 annual net was applied unchanged to 2024.
| Reading | Timeframe | Period | Entry level | Exit level | 2025 trades | 2025 annual net | 2024 annual net |
|---|---|---|---|---|---|---|---|
| Fade, long | 15-minute | 200 | 0.8% | 0.15% | 34 | +1,368.6 pips | +118.9 pips |
| Fade, long | Hourly | 200 | 0.5% | 0% | 32 | +1,327.8 pips | −511.2 pips |
| Fade, long | 4-hour | 75 | 0.5% | 0.3% | 18 | +1,373.6 pips | −394.8 pips |
| Fade, short | 4-hour | 25 | 0.8% | 0.3% | 21 | +1,419.2 pips | −1,840.1 pips |
Only the 15-minute long setting remained profitable in 2024. In the other direction, the 15-minute long fade at period 5 with 0.15% → 0.3% made +2,155.5 pips in 2024 and +255.6 pips in 2025. The median across the same 75 settings in 2025 was 0.0 pips.
Is the 65% win rate real?
On 4-hour bars in 2024, not one of 72 settings kept an edge once the drift came out. The fade only ever opens one side. Hold a long for b bars in a year that rises and it collects the rise, whatever opened it. So the drift an unconditional position of the same length would have earned (the window's total move divided by its bar count, times the bars held) was subtracted from every setting.
| Timeframe | Year | Side | Pips per trade | Drift | Indicator edge | Settings with a positive edge |
|---|---|---|---|---|---|---|
| 4-hour | 2025 | Long | +29.20 | −1.24 | +30.44 | 60/69 |
| 4-hour | 2025 | Short | +40.61 | +1.40 | +39.21 | 60/70 |
| 4-hour | 2024 | Long | −22.54 | +46.07 | −68.61 | 0/72 |
| Hourly | 2024 | Long | −10.91 | +21.22 | −32.13 | 5/72 |
| Hourly | 2025 | Long | +10.70 | −0.74 | +11.44 | 42/63 |
On 4-hour bars in 2024, not one of 72 settings had a positive edge left after the drift came out. The ATR version was 0 of 57.
2025 drifted 56 pips and the fade's edge remained positive in 60 of 69 four-hour long settings. In 2024, after a 1,632-pip rise, it was positive in 0 of 72. The 2025 fade result did not carry into 2024.
The short side is the mirror. The 4-hour short in 2024 lost 74.08 pips a trade, of which 76.04 was the drift, leaving an edge of +1.96. Losing money selling into a rising year is not the indicator's doing.
Which average to measure from
The reading is a distance from a moving average, so which average is a real setting. Five were run with everything else held.
As lines first: the share of bars on which each disagrees with the simple average about which side of zero price is on, period 25, 2025.
| Average | 15-minute | Hourly | 4-hour |
|---|---|---|---|
| Exponential | 7.0% | 6.5% | 5.3% |
| Weighted | 8.2% | 8.0% | 8.3% |
| Smoothed | 15.8% | 15.6% | 12.0% |
| Hull | 36.8% | 37.1% | 37.9% |
The sign of the Hull-based disparity disagreed with the simple-average disparity on 36.8% to 37.9% of bars. This is not a cosmetic choice.
Across 72 cells (four readings, three timeframes, two years and three periods), the average with the largest annual net was Hull in 24 cells, smoothed in 14, weighted in 13, simple in 11 and exponential in 10. Every method produced the largest result in at least ten cells, so the simple average was not consistently superior.
Filters, stops and the spread
Cost is trade count times spread
No article in this series has found an exception, and there is none here: the two columns agree to the tenth of a pip both are rounded to.
| Trading rule | Period | Level | Timeframe | Year | Trades | Annual net at spread 0 | Annual net at spread 0.3 | Difference |
|---|---|---|---|---|---|---|---|---|
| Zero cross | 25 | 0 | 15-minute | 2025 | 2,704 | +169.6 pips | −641.6 pips | 811.2 pips |
| Zero cross | 25 | 0 | Hourly | 2025 | 600 | +2,407.7 pips | +2,227.8 pips | 179.9 pips |
| Break | 25 | ±0.5% | Hourly | 2025 | 62 | −1,662.1 pips | −1,680.6 pips | 18.5 pips |
The 15-minute zero cross makes +169.6 pips at zero spread. Its break-even spread is 0.063 pips, so transaction cost turns the rule negative. The same setting on hourly bars breaks even at 4.013 pips.
What the filters did
Hourly, period 25, zero cross:
| Condition | Year | Trades | Annual net |
|---|---|---|---|
| Baseline | 2025 | 600 | +2,227.8 pips |
| Baseline | 2024 | 601 | +2,546.5 pips |
| ADX ≥ 25 | 2025 | 176 | +554.8 pips |
| ADX ≥ 25 | 2024 | 161 | +24.9 pips |
| London + NY | 2025 | 328 | +1,793.1 pips |
| London + NY | 2024 | 353 | +892.6 pips |
| Tokyo | 2025 | 247 | +564.3 pips |
| Tokyo | 2024 | 210 | +2,427.2 pips |
| Stop 40 pips | 2025 | 558 | +2,461.7 pips |
| Stop 40 pips | 2024 | 559 | +3,612.6 pips |
| Target 40 pips | 2025 | 599 | +2,403.1 pips |
| Target 40 pips | 2024 | 598 | +1,223.9 pips |
No filter improved both years. ADX reduced annual net in both. London and New York produced the larger session result in 2025 (+1,793.1 versus +564.3 for Tokyo), while Tokyo produced the larger result in 2024 (+2,427.2 versus +892.6).
A 40-pip stop improved both. On 15-minute bars a 20-pip stop lifts −641.6 pips to −108.6 (still a loss). The zero cross wins a quarter of its trades with an average win more than three times its average loss, so a stop cuts very few winners.
Notes
- One pair. The unit is a fraction of price, so the 0.27% / 0.56% / 1.05% figures are USD/JPY's, for these two years, and do not transfer to a pair trading at a different level.
- The shuffled control is a close-only series. Each bar's high and low collapse onto its close, so it cannot be used for anything that reads wicks, including the envelope comparison above.
- Fills are at the close with no slippage. A setting that trades 2,700 times a year on 15-minute bars will execute worse than this in practice.
Related tests
- Bollinger band settings: the same fade-or-follow pair of readings, with the band set by standard deviation
- Moving average cross settings: what the zero line here turned out to be
- CCI settings: distance from an average, divided by the average distance
- Psychological line settings, where subtracting the drift was first used in this series
Questions people ask
- What is a good disparity index setting for forex?
- On USD/JPY in 2025, a 25-period disparity kept nine bars in ten inside 0.27% on 15-minute bars, 0.56% on hourly bars and 1.05% on 4-hour bars. Some fade settings between 0.3% and 0.5% produced the largest annual results in this sweep, but three of the four settings selected on 2025 results lost money when applied to 2024. On the zero cross, periods 10 and 25 on the hourly chart were profitable in both years.
- Does the disparity index reach 5% on currency pairs?
- Not on a 25-period line. Across 2024 and 2025, on 15-minute, hourly and 4-hour USD/JPY bars, not one bar printed a 25-period disparity of 5% or more. The largest reading in two years was 1.94% on 15-minute bars, 2.78% on hourly bars and 4.54% on 4-hour bars. The 5% figure comes from daily equity charts, where price moves away from a 25-day average by an order of magnitude more.
- Why does the disparity index always return to zero?
- Mostly because the moving average walks up to the price, not because the price comes back. Splitting each round trip into the part price contributed and the part the average contributed, the price share was negative in 13 of 18 cells measured, meaning price kept moving away while the average closed the gap. The average's share ran from 61.6% to 139.6%.
- Is the disparity index zero line the same as a moving average crossover?
- Yes. The denominator is a price and prices are positive, so the sign of the reading is the sign of close minus the average. Over three timeframes and five periods there were zero disagreements, and in the backtest the zero cross and a close-versus-average crossover produced identical trade counts and identical pips at every period from 5 to 200 and for all five averaging methods.
- Is the disparity index built into MT4 or TradingView?
- MT4 and MT5 ship Envelopes (Insert > Indicators > Trend > Envelopes), which draws the same calculation as two lines on the price chart rather than as an oscillator underneath it. The disparity itself is a custom indicator you install as an .mq4 or .mq5 file. TradingView has community scripts under the name Disparity Index. Formiq has it in the chart list and as a backtest condition with four readings.
Formiq is a free browser-based FX terminal with replay practice and no-code backtesting. Open the chart or see what the free plan includes.