Null result

Classic patterns, Elliott and Wyckoff

Head and shoulders, double bottoms, triangles, flags, Wyckoff, Elliott waves, SMC/ICT and divergences. All null — and one instructive bug.

The question: Do classic technical-analysis patterns work when they're tested carefully?

What was found

The most useful episode of all is a mistake of the project's own. On 2 September 2026 an Elliott-wave test came back positive. On re-validation, the wave detector turned out to use pivots that are only identifiable LOOKING BACK: you don't know a local high was a high until price has fallen away from it. The result was an average look-ahead of 15.7 days — the model was seeing two weeks of the future. Corrected so a pivot only counts once it's causally confirmed, the finding vanishes. That same error, under another name, is what charting platforms call "repainting": an indicator that changes the past when new data arrives looks infallible and isn't.

Try it yourself

The test that sank the divergences, and that works for any list of candidates: how many keep their sign when tested on data that was never used to pick them?

Replication rate % = Candidates keeping their sign / 25 x 100
Out-of-sample replication rate

Difference against what a coin flip would give:

The default value, 6 of 25, is the real one. Most people would expect a set of false findings to replicate at around 50%; replicating BELOW that is the clue that the candidates were chosen for fitting the exploration window's noise.

Illustrative example numbers for practice — not real data.

How it was tested, step by step

  1. Each pattern is detected using only information available at the time: a pivot is actionable only once price has moved far enough away to confirm it.
  2. Divergences deserve a separate mention because they were the most instructive false positive. Price against every indicator, four classic types, 479 series and 1,916 tests. At first sight, gold: three survive multiplicity correction with means of −5% to −7% at 5-10 days.
  3. Four controls later: temporal clustering doesn't explain it (they stay significant), trend doesn't either (the effect isn't "BTC is below its 200-day average" in disguise)... but in the holdout 19 of the 25 strongest candidates FLIP SIGN.
  4. And the figure that closes it: keeping the sign out of sample is a coin flip, so 12.5 of 25 would be expected. Six came out — 24%, with a binomial probability of 0.0073. It isn't that they fail to replicate: they replicate WORSE than chance, which is the exact signature of overfitting to the exploration window.
What this does NOT say. What this result does NOT say: it doesn't say nobody can trade chart patterns. It says that, with this mechanizable definition of each pattern, on this asset, with this number of events (n between 5 and 63 in most families) and this criterion, nothing is left. Many of those families were also underpowered from the design: with n = 17 events, as in Wyckoff, you need an edge of around 10% per trade to detect it, and real edges in liquid markets are 1-3%. Most of those "nulls" are, precisely, NON-RESULTS. They're closed not because they were shown not to exist, but because this dataset can't decide it and slicing it further only makes the statistics worse.

Tracking

This finding has no live number: it was measured on archived data, and putting a chart here would imply continuous tracking that doesn't exist. The figures are above, with the script that produced them.

← All research