02 — Reversal Patterns

Inverse H&S#

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.

DayClose
0105
592
9100
1485
18100
2291
26101
30108
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] > neck
Python, in your browser — edit the code and run it again

Assumes 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
← Previous
Head & Shoulders
Open in the full reader, with the topic sidebar