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
- How much confirmation adds. Three runs: entry on the next bar after
WAlert, entry after a close abovePeak, 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. - 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.
- Low or close. Conditions relative to the band by
Lowversus conditions by thePctBof the close. The definition in the video allows both readings. - 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.
- 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. - 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.
- 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.stdevis population-based by default, as areStdDevin EasyLanguage andiBandsin 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.atruses 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), wherestopLevelis stored in avarand only increases.
MultiCharts and TradeStation (EasyLanguage)
AvgTrueRangeis 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
Lowervalue from the low's bar into a variable, offset by that delay. Sell next bar at StopLevel stoplives 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
Lowmay differ between them.
MetaTrader 5 (MQL5)
iBandsbuffers: 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.
iATRis 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.