← All ideas
#035Mean reversionSwing

Bollinger W-bottom: two lows at the lower band and a chandelier stop

The first low goes outside the lower Bollinger Band, the second stays inside it. We enter only after the reversal is confirmed and manage the position with a chandelier stop. The search for lows and the confirmation are our formalization.

The Algorithmic Advantage · John Bollinger · Watch video

Markets

Stocks, Indices

Timeframe

D1

Data

OHLC

Rules

Partly formalised

Difficulty

Medium

Status

Untested

Some rules were added by us and are marked in the text.

TradingView ports directly
EasyLanguage has pitfalls
MetaTrader 5 has pitfalls

Idea in brief

John Bollinger created the bands in the early 80s and calls them an instrument, not a system. The bands answer one question: are prices expensive or cheap relative to recent volatility. At the lower band, price is low by definition. On top of this the author builds price patterns, and the favorite among them is the W-bottom.

The market falls and makes a first low with strong momentum, outside the lower band. Then it bounces, falls again and retests the price low. The second low is close to the first in price, or even slightly lower, but it is already inside the band. Price has returned to the same levels, while the strength of the decline relative to volatility has decreased. First low outside the band, second low inside: by the author's definition, this is a W-bottom.

For the author the pattern itself is only an alert. Bollinger enters a trade when the rally has actually started. Then the author places a chandelier stop from the low and lets the trade develop. The author trades M-tops less often: tops take longer to form, they are blurred, and their "three pushes to a high" version is less accurate.

Why it might work

The author's explanation: emotions at a bottom are sharper and clearer than at a top, so bottom patterns are sharper. The first low outside the band is a panic spike. At the second low, sellers can no longer push price beyond normal volatility. The bands adjust to volatility by themselves, so a single definition fits different stocks and years without choosing thresholds in points.

The author calls the confirmation rule a key principle of all of Bollinger's work. In the author's words, just waiting for confirmation raises system accuracy from 65% to 67–69%, and a small gain in accuracy makes a big difference in P&L. This is a general figure from the interview. The author did not show a separate test of the W-bottom, and there are no charts in the public part of the episode.

Rules

The pattern structure, confirmation as a principle and the chandelier from the low were named by the author. The band period, the search for lows, the tolerances, the confirmation criterion and the chandelier parameters were not mentioned in the video, so we set them.

Bands and %b

Mid   = SMA(Close, 20)                     // Finetiq: the standard 20 and 2, not named in the video
Upper = Mid + 2 * StdDev(Close, 20)        // population standard deviation
Lower = Mid - 2 * StdDev(Close, 20)
PctB  = (Close - Lower) / (Upper - Lower)  // author: 1 at the upper band, 0 at the lower, 0.5 at the middle
ATR14 = ATR(14)                            // Finetiq: for tolerances

Swing low (Finetiq)

// the bar that was i bars ago counts as a swing low if
Low[i] <  Low[i+1], Low[i+2], Low[i+3]     // lower than the three bars to the left
AND Low[i] <= Low[i-1], Low[i-2], Low[i-3] // not higher than the three bars to the right
// we learn about the low only 3 bars after it and do not use it earlier
// at the moment of confirmation, store the low's price, its bar number and Lower on that bar

W-bottom: alert

L1 = second-to-last confirmed swing low
L2 = last confirmed swing low
Peak = Highest(High) between L1 and L2

Cond1 = L1.Low <  L1.Lower                          // author: first low outside the lower band
Cond2 = L2.Low >= L2.Lower                          // author: second low inside the band
Cond3 = abs(L2.Low - L1.Low) <= 1.0 * ATR14         // Finetiq: "retest" of the price low
Cond4 = BarsBetween(L1, L2) >= 4 AND <= 40          // Finetiq
Cond5 = Peak - max(L1.Low, L2.Low) >= 1.0 * ATR14   // Finetiq: there was a bounce between the lows

WAlert = Cond1 AND Cond2 AND Cond3 AND Cond4 AND Cond5
// Finetiq: the bar low is compared with the band.
// Variant for testing: the close, i.e. PctB < 0 at L1 and PctB >= 0 at L2

Confirmation and entry (Finetiq)

PatternLow = min(L1.Low, L2.Low)

// after WAlert, wait no more than 10 bars
IF Close > Peak AND MarketPosition == 0
    BUY AT NEXT BAR OPEN                  // Finetiq: the W is complete, the rally is on
IF Low < PatternLow THEN CANCEL WAlert    // the pattern is broken
IF 10 bars passed without confirmation THEN CANCEL WAlert

Stop: chandelier from the low

// author: chandelier stop from the pattern low.
// Finetiq: the chandelier high is counted from bar L2, the numbers are starting values
Chandelier = Highest(High, from bar L2 to the current bar) - 3 * ATR(22)
StopLevel  = max(StopLevel[1], Chandelier)   // the stop only moves up
EXIT STOP at StopLevel
// no target: the author lets the trade develop

Parameters

Parameter Value Source
Bands SMA 20 ± 2 standard deviations Finetiq
First low Low below the lower band author (comparison by Low: Finetiq)
Second low Low not below the lower band author (comparison by Low: Finetiq)
Swing low 3 bars to the left and 3 to the right Finetiq
Retest tolerance 1 × ATR(14) Finetiq
Distance between lows 4–40 bars Finetiq
Minimum bounce 1 × ATR(14) Finetiq
Confirmation close above the high between the lows Finetiq (principle: author)
Confirmation wait 10 bars Finetiq
Stop chandelier from the low author
Chandelier parameters ATR 22 × 3, high from bar L2 Finetiq
Target none author

