Article contents

Evidence and scope

CME, Fidelity and TradingView explain construction and drawing conventions. They do not establish universal net profitability or a fixed reversal probability for Fibonacci levels.

Data and marketsLogarithmic levels require positive prices. Linear levels require consistently adjusted OHLC, with both anchors belonging to the same instrument and venue.
Research timeframesH=1, H=4 and daily bars are research examples. Do not choose a different timeframe after each observed reaction to obtain a more attractive anchor pair.
Price advances from 100 to 120, pulls back to 110 between107.64 and 112.36, then crosses the previously known micro high.Open full-size illustration
Original synthetic leg and volume. Levels use linear interpolation from 100 to 120. B is assumed confirmed before the qualifying touch; no historical profit is represented.

Practical workflow

Workflow for Fibonacci retracement: freeze the anchors and test the pullback zone
The full steps appear below. At each stage, missing data or failed conditions require a recorded rejection reason.
  1. Confirm the legUse A and B from one fixed detector and scale.
  2. Freeze the formulaChoose linear or log levels and preserve anchors.
  3. Wait for the pullbackThe qualifying touch must follow activation.
  4. Wait for the triggerSmaller structure must be known before the order.
  5. Compare controlsMatch risk, costs and zone width.

A ratio is a coordinate, not a trade signal

CME discusses 38.2% and 61.8% and notes that50%, although commonly plotted alongside them, is not a Fibonacci ratio [1]. Fidelity describes levels constructed between two extremes [2]. Treat these as candidate features describing pullback depth rather than assigning them guaranteed predictive meaning.

A chart offers many possible A→B pairs, creating numerous levels near the current price. Retaining only the pair from which price subsequently bounced makes the conclusion impossible to reproduce. The central modeling problem is deciding which leg is eligible before the reaction is known.

A useful experiment distinguishes the value of a pullback setup from the value of specific numerical ratios. If an ordinary nearby zone performs similarly with the same anchors, trigger and costs, the evidence favors the broader pullback concept rather than a special property of Fibonacci coordinates.

Select a leg whose anchors are already confirmed

The proposed baseline chooses A as a confirmed pivot low and B as the next alternating confirmed pivot high at a registered scale. Require B>A and a leg amplitude of at least 3×ATR at A, an experimental threshold. Activate the candidate only after B's confirmed_at. A historical touch that happened before activation cannot become a retrospective entry.

For an upward leg D=B−A, define F(r)=B−rD and freeze the research zone [F(0.618), F(0.382)]. For a downward leg, A is the high and B the low, with F(r)=B+r(A−B). Do not change either ratio or anchor to keep an otherwise invalid setup alive.

Store anchor identities, occurrence and confirmation times, scale, price transformation, zone boundaries and expiry. The code below is a detector sketch: invalidation or expiry must terminate processing for that candidate before any trigger branch can execute on the same bar.

If several eligible legs overlap, choose a deterministic policy such as the latest completed leg at one scale, or retain all observations with one-position-per-instrument risk handling. Trying every pair and counting only successful reactions would inflate both opportunity selection and apparent sample size.

when B becomes confirmed:
    A = preceding_confirmed_opposite_pivot(B)
    if A is None or ATR[A.i] is missing or ATR[A.i] <= 0: return
    if B.price <= A.price or B.price-A.price < 3*ATR[A.i]: return
    lower = B.price - 0.618*(B.price-A.price)
    upper = B.price - 0.382*(B.price-A.price)
    freeze(A,B,lower,upper,expires_in=20)
for each later closed bar t:
    if C[t] < A.price-buffer or expired(t):
        invalidate(); continue
    if low[t] <= upper and high[t] >= lower: mark_zone_touch(t)
    if touched and C[t] > frozen_micro_high+buffer: signal_long(t)
# frozen_micro_high must be known when the touch setup is activated.

Linear levels and two very different stop policies

Synthetic A=100, B=120 gives D=20. The 38.2% level is 112.36, the 50% level110, and 61.8% level107.64. A pullback to 111 lies inside the zone. Suppose a previously known micro high is 113 and a later close 113.3 triggers entry. A fill113.4 with stop 109.8 has 3.6 points of price risk and a 2R target 120.6.

A synthetic continuation above 120.6 before the stop satisfies that target. A failure moves through 109.8 and continues toward 100. If the stop is instead below the original A at 99.8, risk becomes 13.6 and the 2R target 140.6. Those are materially different strategies; a chart cannot retain the same displayed reward-to-risk while moving the stop between them.

If B is not confirmed until price has already fallen to 106 and recovered to 113, the strategy could not have bought the earlier110 touch. Reject that stale opportunity or register a distinct late-entry approach. Report the share of legs lost to confirmation delay rather than quietly removing them from the sample.

Include a gap across the entire zone as a fixture. A daily high–low range intersecting the zone does not establish a tradable touch at every level during a gap. A limit-order variant needs executable-price and fill assumptions separate from the completed-bar touch label.

