10 — Continuation Patterns

Descending Triangle#

BearishHeuristic1 min read
◆ The PatternFlat support + falling highs = sellers pressing lower

The Descending Triangle has a flat support level and a falling upper trendline. Sellers are accepting lower prices. Breakdown below support triggers the measured move — the triangle's height projected downward.

Target = Breakdown − Height of triangle base
The mirror of ascending triangles — sellers weaken support with each touch until it breaks.
// Descending Triangle — flat bottom, falling highs
Key insight: If the prior trend is up, a descending triangle can actually break upward — context matters more than the pattern alone.
Pattern bridge: Falling highs against a flat floor. In statistics, a narrowing confidence interval compresses uncertainty the same way.
Worked example

A flat floor at 90 (three swing lows) under falling highs at 105, 100 and 96. Day 27 closes at 86, below the floor. Height 105 − 90 = 15, so the target is 90 − 15 = 75.

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
490
8105
1290
16100
2090
2496
2786
Where it misleads
  • The floor can hold; falling highs do not guarantee a break down.
  • Breaks below a well-watched floor attract buyers as well as sellers, and quick reversals back above it are common.
  • The tolerance for a “flat” floor decides which triangles you find.
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)
floor, falls = lows.iloc[-3:], highs.iloc[-3:]
flat_floor = (floor.max() - floor.min()) / floor.mean() < 0.01
falling = falls.is_monotonic_decreasing
height = falls.iloc[0] - floor.mean()
breakdown = c.iloc[-1] < floor.min()
target = floor.mean() - height
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 Stock Trends, R. D. Edwards & J. Magee, 1948 (later editions revised by W. H. C. Bassetti)

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

Linked from 1
← Previous
Ascending Triangle
Open in the full reader, with the topic sidebar