MEASURED · 29 AUGUST 2026

We tested the stochastic 80/20 rule on gold

Every course teaches it: below 20 is oversold, buy; above 80 is overbought, sell. We ran it across 5,884 hours of XAUUSD and counted what happened next on 772 signals. The buy side has a real edge that lasts about an hour. The sell side was wrong at every horizon we measured.

How it was measured

Standard settings, the ones the textbooks use: %K over 14 periods, %D as a 3-period average, zones at 20 and 80. Hourly bars on XAUUSD from a live MetaTrader 5 feed, 1 August 2025 to 4 August 2026.

Signals are taken on the cross out of the zone, not on merely sitting inside it. That matters: %K can stay pinned under 20 for many bars in a row, and “buy while oversold” is not a rule anyone can actually execute. Crossing up through 20 is a buy; crossing down through 80 is a sell. That gave 330 buys and 442 sells.

For each signal we measured the close-to-close move over the next 1, 4, 12 and 24 hours, signed so positive always means the textbook was right — the buy went up, the sell went down.

The number that decides everything is the baseline: the same forward move measured from every bar in the sample, long. If a signal cannot beat simply being in the market, the indicator contributed nothing.

The results

Mean move in dollars, and the share of signals that went the predicted way.

Stochastic signal performance against baseline on XAUUSD
Held forBaseline (just long)Buy on oversold exitSell on overbought exit
1 hour+$0.13 · 51.3%+$0.31 · 55.5%−$0.25 · 48.0%
4 hours+$0.49 · 52.1%−$0.48 · 53.9%−$3.07 · 45.7%
12 hours+$1.44 · 54.0%−$6.36 · 51.8%−$9.53 · 45.9%
24 hours+$2.86 · 54.8%−$2.27 · 51.5%−$6.05 · 47.1%

At one hour the buy signal does something real: 55.5% of them went up against a 51.3% baseline, and the average move was more than double. That is a genuine edge, and it is the only cell in the table where the textbook earns its place.

By four hours it has inverted. The signal averages a small loss while simply being long averages a gain — so past the first hour, acting on the oscillator was worse than ignoring it.

The confound we have to declare

Gold rose over this sample. That is why the baseline is positive at every horizon, and it means the sell results are flattered downward by the trend alone. Shorting anything in a rising market looks bad, and a fair reading cannot treat 45.7% as proof the overbought rule is broken in general.

What survives the confound is the buy side, and it survives it in the awkward direction. In a rising market an “oversold buy” has the wind behind it and should look good. Past one hour it still lost to simply holding. The indicator was not just unhelpful; it selected worse entries than no rule at all.

The number that explains the feeling

The averages hide the mechanism, and the mechanism is why this indicator keeps its reputation. At twelve hours the buy signal's median is +$2.10 while its mean is −$6.36.

Most of these trades are small winners. A minority are large enough losers to swamp all of them. That is the classic shape of a mean-reversion rule with no stop: it is right often, which feels like skill, and wrong expensively, which arrives as a single bad session.

Why a win rate is the wrong question

A rule that wins 52% of the time and loses more on its losers than it makes on its winners is a losing rule. This is the same reason a martingale advertises a 95% win rate and still ends at zero, and why we publish trade counts and drawdown rather than a headline accuracy figure.

What we did with this in our own system

We had already reached the same conclusion from the other direction. Our best-performing mean-reversion strategy, VWAP mean reversion, deliberately does not require an oscillator extreme before entering — and a large part of why it works is that it fires when the gated versions cannot. By the time %K is pinned, the move it was meant to catch has usually happened.

We do still run one strategy that uses the oscillator, and the difference is instructive: Stochastic + EMA takes the turn only in the direction of a moving-average trend filter. It uses the indicator for timing inside a decision something else already made, which is a much smaller job than the one the textbook gives it.

That is the honest use for an oscillator on gold: a timing refinement within a trade you had another reason to take. As a standalone reason to buy or sell, one hour of edge is not enough to pay for a spread and be worth the risk.

Method, and what would change the answer

This tests the raw rule in isolation — no stop, no target, no spread, no position sizing. That is deliberate, and it makes the inference one-directional: costs can only shrink a raw edge, never create one, so a rule that fails here cannot be rescued by better execution. It could, however, be improved by a filter, which is exactly what the trend-gated version does.

One symbol, one year, one settings combination. Different %K lengths or zone thresholds would give different numbers, and 772 signals is a real sample but not a large one — the four-hour buy figure in particular sits close enough to zero that we would not defend its sign. The claims worth holding are the wide ones: the one-hour buy edge, and the mean-versus-median gap.

The script is research-stochastic-edge.py and it runs on the same bar archive as our spread study, so the figures are directly comparable. If you want the indicator explained rather than tested, that is the stochastic oscillator.