Linear and logarithmic interpolation produce different numbers

TradingView provides a logarithmic Fibonacci calculation option for log-scale charts [3]. For positive prices, a transparent log definition is F_log(r)=exp(log(B)−r(log(B)−log(A))). This interpolates log prices. Merely changing how a chart is displayed does not alter a linear calculation unless the tool's level formula changes as well.

With A=100 and B=400, the 50% linear retracement is 250, while the logarithmic midpoint is 200. The difference can change the entire signal population. Choose the transformation before evaluation and store it in each candidate; log levels are undefined for zero or negative prices.

A reproducibility test should calculate both versions from the same anchors and verify their endpoints: r=0 returns B and r=1 returns A. Mirroring an upward leg into a downward leg should use the correct formula rather than reversing labels on an unchanged calculation.

Separate the touch, trigger and exit hypothesis

The proposed baseline waits for a zone touch and then a break of an already-known micro high. The candidate lasts 20 bars after activation and at most five bars after the touch. Entry uses a subsequent executable open; losing A before entry invalidates the setup. Permit one entry per leg. These timeouts are research settings.

Freeze the micro high when the touch setup activates. If that level is already crossed, define whether the candidate is stale rather than replacing it with a later convenient high. Likewise, a zone touched repeatedly should not generate unlimited independent trades without an explicit reset policy.

Measured-move projection is a different exit rule, projecting a leg length or pattern height from another reference. A projected target is not a destination price must reach. Compare structural targets,2R and time exits on development data, then preserve the selected version for final evaluation.

Use feasible fills around gaps and stops. If a price observed before order submission makes the planned trade unacceptable, a registered rejection policy can apply. A limit or stop order that has already filled remains in the ledger even if a later close makes the setup look invalid.

Test pullback volume rather than narrating it

Measure mean volume per bar during the pullback and the preceding advance, or divide total volume by duration. Unequal leg lengths make raw totals misleading. Lower pullback activity and higher trigger RVOL form a possible hypothesis, but its thresholds must be fixed before results are examined.

Run a same-anchor ablation: zone touch plus trigger, then add volume, then replace the Fibonacci zone with an ordinary40–60% zone. If performance is similar, the experiment provides more support for pullbacks generally than for the exact Fibonacci ratios.

For intraday legs, normalize activity by comparable session positions. A pullback across lunch can have lower volume without implying exhausted supply. Aggregate OHLCV cannot identify participant motives or assign every trade to a precise retracement price.

Use equal-width controls and retain missed opportunities

The 38.2–61.8% zone spans 23.6% of the leg;40–60% spans 20%. Different width changes touch probability, so add a same-width control such as38.0–61.6% and analyze returns as a function of continuous pullback depth. Comparing only the number of bounces is not a fair test.

Retain every eligible leg, including those never touching the zone or never triggering afterward. Fixtures should include delayed anchor confirmation, gaps across the region, overlapping setups sharing anchors and tick-size changes. Confirm prefix invariance for already-published candidates.

Report net expectancy, no-fill rate, holding time, exposure and sensitivity to nearby boundaries. A single bounce at 61.8% is an illustration rather than a statistical test. Register all anchor scales, ratios and stop alternatives so selecting the best historical combination does not disappear from the evidence record.

Common pitfalls

Trying every anchor pair after the reaction

Enough retrospective pairs can place a level near almost any observed bounce.

Treating a target as guaranteed

A projection is an exit hypothesis requiring empirical evaluation.

Changing chart scale without documenting calculation

Log and linear interpolation can differ substantially for large legs.

Checklist before using this method

Check each item after verifying it on your data. Progress is saved in this browser; it does not certify a profitable strategy.

0/8 items

Frequently asked questions

Is 61.8% stronger than 50%?

The reviewed sources do not establish a universal net advantage. Compare equivalent context, zone width and costs rather than selected examples.

Why not place a limit directly at a Fib level?

A limit-entry version can be tested separately, including missed fills, queue effects and moves through the zone. Waiting for a later price trigger tests another hypothesis.

Research sources

Each source supports the definition or evidence described beside it. The pseudocode, synthetic examples and proposed parameters require separate validation.

  1. Fibonacci Retracements and ExtensionsCME Group. Read retracement ratios and the distinction concerning 50%; examples are not treated as profitability tests. Checked: .
  2. Fibonacci RetracementFidelity. Read construction from two extrema. Checked: .
  3. Fibonacci retracement drawing toolTradingView. Read anchors, configurable levels and logarithmic calculation. Checked: .

Related methods

Risk note

This content supports education and research design, not financial advice. Backtest is historical simulation, does not guarantee future performance and does not place real trades. Methods in this library are not automatically features available in the app. See methodology and learning center.

Validate rules before risking real capital

Check app support, data and individual simulated trades; advanced detectors may require a separate implementation.

Download Backtest on the App Store