The Rising Wedge has both support and resistance sloping upward, but converging. Price is rising but the range is narrowing — momentum is exhausting. Usually resolves with a bearish breakdown.
Swing highs at 105, 108 and 110, swing lows at 95, 101 and 106: both lines rise, but the lows faster (1.0 a day against 0.42), so the range narrows. Day 21 closes at 100, below the last swing low; the usual target is where the wedge began, 95.
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 | 93 |
| 3 | 105 |
| 6 | 95 |
| 9 | 108 |
| 12 | 101 |
| 15 | 110 |
| 18 | 106 |
| 21 | 100 |
- A rising wedge can break upward too; the bearish reading is a tendency, not a rule.
- Lines through three points each make the slopes very sensitive to which swings you pick.
- “Back to the start” is a convention, not a measured move.
def swings(s, n=2): # 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)
hi, lo = highs.iloc[-3:], lows.iloc[-3:]
hs = np.polyfit(hi.index, hi.values, 1)[0] # slope of the upper line
ls = np.polyfit(lo.index, lo.values, 1)[0] # slope of the lower line
is_wedge = hs > 0 and ls > hs # both rise, the lows faster
breakdown = c.iloc[-1] < lo.iloc[-1]
target = lo.iloc[0] # back to where the wedge beganAssumes import numpy as np, import pandas as pd, and a DataFrame df with columns open, high, low and close for the data above.
- 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