What to test

  1. How much confirmation adds. Three runs: entry on the next bar after WAlert, entry after a close above Peak, entry after a close above the middle band. The author promises an accuracy gain of 2–4 points. Also look at trade expectancy: confirmation raises the win rate, but the entry is higher.
  2. Neighborhood, using the author's own method. The author runs a 16–24 average instead of 20 and discards the system if the results differ noticeably. Do the same: band period 16–24, multiplier 1.8–2.2, swing 2–5 bars, retest tolerance 0.5–1.5 ATR.
  3. Low or close. Conditions relative to the band by Low versus conditions by the PctB of the close. The definition in the video allows both readings.
  4. Is the second low needed. A baseline without the W: the close returned inside the band after a close outside it, same entry and stop. If the W is not better, the double bottom adds nothing to a simple return inside the bands.
  5. Exit. Chandelier at 2.5, 3 and 3.5 ATR versus two other interpretations: an initial stop exactly at PatternLow, and an exit at the upper band (PctB >= 1). The author holds positions for a long time; mean reversion with a short target can produce a different trade profile.
  6. The M-top as a mirror. First high outside the upper band, second inside. The author expects a worse result, and this is worth confirming or refuting on the same stocks.
  7. Many stocks. On a single stock, a W-bottom under these rules is rare. Run 100–500 liquid stocks and look at the median, not at the best examples.

Platform notes

TradingView (Pine Script)

  • ta.stdev is population-based by default, as are StdDev in EasyLanguage and iBands in MQL5. The bands will match on all three platforms.
  • ta.pivotlow(low, 3, 3) returns the low's price on the bar where it was confirmed, that is, 3 bars later. Take the lower band value at the low itself with an offset: lower[3]. You can draw a label retroactively, but you cannot trade on it.
  • ta.atr uses Wilder smoothing. In EasyLanguage and MQL5 the built-in ATR is a simple average, so the chandelier level will differ between platforms.
  • Update the stop on every bar: strategy.exit("CH", "L", stop = stopLevel), where stopLevel is stored in a var and only increases.

MultiCharts and TradeStation (EasyLanguage)

  • AvgTrueRange is a simple average of TrueRange. To match Pine, calculate Wilder's ATR yourself: ATRw = ATRw[1] + (TrueRange - ATRw[1]) / 22.
  • The built-in swing functions also confirm a low with a delay equal to the number of bars on the right. At the moment of confirmation, save the Lower value from the low's bar into a variable, offset by that delay.
  • Sell next bar at StopLevel stop lives one bar. Send it on every bar while the position is open.
  • If you look for the pattern on futures, remember the difference between a daily bar with settlement and a 1440-minute bar. A touch of the band by Low may differ between them.

MetaTrader 5 (MQL5)

  • iBands buffers: 0 is the middle line, 1 the upper band, 2 the lower band. Take values from closed bars.
  • The standard ZigZag indicator repaints its last leg. It is not suitable for finding lows in an EA: the test will see lows that did not yet exist at the time of the trade. Write the swing check yourself on closed bars.
  • iATR is a simple average of TR; to match Pine, calculate the Wilder version.
  • Move the stop by modifying the position's SL on a new daily bar, and only upward. SL is set as a price.

Where the idea can break

  • The video contains two sentences from the author about this pattern. Bollinger did not name rules for finding lows, confirmation or stop parameters. Our formalization may differ from how Bollinger actually trades.
  • The accuracy gain from 65% to 67–69% refers to confirmation in general. Nobody has measured it for the W-bottom under our rules.
  • The author has a heuristic: a system of two or three lines is more likely to be good, and one of 150 lines is almost certainly bad. Formalizing the W-bottom brings five tolerances with it. Each of them is one more chance to overfit the result, so the neighborhood check is mandatory.
  • The pattern is rare. A single stock over ten years yields few trades, and conclusions from it are unreliable. You need a universe of stocks and a portfolio test, which Pine does not have.
  • In the same interview the author retells Larry Williams: stops break trading systems. A tight chandelier on the pullback after the W may knock trades out before the rally develops.
  • A reversal from the lower band in a long bear market may turn out to be a pause. The author trades on a medium-term horizon and also relies on market breadth indicators, which are not part of these rules.

Sources

  • Critical formulas for Bollinger Band trading - John Bollinger - 056

    The Algorithmic Advantage · John Bollinger · 2026-09-03

    • 13:45Prices are high at the upper band and low at the lower band
    • 15:45Defining a W-bottom relative to the bands
    • 16:15Confirmation: accuracy rises from 65% to 67–69%
    • 16:45A pattern is an alert, not a signal
    • 32:45The author traded W-bottoms a lot, M-tops less often
    • 33:15Confirming the rally and a chandelier stop from the low
    • 34:30The %b formula
    • 48:00Larry Williams: stops break trading systems
    • 54:45Neighborhood check: a 16–24 average instead of 20

Author's claims

These figures and statements are the author's. We have not verified them.

  • Waiting for confirmation raises system accuracy from 65% to 67–69%. The author gives this as a general principle of the author's work, without naming a market or period and without a separate test of the W-bottom.

Related ideas

Updated: 2026-09-10