08 — Continuation Patterns

Pennant#

ContinuationHeuristic1 min read
◆ The PatternSmall symmetrical triangle on a pole — brief pause before continuation

A Pennant is a small symmetrical triangle that forms after a strong move (the pole). Converging trendlines create a brief pause. Breakout continues in the direction of the pole. Typically resolves within 1-3 weeks.

Target = Breakout + Pole length
Key difference from flags: pennants have converging trendlines (triangle), flags have parallel trendlines (channel).
// Pennant anatomy — pole + triangle
Key insight: Volume should contract during the pennant and expand on breakout. A breakout without volume is unreliable.
Pattern bridge: Converging trendlines compressing volatility before a breakout. In statistics, decreasing variance signals the same convergence.
Worked example

After a pole from 100 to 115, the swing highs fall (114, then 113) while the swing lows rise (110, then 111): the range converges. Day 16 closes at 117, above the last swing high; measured from it, 113 + 15 = 128.

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
0100
5115
7110
9114
11111
13113
15112
16117
Where it misleads
  • With two highs and two lows, “converging” is easy to find in noise.
  • Pennants are short by definition (one to three weeks); a longer one is usually treated as a symmetric triangle.
  • It does not say which way it will break until it does.
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']
pole = c.iloc[-12] - c.iloc[-17]
hi, lo = swings(c.iloc[-12:-1], n=1)                 # swings inside the pennant
converging = hi.is_monotonic_decreasing and lo.is_monotonic_increasing
breakout = c.iloc[-1] > hi.iloc[-1]
target = hi.iloc[-1] + pole
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
  • Encyclopedia of Chart Patterns (2nd ed.), T. N. Bulkowski, Wiley, 2005 — success and failure rates from large counts of patterns
  • Technical Analysis of the Financial Markets, J. J. Murphy, New York Institute of Finance, 1999

Last reviewed October 2026 · How this site checks its content · Report a mistake

Linked from 1
← Previous
Bear Flag
Open in the full reader, with the topic sidebar