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.