Fibonacci Retracements: Making the Levels Testable Instead of Decorative

9 min readQuantParadox research

The arithmetic is trivial and completely determined. Everything contestable about Fibonacci retracements sits in the step before the arithmetic, which is deciding which two points to measure between.

The short answer

A Fibonacci retracement projects horizontal levels between a chosen swing high and swing low, so the levels are decided by the swing selection, and backtesting them requires an algorithm that identifies swings without hindsight rather than an analyst drawing them by eye.

How do Fibonacci retracements work?

A Fibonacci retracement takes a price move between a swing low and a swing high and draws horizontal levels at fixed proportions of that range, conventionally around 38.2%, 50% and 61.8%, with the expectation that a pullback may find support or resistance at one of them.

The arithmetic is not in dispute. Given two anchor points, the levels follow deterministically, and every platform draws them identically. Nothing about the calculation introduces ambiguity.

The rationale offered varies and mostly does not matter for testing purposes. Whether the ratios have significance in nature, or simply function as a widely watched convention that becomes self-fulfilling because enough participants place orders there, the testable claim is the same: does price react at these levels more than at arbitrary ones?

Note that the 50% level is not a Fibonacci ratio at all — it is the midpoint, included by convention. That it is often reported as one of the more respected levels is worth holding in mind when assessing the ratios themselves.

Why does the swing selection decide everything?

Two analysts drawing a retracement on the same chart will frequently choose different swings, producing entirely different levels, which means the levels are a property of the analyst's choice as much as of the market.

This is the central obstacle to testing and it is usually left unaddressed. A chart annotated after the fact with a retracement that price respected is showing a swing selected because it worked. The same chart admits several other defensible swing choices whose levels price ignored, and those are not drawn.

Making it testable requires a swing-detection algorithm: a mechanical definition of what counts as a swing high and low, applied consistently, using only information available at the time. Fractal-style definitions requiring a stated number of bars either side are the common approach, and the bar count is a parameter.

The as-of-bar requirement is easy to violate accidentally. A swing point defined by requiring several bars on both sides is only confirmed some bars after it occurs, so a level anchored to it did not exist at the moment the swing formed. Any test that treats it as available immediately is using information from the future.

Do Fibonacci levels perform better than arbitrary ones?

The comparison that settles this is against control levels at arbitrary proportions of the same swing, run on the same data with the same swing detection and the same reaction threshold.

This test is straightforward to construct and almost never appears in material advocating the technique. Take the identical swing set, draw levels at 38.2% and at 41%, and measure reactions at both. If the arbitrary level performs comparably, the specific ratios are not doing the work and the effect is that pullbacks tend to react somewhere in the middle of a prior move, which is a much weaker and more general claim.

The reaction threshold needs defining before either measurement. What counts as respecting a level — a touch, a close beyond, a move of a stated normalised size away from it within a stated number of bars — determines the result, and choosing it after seeing the data is fitting.

Report the non-reactions. Every level the algorithm drew belongs in the denominator, including those price crossed without pausing. Counting only the levels that produced a reaction guarantees a favourable finding regardless of what is true.

How should a Fibonacci strategy be tested?

Fix the swing detection, the ratio set, the reaction threshold and the horizon in advance, enumerate every level the algorithm produces, and compare against arbitrary control ratios on identical data.

Confluence deserves separate treatment because it is where most of the flexibility hides. Combining a retracement level with a prior high, a moving average and a round number is common practice, and each additional condition is a new parameter. A confluence rule with four components has enough freedom to be fitted to almost any history, so it needs stricter out-of-sample discipline than the plain version, not looser.

Test the ratios separately rather than pooling them. If only one level carries an effect, pooling across three dilutes it toward nothing; if none does, pooling can produce a small apparent effect from noise across a larger sample.

Keep the extension levels distinct from the retracement levels. Projecting targets beyond the original move is a different claim about a different part of the distribution and shares none of the retracement evidence.

How does QuantParadox handle level-based rules like this?

QuantParadox reads structure and swings as of the bar being decided rather than with hindsight, which is the specific requirement that makes a swing-anchored level testable at all.

The Chart Reader module exists for exactly this class of problem. Swings, ranges, structure and compression are identified using only what was available at that bar, so a level anchored to a swing becomes available when the swing was actually confirmable and not before. That single constraint eliminates the most common way retracement tests are contaminated.

Levels are then graded mechanically across a decade of minute-resolution history on thirty instruments, with every drawn level in the denominator whether or not price reacted, and out-of-sample splitting applied by default so a ratio set and threshold tuned on one period must survive one it never saw.

The expectation to set: level-based rules of this kind frequently fail to beat their controls, and a result reported as a failure is the outcome the platform is built to deliver rather than one it works around.

Questions people actually ask

Which Fibonacci level is the most reliable?

Claims that one level outperforms are common and rarely accompanied by the enumeration needed to support them, including the levels price ignored. Test each ratio separately against a control level at an arbitrary nearby proportion, using the same swing detection and reaction threshold. If the specific ratios show no advantage over the controls, what is being observed is a general tendency for pullbacks rather than anything about these numbers.

Do Fibonacci retracements work because everyone watches them?

The self-fulfilling explanation is plausible and does not change how the claim should be tested, since a level that works because orders cluster there is still a level that works. What it does imply is that the effect should be concentrated at the most widely watched ratios and on the most widely watched timeframes, which is itself a testable prediction and a useful way to distinguish this explanation from the alternative.

How do I choose which swing to draw from?

For discretionary trading, choose by a written rule so that your own selection is at least consistent. For testing, the selection must be algorithmic, using a swing definition such as a fractal requiring a fixed number of bars either side, applied with only the information available at that bar. Any selection made by eye after seeing the outcome makes the resulting measurement uninterpretable.

The only backtest that settles it is yours.

Build a strategy from a sentence, paste your own Python, or import your live trade history and have it graded. Five full backtests free, no card, and we'll tell you plainly when the result is indistinguishable from luck.

We publish research and tooling, not trading advice, and we make no claim about future returns. Everything above describes how to test an idea — not a reason to trade one.