Do Harmonic Patterns Work? We Tested 896,068 of Them Against Fake Fibonacci Ratios
On the morning of October 14, 2026, a chart posted on TradingView marked a Shark on the E-mini S&P 500 with a projected target of 7,879.75. The 8:30 CPI bar topped at exactly 7,879.75, then fell 47 points in the same 15 minutes. We rebuilt the level from the price data: it could be computed the afternoon before. Then we asked the question one chart can’t answer, by detecting every Gartley, Bat, Butterfly, Crab, Shark and Cypher on 10 years of 5-minute bars for 544 US stocks and ETFs, with no hindsight, and running the same test with deliberately wrong ratios.
What we found
- The patterns reversed no more often than their own target and stop distances predict. The 896,068 harmonic patterns reached their first target 45.7% of the time. A coin-flip price path with the same target and stop gets there about 46.1% of the time.
- Deliberately wrong ratios worked just as well. With every Fibonacci number multiplied by 0.85, 0.90, 1.10 or 1.15, so 0.618 became 0.556 or 0.680, the patterns reversed at almost exactly the same rate. The real ratios came out 0.10 percentage points ahead, about one extra reversal per 1,000 patterns, and ranked 3rd of 10 ratio sets.
- Random prices look the same. Run on simulated random-walk prices, where no pattern can carry information, the same detector produced the same picture: real and fake ratios level, both slightly below the coin-flip line.
- The simpler Fibonacci tools did no better. 13.8 million AB=CD completions and “C = 1.272 / 1.382 / 1.618 × A” projections, the kind of level in the CPI chart, came within 0.6 points of the coin-flip rate and within 0.1 points of their own placebos.
- Stricter definitions changed nothing material. After an independent rebuild flagged that some of our rules were looser than Scott Carney’s tables and that our Cypher measured the wrong leg, we re-ran with the corrected rules. The real ratios’ lead over the placebos went from 0.10 to 0.08 points.
From the team behind this backtest
Get seasonal patterns that have worked in the past
Testing popular trading ideas against decades of data is what we do every day. Does It Repeat applies it to timing: which weeks of the year a market has historically risen or fallen, how consistently, and whether that pattern still holds up.
Seasonality screener
FreeThe next yearly windows with a perfect record
- ICG.LICG PLCLongOct 21 → Nov 25 · won 10 of 10 years · +13.3% avg
- PHParker HannifinLongOct 21 → Nov 22 · won 10 of 10 years · +11.4% avg
- ODFLOld Dominion Freight LineLongOct 22 → Dec 2 · won 10 of 10 years · +9.0% avg
Price cycle screener
FreeCycle models with an entry in the next two weeks
- LITELumentum Holdings Inc.Shortentry Oct 29 · +302.9% net · 100% won
- XMR-USDMoneroLongentry Oct 27 · +278.2% net · 80% won
- AMDAdvanced Micro Devices Inc.Shortentry Oct 27 · +217.1% net · 80% won
Free account includes a screener preview, no credit card. Full access $20/mo at early-adopter pricing, 14-day money-back guarantee, cancel anytime. All statistics are historical; past performance does not guarantee future results.
The chart that started this
The chart labelled the last four swings of the E-mini S&P 500 futures as a Shark and marked a target of 7,879.75 from “monkey math”: the last swing, C, projected 1.618 times the size of the swing before it, A. We pulled the same 15-minute bars and found the same turning points. The projection, 7,834.50 + 1.618 × (7,864.00 − 7,836.00), lands at 7,879.80, and the nearest price ES can trade at is 7,879.75. It could be computed as soon as Tuesday’s 11:30 low was confirmed, which our swing detector did between 12:30 and 15:00 ET depending on swing size, roughly 18 to 20 hours before the 8:30 release.
So the level was real, and it was known in advance. Whether the shape was a Shark is another matter. Measured against Scott Carney’s published ratios, three of its legs come up short:
| Measure | This chart | Shark rule |
|---|---|---|
| B leg vs. A leg (BC/AB) | 1.05 | 1.13–1.618 |
| D vs. the XA leg | 0.86 | 0.886–1.13 |
| Final leg vs. BC (CD/BC) | 1.53 | 1.618–2.24 |
It only qualifies as a Shark once every rule is loosened by 10%. That’s normal: chart patterns are drawn by eye, and a few percent of slack is part of how people use them. It also means one chart can be labelled several ways after the fact.
The more useful question is how often this projection works when nobody is choosing the examples. Our prototype ran on the same chart for the 10 weeks before the release. The “C = 1.618 × A” projection fired 129 times and reached its first target 36% of the time, below the 42% its own target and stop distances would predict. October 14 was one of 47 hits. The 82 misses don’t get posted.
What harmonic patterns are supposed to do
Harmonic patterns go back to a five-swing shape H. M. Gartley described in 1935. Scott Carney named and fixed the ratios for most of today’s versions from the late 1990s on. Each pattern is a sequence of swings X, A, B, C and D. Each swing must be a set Fibonacci fraction or multiple of an earlier one. Where several of those ratios land on the same price, the theory says, there is a “potential reversal zone” where the move is likely to turn.
| Pattern | B (of XA) | C (of AB) | D completes at | D also at |
|---|---|---|---|---|
| Gartley | 0.618 | 0.382–0.886 | 0.786 of XA | 1.27–1.618 of BC |
| Bat | 0.382–0.50 | 0.382–0.886 | 0.886 of XA | 1.618–2.618 of BC |
| Butterfly | 0.786 | 0.382–0.886 | 1.27–1.618 of XA | 1.618–2.24 of BC |
| Crab | 0.382–0.618 | 0.382–0.886 | 1.618 of XA | 2.24–3.618 of BC |
| Shark | any | 1.13–1.618 (beyond A) | 0.886–1.13 of XA | 1.618–2.24 of BC |
| Cypher | 0.382–0.618 | 1.13–1.414 (beyond A) | 0.786 of XC | — |
The claim, then, is specific and testable: price should turn in these zones more often than it turns anywhere else, and the Fibonacci numbers should be the reason.
Has anyone tested this properly?
We looked before building anything. Plenty of articles and videos quote win rates for harmonic patterns. None we found published the full rules, avoided hindsight and compared the result with what the same target and stop would give at random.
- Thomas Bulkowski’s pattern statistics measure harmonic patterns with “perfect trades” that exit at the ultimate high or low. That shows how far price ran after a pattern, not how often a tradable rule would have worked.
- A 2021 paper in Expert Systems with Applications, “Automatic identification and evaluation of Fibonacci retracements”, found that price behaved no differently around Fibonacci retracement zones than around non-Fibonacci ones in three equity markets.
- A student study at HKUST found the patterns rare and their profitability low on SPY, EUR/USD and Bitcoin, though bullish Bats and Crabs called reversals well in rising markets.
- The method we borrowed comes from Lo, Mamaysky and Wang (2000), who detected head-and-shoulders and other chart patterns automatically on decades of US stocks and compared what followed with ordinary price behavior.
The open-source detectors on GitHub and TradingView draw the patterns well. None we found compares them with chance, and several redraw their pivots after the fact, which makes their historical win rates look better than anything a trader could have had.
How we tested it
- Data. Regular-session 5-minute bars for 544 US symbols, 508 stocks and 36 ETFs including SPY, QQQ, IWM, the sector funds, GLD and TLT, from January 2016 to October 2026.
- Swings. A swing ends when price reverses by a fixed multiple of its recent average bar range. We used five sizes at once, from swings of under an hour to moves lasting two or three sessions; on SPY they range from about 0.5% to 2.4%. The smallest matches the swings on the CPI chart.
- No hindsight. A swing point counts only from the bar that confirms it. The completion zone is computed the moment C is confirmed, from X, A, B and C alone, and watched from the next bar on. If price breaks C first, or doesn’t reach the zone within as long as the pattern took to form (at least two hours), it’s dropped.
- The outcome. Entry at the near edge of the zone, or at the open if price gaps into it. The first target is a 38.2% retracement of the final swing, C to D, a common first target in harmonic trading. The stop sits a quarter of that swing beyond the far edge of the zone. On the bar that first touches the zone, only the stop can count, because a 5-minute bar doesn’t show whether its high or its low came first.
- Placebo ratios. Every ratio of every pattern is multiplied by the same factor, from 0.80 to 1.25, and the identical procedure runs on the identical swings. If the Fibonacci numbers matter, the real set (×1.00) should beat the others.
- A random-walk control. The same detector runs on 60 simulated price series of the same length, built from tiny random steps. Nothing can predict a random walk, so whatever the detector finds there is what “no edge” looks like.
How to read the numbers
- Reversal rate
- How often price reached the first target before the stop. It isn’t a trading win rate: costs, fills and exits are not modeled.
- Chance
- How often a price path with no tendency either way would reach a target before a stop at the same distances: the stop distance divided by the two distances combined. A close target and a far stop give a high chance rate; a pattern has to beat it to show it knows something.
- Points
- Percentage points. A reversal rate of 45.7% against a chance rate of 46.1% is 0.43 points below chance (the table rounds both).
- A range in brackets
- The 95% plausible range for the true value. We resampled whole trading days, since every stock tends to move together on a given day. A range that covers zero means the result could easily be noise.
The results: right where the geometry puts them
The detector logged 144 million alerts across all patterns, ratio sets and swing sizes, counting a pattern that fired on the same bar at several swing sizes once. With the real Fibonacci ratios:
| Pattern | Alerts | Reversal | Chance | vs. chance, points | Real minus placebo, points | Rank of 10 |
|---|---|---|---|---|---|---|
| Gartley | 110,004 | 42.1% | 43.2% | −1.10[−1.45, −0.75] | −0.02[−0.36, +0.32] | 6 |
| Bat | 94,722 | 43.5% | 43.5% | −0.02[−0.48, +0.48] | +0.16[−0.19, +0.50] | 4 |
| Butterfly | 96,564 | 52.6% | 53.4% | −0.83[−1.28, −0.39] | −0.10[−0.46, +0.26] | 8 |
| Crab | 42,934 | 43.2% | 42.9% | +0.28[−0.36, +1.00] | +0.26[−0.33, +0.76] | 2 |
| Shark | 286,616 | 48.5% | 48.9% | −0.41[−0.81, 0.00] | +0.08[−0.07, +0.24] | 6 |
| Cypher | 265,228 | 42.9% | 43.2% | −0.29[−0.59, +0.03] | +0.17[−0.02, +0.36] | 1 |
| Six harmonics pooled | 896,068 | 45.7% | 46.1% | −0.43[−0.74, −0.12] | +0.10[−0.01, +0.19] | 3 |
| AB=CD | 2,022,153 | 41.7% | 42.2% | −0.53[−0.76, −0.28] | +0.08[+0.03, +0.13] | 6 |
| ABC 1.272 | 4,598,053 | 36.3% | 36.9% | −0.57[−0.73, −0.40] | −0.06[−0.09, −0.02] | 7 |
| ABC 1.382 | 4,054,208 | 36.7% | 37.2% | −0.44[−0.61, −0.24] | +0.01[−0.03, +0.04] | 5 |
| ABC 1.618 | 3,147,846 | 37.2% | 37.4% | −0.22[−0.42, 0.00] | +0.01[−0.03, +0.05] | 6 |
| Random walk, six harmonics | 66,744 | 50.5% | 51.3% | −0.82[−1.24, −0.39] | +0.02[−0.34, +0.40] | 5 |
Every named pattern landed within about one point of its chance rate. The Butterfly reversed most often, 52.6% of the time, because its geometry puts the target close and the stop far, and its chance rate is 53.4%. The best result against chance, the Crab at +0.28 points, has a range from −0.36 to +1.00. No pattern reached its target meaningfully more often than its own target and stop distances predict.
Most patterns sit slightly below chance. That alone doesn’t mean the patterns hurt. The chance formula assumes a smooth, continuous price path, while real bars jump and gap, and our rule counts a stop on the touch bar but not a target. The random walk, run through the same machinery, sits 0.82 points below the line, lower than the real patterns. So “slightly below chance” is what no information looks like in this test, and the cleaner question is the next one.
Price moves after the touch tell the same story. Averaged over every harmonic pattern, the move in the expected direction one trading session later was −0.25 basis points: 0.0025%, far smaller than the bid–ask spread of almost any stock.
Did the Fibonacci numbers matter?
This is the test harmonic trading lives or dies on. If 0.618, 0.786 and 1.618 are special, patterns built from them should beat patterns built from 0.556, 0.707 and 1.456 on the same swings in the same markets. They didn’t.
The line is flat. The real ratios score −0.43 points; the placebo sets range from −0.67 to −0.36. Against the average of the four placebos closest to the real ratios that still give different zones (×0.85, ×0.90, ×1.10 and ×1.15), the real ratios come out 0.10 points ahead, with a plausible range from −0.01 to +0.19. That’s about one extra reversal per 1,000 patterns, and two of the nine placebo sets did better.
Pattern by pattern, the gaps are all under a third of a point. Two clear zero, in opposite directions: AB=CD by +0.08 points and the 1.272 projection by −0.06. With ten comparisons, a couple of results that small clearing zero is what chance alone produces, and AB=CD’s +0.08 shows up in the random walk too (+0.07). The 1.618 projection from the CPI chart beat its placebos by 0.01 points.
What if our rules were wrong?
Before publishing, we had the whole study rebuilt by a separately written detector. It reproduced all 451,118,247 alert rows across the main run, two tolerance runs and the random-walk control with zero numerical difference. It also checked our ratio table against the primary sources and found several places where it was looser than, or different from, the published definitions:
- Cypher. Our rule measured C as an extension of the AB swing. TradingView’s definition measures it against XA: C must go 1.13 to 1.414 times the XA swing past X.
- Gartley. Carney’s Gartley also needs an AB=CD in the zone.
- Butterfly. Carney’s Butterfly completes at 1.27 of XA, not anywhere from 1.27 to 1.618.
- Shark. Carney’s later book adds a first retracement of 0.382 to 0.618. The Crab’s BC range and the Bat’s minimum AB=CD were also tightened; both turned out to be implied by the other ratios, so those two patterns didn’t change.
We re-ran everything with the stricter rules, placebos included:
| Pattern | Alerts | Reversal | Chance | vs. chance, points | Real minus placebo, points |
|---|---|---|---|---|---|
| Gartley + AB=CD | 51,846 | 37.2% | 38.0% | −0.77[−1.24, −0.33] | −0.01[−0.52, +0.51] |
| Butterfly, D at 1.27 XA | 95,321 | 42.9% | 43.8% | −0.87[−1.29, −0.44] | −0.25[−0.61, +0.13] |
| Shark, B at 0.382–0.618 | 226,631 | 50.7% | 51.1% | −0.36[−0.79, +0.08] | +0.02[−0.16, +0.18] |
| Cypher, C beyond XA | 347,306 | 43.4% | 43.5% | −0.14[−0.45, +0.18] | +0.20[+0.04, +0.36] |
| Six harmonics pooled | 858,760 | 44.9% | 45.2% | −0.28[−0.59, +0.04] | +0.08[−0.03, +0.18] |
The corrected Cypher is the one named pattern whose real ratios beat the placebos with a range that excludes zero: +0.20 points, two extra reversals per 1,000 patterns. That is one of ten comparisons, and the same Cypher still reversed slightly less often than chance. Pooled, the real ratios’ lead over the placebos went from 0.10 to 0.08 points.
Slicing it other ways
The pooled real-minus-placebo gap for the six harmonic patterns, under every split we checked:
| Setting or subset | Real minus placebo, points | Real ratios rank |
|---|---|---|
| Ratio slack ±2.5% (main run ±5%) | +0.12[0.00, +0.23] | 3rd of 10 |
| Ratio slack ±10% | +0.07[−0.02, +0.15] | 4th of 10 |
| Resampling whole months, not days | +0.10[0.00, +0.20] | 3rd of 10 |
| Buy-at-low patterns only | +0.09[−0.07, +0.23] | 3rd of 10 |
| Sell-at-high patterns only | +0.11[−0.03, +0.24] | 2nd of 10 |
| 2016–2020 | +0.14[−0.01, +0.28] | 2nd of 10 |
| 2021–2026 | +0.07[−0.06, +0.20] | 6th of 10 |
| Stocks only | +0.11[+0.01, +0.21] | 2nd of 10 |
| ETFs only | −0.15[−0.54, +0.22] | 5th of 10 |
- Direction is the market, not the pattern. Patterns that expect a bounce up reached their target 0.13 points above chance; patterns that expect a drop came in 1.00 below. 2016–2026 was a rising market, and the placebo patterns show the same split.
- ETFs trended through the zones more than stocks (−1.67 points against chance, vs −0.35 for stocks), and 2021–2026 was worse than 2016–2020 (−0.75 vs −0.02). Neither split favors the Fibonacci ratios over the placebos.
- SPY and QQQ on their own had 1,313 and 1,385 harmonic patterns: −0.28 points against chance for SPY (range −3.0 to +2.4) and −1.24 for QQQ (−4.0 to +1.5). Ten years of one index ETF is not enough data to measure an edge of a point or two either way.
What this test can’t tell you
- It isn’t a test of any trader. Practitioners add confirmation: RSI divergence, higher-timeframe levels, candle patterns, news, or simply skipping patterns that don’t look right. Those filters weren’t modeled. What this shows is that the ratio geometry on its own carries no measurable information.
- Stocks and ETFs only. The study covers the regular session of US stocks and ETFs. Futures like ES and NQ, which trade nearly around the clock, as well as forex and crypto, weren’t tested.
- One target and stop design. Moving the target or stop changes the reversal rate, but the chance rate moves with it. That’s why the comparison is always against chance and against placebos, not a raw win rate.
- Fills are generous and costs are zero. We assumed an order at the zone edge fills whenever price touches it. In practice the best reversals, the ones that barely touch, are the ones most likely to be missed. Both assumptions flatter the patterns.
- Today’s symbols. The universe is the stocks and ETFs listed today, so companies that failed or were acquired since 2016 are missing.
- The chance line is a reference, not a calibrated benchmark. As the random walk shows, the simple formula sits slightly above what a no-information pattern achieves in this test. That’s why the placebo ratios, run on the same data through the same machinery, are the main comparison.
So do harmonic patterns work?
The CPI chart was real: the level was computable a day ahead, and price turned within a tick of it. But across 896,068 harmonic patterns and 13.8 million AB=CD and ABC projections on ten years of US stocks and ETFs, the patterns reversed about as often as any target and stop at the same distances would, and the Fibonacci ratios did no better than ratios we made up. A random walk produced the same picture.
That doesn’t mean a trader who uses harmonic patterns can’t do well. It means the pattern isn’t the part that does the work. Whatever edge there is has to come from somewhere the ratios can’t see.
Common questions
Do harmonic patterns work?
Not in this test. Across 896,068 Gartley, Bat, Butterfly, Crab, Shark and Cypher patterns on 544 US stocks and ETFs from 2016 to October 2026, detected with no hindsight, price reached the first target 45.7% of the time. The distances to that target and to the stop alone predict about 46.1%. The same detector run on simulated random-walk prices, where no pattern can carry information, came out the same way. Practitioners’ extra filters and judgment were not tested.
Are the Fibonacci ratios in harmonic patterns special?
Not measurably. We rebuilt every pattern with each ratio multiplied by 0.85, 0.90, 1.10 or 1.15, so 0.618 became 0.525, 0.556, 0.680 or 0.711, and ran the identical test on the identical swings. The real ratios beat those placebo versions by 0.10 percentage points, about one extra reversal per 1,000 patterns, with a plausible range that includes zero, and ranked 3rd of 10 ratio sets.
What is the win rate of a Gartley, Bat, Crab or Shark pattern?
It depends almost entirely on where the target and stop go. With the first target at a 38.2% retracement of the move into the zone and the stop just beyond the zone, the six patterns reached their target 42% to 53% of the time, and in each case that was within about one percentage point of the rate the target and stop distances alone predict. A wider target gives a lower win rate and a closer one a higher win rate, pattern or no pattern.
Why do harmonic targets sometimes hit to the tick?
Because there are a lot of them. The E-mini S&P chart from October 14, 2026 in this article projected a level about 18 to 20 hours before the 8:30 CPI release, and the CPI bar topped at the nearest tradable price to it. In the 10 weeks before, the same projection on the same chart fired 129 times and reached its first target 36% of the time, against about 42% predicted by its own target and stop distances. The hits get posted; the 82 misses don’t.
Did you test futures, forex or crypto?
No. The full study covers regular-session 5-minute bars of US stocks and ETFs. The E-mini S&P chart is used only as the example that prompted the study. The same code can run on futures data, but those results would be a separate test.
More Pattern Tests
From the team behind this backtest
Get seasonal patterns that have worked in the past
Testing popular trading ideas against decades of data is what we do every day. Does It Repeat applies it to timing: which weeks of the year a market has historically risen or fallen, how consistently, and whether that pattern still holds up.
Seasonality screener
FreeThe next yearly windows with a perfect record
- ICG.LICG PLCLongOct 21 → Nov 25 · won 10 of 10 years · +13.3% avg
- PHParker HannifinLongOct 21 → Nov 22 · won 10 of 10 years · +11.4% avg
- ODFLOld Dominion Freight LineLongOct 22 → Dec 2 · won 10 of 10 years · +9.0% avg
Price cycle screener
FreeCycle models with an entry in the next two weeks
- LITELumentum Holdings Inc.Shortentry Oct 29 · +302.9% net · 100% won
- XMR-USDMoneroLongentry Oct 27 · +278.2% net · 80% won
- AMDAdvanced Micro Devices Inc.Shortentry Oct 27 · +217.1% net · 80% won
Free account includes a screener preview, no credit card. Full access $20/mo at early-adopter pricing, 14-day money-back guarantee, cancel anytime. All statistics are historical; past performance does not guarantee future results.