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
| Name | Default | Range | Note |
|---|---|---|---|
| trough_tolerance_pct | 2 | 0.5–5 | How close the two lows must be. |
| min_peak_height_pct | 3 | 1–10 | Minimum 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