Two lows at the same price with a rally between them. The lows are not the signal — the high between them is. Everything that makes this pattern tradeable or not is decided at that level.
We require two swing lows within a tight price tolerance of each other, separated by enough bars to be independent swings rather than one noisy base. The high between them is the neckline. The trigger is the first candle that closes above it.
A second low that undercuts the first by more than the tolerance is not this pattern to us, whatever it later does. It may well resolve upward; it is simply not what we measured, so we do not call it.
Three things separate one worth watching from one that only looks like it:
A close below the lower of the two lows. That is clean and it is the one worth acting on: the premise was that this price found buyers twice, and it just did not find them a third time.
The softer one is time. A base that goes on long enough stops being a double bottom and becomes a range, and a range breaks on whatever the market does next rather than on the structure.
These are our own measurements, not textbook claims. A call counts as a win if price closed 5% in favour before it wicked 5% against, measured from the confirming close over the following 30 days. Everything that resolved is counted, including the failures.
| Population | Resolved | Hit rate | What it means |
|---|---|---|---|
| Published live and resolved | 55 | 49% 27/55 | Calls we posted on the board before the move, graded 30 days out. |
| Backtested and resolved | 103 | 47% 48/103 | Same detector replayed over history. Not the published record. |
The number worth your attention is not either rate on its own — it is that they agree. Across 158 resolved calls, the detector performed forward, in public, within two and a half points of how it performed in replay. That is the check most published backtests quietly fail, and it is the reason we show both populations rather than the flattering one.
We also cut this family by timeframe. Nothing separated them: every cell with enough calls to quote sat between 38% and 48%, live and backtested alike. On this pattern the timeframe is not the variable, so we are not going to dress a null result up as a finding.
| Market regime | Up | Chop | Down |
|---|---|---|---|
| Published live | 2/4 · too few to say | 56% 20/36 | 33% 5/15 |
| Backtested | 55% 11/20 | 40% 12/30 | 47% 25/53 |
Here the two populations disagree, and the disagreement is the honest answer. Our live calls did better in chop than in a downtrend; the backtested set, which is four times larger in that regime, does not reproduce the gap. Fifteen live calls in a downtrend is not enough to overturn fifty-three backtested ones, so treat the live row as suggestive and nothing more.
| Outcome | Calls | Median worst drawdown before resolution |
|---|---|---|
| Worked | 75 | -16.1% |
| Failed | 83 | -22.4% |
This is descriptive, not a rule. It says the calls that worked had generally taken less heat by the time they turned than the ones that failed. It does not say that closing at any particular drawdown would have improved the outcome, and we have not tested that.
Live and backtested are different populations and should not be averaged. The live figure is the one that came from calls published in public before the move. See every live and past call on the Chart Patterns board.
Loading live setups…