Triangle Pattern Trading
Triangles describe converging swing boundaries. Treat breakout direction as unknown until price closes beyond a boundary.
Pattern Structure
Ascending Triangle (Bullish Bias)
- Flat horizontal resistance + rising lows — bullish bias is a hypothesis
Descending Triangle (Bearish Bias)
- Flat horizontal support + lower highs — bearish bias is a hypothesis
Symmetrical Triangle (Neutral)
- Lower highs + higher lows, converging — condition results on trend rather than assuming direction
Workflow
1. Get Swing Point Data
Identify at least 2 swing highs and 2 swing lows (4+ total touch points):
get_candles_around_date(symbol=<symbol>, exchange=<exchange>, interval=<interval>, date=<swing_date>)
2. Draw Converging Trendlines (2 parallel calls)
# Upper trendline (connecting swing highs)
draw_chart_analysis(action="create", drawing={
"type": "trend",
"points": [
{"time": <high1_time>, "price": <high1_price>},
{"time": <high2_time>, "price": <high2_price>}
],
"options": {"text": "Triangle R"}
})
# Lower trendline (connecting swing lows)
draw_chart_analysis(action="create", drawing={
"type": "trend",
"points": [
{"time": <low1_time>, "price": <low1_price>},
{"time": <low2_time>, "price": <low2_price>}
],
"options": {"text": "Triangle S"}
})
For ascending: upper line is flat (resistance type instead of trend). For descending: lower line is flat (support type).
3. Confirm and Enter
Check volume declining during formation via get_indicators(indicator_code="mfi", symbol=<symbol>, exchange=<exchange>, interval=<interval>).
Standard: Enter on break + candle close outside triangle with volume spike. Stop inside triangle on opposite side.
Preferred: Wait for breakout, then retest of broken trendline. Enter on rejection.
Target: Triangle height at widest point, projected from breakout.
| Phase |
Expected Volume |
| Formation |
Declining |
| Breakout |
Spike |
| Continuation |
Sustained |
Evidence and Validation
- Treat the setup as a testable hypothesis, not a prediction. Define thresholds, entry, invalidation, and exit before evaluating outcomes.
- Calibrate on the same instrument, venue, session, and timeframe. Use closed candles and a held-out or walk-forward sample; record every variant tried.
- Include spread, fees, slippage, borrow or funding, partial fills, and latency. Reject the setup when net expectancy is not positive or depends on one narrow parameter.
- Return observed inputs, missing data, cost assumptions, entry, invalidation, exit, and a valid, watch, or no-trade status.
- Research basis: Lo, Mamaysky & Wang supports systematic pattern recognition; direction, breakout buffer, and target rules still require out-of-sample calibration.
Key Rules
- Minimum 4 touch points (2 per trendline) to validate
- NEVER enter on a wick breakout alone — wait for candle close outside
- If using trend direction or apex timing as filters, freeze their definitions and verify their incremental net expectancy
- Report width in ATR units and breakout location as a fraction of time-to-apex; do not infer strength from width alone
Related Skills
- wedge-patterns — Similar converging lines, both slope same direction
- flag-pennant — Pennants are small symmetrical triangles
1---2name: triangle-patterns3description: Trade ascending, descending, and symmetrical triangle patterns. Use when anticipating breakouts from consolidation, measuring potential move targets, or timing entries on compression breakouts.4license: Apache-2.05---67# Triangle Pattern Trading89Triangles describe converging swing boundaries. Treat breakout direction as unknown until price closes beyond a boundary.1011## Pattern Structure1213### Ascending Triangle (Bullish Bias)14- Flat horizontal resistance + rising lows — bullish bias is a hypothesis1516### Descending Triangle (Bearish Bias)17- Flat horizontal support + lower highs — bearish bias is a hypothesis1819### Symmetrical Triangle (Neutral)20- Lower highs + higher lows, converging — condition results on trend rather than assuming direction2122## Workflow2324### 1. Get Swing Point Data2526Identify at least 2 swing highs and 2 swing lows (4+ total touch points):2728```29get_candles_around_date(symbol=<symbol>, exchange=<exchange>, interval=<interval>, date=<swing_date>)30```3132### 2. Draw Converging Trendlines (2 parallel calls)3334```35# Upper trendline (connecting swing highs)36draw_chart_analysis(action="create", drawing={37 "type": "trend",38 "points": [39 {"time": <high1_time>, "price": <high1_price>},40 {"time": <high2_time>, "price": <high2_price>}41 ],42 "options": {"text": "Triangle R"}43})4445# Lower trendline (connecting swing lows)46draw_chart_analysis(action="create", drawing={47 "type": "trend",48 "points": [49 {"time": <low1_time>, "price": <low1_price>},50 {"time": <low2_time>, "price": <low2_price>}51 ],52 "options": {"text": "Triangle S"}53})54```5556For ascending: upper line is flat (`resistance` type instead of `trend`). For descending: lower line is flat (`support` type).5758### 3. Confirm and Enter5960Check volume declining during formation via `get_indicators(indicator_code="mfi", symbol=<symbol>, exchange=<exchange>, interval=<interval>)`.6162**Standard:** Enter on break + candle close outside triangle with volume spike. Stop inside triangle on opposite side.63**Preferred:** Wait for breakout, then retest of broken trendline. Enter on rejection.64**Target:** Triangle height at widest point, projected from breakout.6566| Phase | Expected Volume |67|-------|----------------|68| Formation | Declining |69| Breakout | Spike |70| Continuation | Sustained |7172## Evidence and Validation7374- Treat the setup as a testable hypothesis, not a prediction. Define thresholds, entry, invalidation, and exit before evaluating outcomes.75- Calibrate on the same instrument, venue, session, and timeframe. Use closed candles and a held-out or walk-forward sample; record every variant tried.76- Include spread, fees, slippage, borrow or funding, partial fills, and latency. Reject the setup when net expectancy is not positive or depends on one narrow parameter.77- Return observed inputs, missing data, cost assumptions, entry, invalidation, exit, and a valid, watch, or no-trade status.78- Research basis: [Lo, Mamaysky & Wang](https://www.nber.org/papers/w7613) supports systematic pattern recognition; direction, breakout buffer, and target rules still require out-of-sample calibration.7980## Key Rules81- Minimum 4 touch points (2 per trendline) to validate82- NEVER enter on a wick breakout alone — wait for candle close outside83- If using trend direction or apex timing as filters, freeze their definitions and verify their incremental net expectancy84- Report width in ATR units and breakout location as a fraction of time-to-apex; do not infer strength from width alone8586## Related Skills87- **wedge-patterns** — Similar converging lines, both slope same direction88- **flag-pennant** — Pennants are small symmetrical triangles