Double Bottom

A Double Bottom is a bullish reversal where price makes two lows at approximately the same level with a peak between them, and confirms with a close above the neckline (the high of that peak).

What it measures

Two swing lows within tolerance of each other separated by a swing high (the neckline). Confirmed on a close above the neckline; target = height between lows and neckline, projected upward.

Parameters

NameDefaultRangeNote
trough_tolerance_pct20.5–5How close the two lows must be.
min_peak_height_pct31–10Minimum bounce between the lows into the neckline.

How it behaves

The second bottom typically prints on lower volume than the first — the seller pressure that produced the first low has been exhausted. The neckline break, ideally on rising volume, is the trigger.

When it misleads

The most common failure is a "false double bottom" where price breaks the second low by a few percent before rallying — technically it never became a double bottom, but many traders had already positioned. Wait for the neckline close, not just the visual shape. And in strong downtrends, requiring a higher-timeframe context (price above a slow moving average, or at a validated support zone) filters most of the losing signals.

Backtest result

Sourced backtest in preparation — we're running the rule on our own historical candles before publishing numbers we can stand behind.

FAQ

How long between the two lows?
Varies. Textbook says weeks to months on daily; intraday double bottoms complete in hours. The rule of thumb: the two lows should be far enough apart that they are clearly separate events, not the same drawdown.
Do I need volume confirmation?
Strongly recommended. A double bottom with expanding volume on the neckline break has historically been much more reliable than one on shrinking volume.
What is a "W-bottom"?
Colloquial name for a double bottom — the shape looks like the letter W. Same pattern, different vocabulary.

Build a strategy with Double Bottom

Drop the block into the Nodlow builder and backtest on real historical data.

Try it in the builder