Bullish ReversalHeuristic1 min read
◆ The PatternThe mirror image — three troughs signaling a bottom
The Inverse Head & Shoulders is the bullish mirror: left trough, a deeper head trough, then a shallower right trough. Breakout above the neckline confirms the bullish reversal. Often forms at the end of extended downtrends.
Target = Neckline + (Neckline − Head)
The deeper the head, the larger the potential move. Volume should increase on the breakout.
// Inverse Head & Shoulders anatomy
Key insight: The neckline doesn't have to be perfectly horizontal — a slightly sloping neckline is normal. What matters is the pattern of three troughs.
Pattern bridge: A bottoming reversal is the mirror image of head-and-shoulders — the same symmetry that statistics reveals in distributions.
Worked example
Troughs at 92, 85 (the head) and 91, with the peaks between them at 100. Day 26 closes at 101, above the neckline. Measured move: 100 + (100 − 85) = 115.
The example data
The turning points the daily closes run through, in straight lines between them; high and low are half a point either side of each bar.
| Day | Close |
|---|---|
| 0 | 105 |
| 5 | 92 |
| 9 | 100 |
| 14 | 85 |
| 18 | 100 |
| 22 | 91 |
| 26 | 101 |
| 30 | 108 |
Where it misleads
- Bottoms take longer to form than tops, and many “left shoulders” are just the first bounce in a longer fall.
- Edwards and Magee wanted rising volume on the break; without it the signal is weaker.
- The target is a rule of thumb; check it against the next resistance overhead.
In code
def swings(s, n=3): # a swing high (low) is the extreme of the 2n+1 bars around it
w = s.rolling(2 * n + 1, center=True)
return s[s == w.max()], s[s == w.min()]
c = df['close']
highs, lows = swings(c)
ls, head, rs = lows.iloc[-3:] # the three troughs
between = highs[(highs.index > lows.index[-3]) & (highs.index < lows.index[-1])]
neck = between.mean()
is_ihs = head < min(ls, rs) and abs(ls - rs) / head < 0.05
target = neck + (neck - head)
confirmed = c.iloc[-1] > neckAssumes import numpy as np, import pandas as pd, and a DataFrame df with columns open, high, low and close for the data above.
Sources
- Technical Analysis of Stock Trends, R. D. Edwards & J. Magee, 1948 (later editions revised by W. H. C. Bassetti)
- Encyclopedia of Chart Patterns (2nd ed.), T. N. Bulkowski, Wiley, 2005 — success and failure rates from large counts of patterns
- A. W. Lo, H. Mamaysky & J. Wang, “Foundations of Technical Analysis: Computational Algorithms, Statistical Inference, and Empirical Implementation”, Journal of Finance 55(4), 2000 — patterns found by an algorithm like the one below, tested on U.S. stocks
Last reviewed October 2026 · How this site checks its content · Report a mistake
Linked from 1