ForexBestRobots.comCompare EAs →
EN

CHART PATTERN STRATEGIES · STRATEGY 3

Triangle Breakout Forex Strategy: Ascending and Descending Patterns with Fixed Boundaries

A testable Forex triangle-breakout strategy with four confirmed pivots, fixed boundary and trendline anchors, expiry, BUY and SELL closing rules, costs, stops and position sizing.

18 min readReviewed by ForexBestRobots Editorial Team
Two nearby highs and rising lows can form an ascending-triangle candidate; the descending case reverses the geometry. This educational rule set fixes both boundaries before the signal, waits for a completed close and checks the first available quote. It never redraws a failed candidate to fit a later winner. All diagrams and outcomes are fictional.
Confirm four pivots → fix both boundary equations → wait for a valid close and first quote.

A triangle becomes useful for research only when its boundaries and recognition time are defined before the breakout. Otherwise a failed shape can quietly disappear while a better-looking one is drawn around the later move. This strategy specifies a narrow ascending BUY case and its descending SELL mirror, using confirmed turning points and unchanged line equations. The chart-pattern guide explains the wider context. Every threshold below is a declared research choice, not a proven optimum or current trading recommendation.

1. Define the compression hypothesis and data

An ascending triangle combines nearby highs with higher lows; a descending triangle combines nearby lows with lower highs. Here the hypothesis is that a later closing break on the designated side may identify an actionable release from that compression. The outline alone does not establish direction or positive expectancy. This specification does not require a preceding impulse or claim to detect the intentions of market participants. A range, failed breakout or continuation in the opposite direction remains possible.

Use ordinary EURUSD H1 Bid bars from one declared feed and corresponding historical Bid/Ask quotes for execution. Pip size is 0.0001 in this specification. Indices increase forward in time; O, H, L and C denote open, high, low and close. Recognition uses completed bars only. MT4 timeseries shifts run the other way: shift 0 is unfinished and shift 1 is the latest completed bar. Convert indexing explicitly before using the formulas.

Require consecutive hourly timestamps for every required bar, starting at a−2 and continuing through confirmation and the active window. A timestamp gap, including the weekend gap, clears the pivot window and cancels an armed candidate. Resume only with a new sequence containing all required observations. Record feed, server timezone, symbol contract and exclusions. Missing quotes are unavailable data, not prices to invent. A Bid-only chart can describe the geometry, but cannot supply every Ask-side execution or invalidation check.

2. Confirm four events before using the shape

A low pivot at j is strictly below the lows at j−2, j−1, j+1 and j+2; a high pivot is strictly above those four highs. Equality on either side disqualifies that pivot type. The event becomes available only after j+2 closes, even when a chart places the marker back at j. If a bar qualifies as both types, treat it as ambiguous: clear the event window and cancel the candidate. This is our strict detector, not a promise that every platform fractal indicator treats ties identically.

Keep confirmed pivot events in chronological order, including consecutive events of the same type; do not replace them with more attractive extremes. Inspect only the latest four. BUY requires high–low–high–low; SELL requires low–high–low–high. Label their original bar indices a, m, b and n, in that order. Events a and b belong to the approximately horizontal side; m and n define the sloping side. A non-alternating sequence fails. Each ordered sequence has a unique identity.

Evaluate new candidates only while flat. Each newly confirmed pivot first cancels an existing armed candidate, even if that bar also closes beyond the breakout gate; only then inspect the latest four events. During an open position, record events without arming or queuing candidates. After closing, wait for a new confirmed event. The head-and-shoulders strategy has different geometry. The flag strategy also uses a prior impulse; that requirement is not imported into this triangle rule.

Schematic ascending-triangle BUY and descending-triangle SELL candidates with four consecutive confirmed pivot events a, m, b and n. For BUY, highs a and b fix horizontal boundary B, while lows m and n fix rising line F(k); SELL reverses the price geometry. Anchors and equations stay unchanged. The last pivot n is usable only at c = n+2. Time runs left to right. The blue observations are the later confirmation bars. These panels show recognition before a valid break, not an entry or a successful future outcome.
Schematic ascending-triangle BUY and descending-triangle SELL candidates with four consecutive confirmed pivot events a, m, b and n. For BUY, highs a and b fix horizontal boundary B, while lows m and n fix rising line F(k); SELL reverses the price geometry. Anchors and equations stay unchanged. The last pivot n is usable only at c = n+2. Time runs left to right. The blue observations are the later confirmation bars. These panels show recognition before a valid break, not an entry or a successful future outcome.On a narrow screen, scroll the diagram horizontally.

3. Define contacts, convergence and separation

Measure spacing as differences in original bar indices. Require n−a from 12 to 48 inclusive, with every adjacent leg at least 3. For BUY, H[a] and H[b] must differ by no more than 2 pips; set B to their higher value. These two confirmed highs are contacts within the declared tolerance, not necessarily identical prices. Require L[n] to exceed L[m] by at least 6 pips. For SELL, the two lows have the same tolerance, B is their lower value, and H[m] must exceed H[n] by at least 6 pips.

For BUY, line F(k) passes through L[m] and L[n]; for SELL it passes through H[m] and H[n]. Use those two prices as Q[m] and Q[n] in the line equation. Initial width W0 is B−L[m] for BUY or H[m]−B for SELL; require 16 to 80 pips inclusive. Later width W1 is B−L[n] or H[n]−B, respectively. Require W1 at least 8 pips and between 0.25 and 0.75 of W0, inclusive. Thus the opposite pivots must converge while retaining space. A rectangle, a third unrelated touch or an arbitrary wedge does not automatically meet this detector.

4. Freeze geometry and limit the opportunity

At c = n+2, fix the pivot identities, horizontal level B and the complete F(k) equation. Use original forward indices to interpolate or extrapolate the same line; do not move either anchor later. BUY stop S is L[n] minus 2 pips, SELL stop S is H[n] plus 2 pips. This fixed protective reference differs from the sloping line used to invalidate an untraded candidate. After entry the line does not move S, create a trailing stop or trigger a separate exit.

Reject an already completed break: from m+1 through c inclusive, no BUY Bid close may be strictly above B plus 2 pips and no SELL Bid close strictly below B minus 2 pips. From n+1 through c, also reject any BUY Bid low at or below F(k) minus 2 pips, or SELL Ask high at or above F(k) plus 2 pips. At c, the remaining width B−F(c) for BUY or F(c)−B for SELL must be at least 6 pips. If all checks pass, arm for c+1 through c+8 inclusive; c cannot signal. Without a qualifying signal, expire after c+8. Expire sooner if remaining width falls below 6 pips, so entry is never allowed at or beyond the line intersection.

5. Ascending triangle: a completed BUY break

At each completed bar t in the active window, first process data gaps and new confirmed pivots. Then cancel if remaining width B−F(t) is below 6 pips or the Bid low is at or below F(t) minus 2 pips. If the candidate survives, the first Bid close strictly above B plus 2 pips signals BUY. Equality or a wick alone does not qualify. Mark the candidate used immediately. Its fixed gate G is B plus 2 pips; the boundary is not recalculated from the breakout candle.

Inspect only the first Bid/Ask quote after the signal closes. It must arrive within 60 seconds; live Bid must remain strictly above G, spread must be no more than 1.5 pips, and Ask minus the signal Bid close must be no more than 5 pips. A lower Ask is acceptable if all other checks pass. A late, missing, expensive or invalid quote means skip and record the reason. No later quote, second close or return to the broken boundary revives the same sequence.

6. Descending triangle: the SELL mirror

For SELL, cancellation has the same priority. Remaining width F(t)−B must be at least 6 pips, and cancel if the completed bar’s Ask high is at or above F(t) plus 2 pips. Otherwise the first Bid close strictly below B minus 2 pips signals SELL and consumes the candidate; G is B minus 2 pips. At the first subsequent quote within 60 seconds, Bid must remain strictly below G, spread no more than 1.5 pips, and signal close minus Bid no more than 5 pips. A higher Bid can pass while below G; a failed first quote means no retry.

SELL opens at Bid and closes at Ask; BUY opens at Ask and closes at Bid. Therefore Bid-only history cannot verify the SELL Ask-high invalidation or all exits. Do not copy Bid to the wrong price side to create a favourable result. The sloping-line rule applies only before entry; once filled, use the fixed exits below. This detector does not trade symmetrical triangles, opposite-direction breaks or a retest entry. The broader breakout strategy should be evaluated as its own rule set.

7. Check feasibility before and after the fill

At the available entry quote, require a positive distance to S between 8 and 60 pips inclusive. Check price-tick alignment, minimum and maximum volume, lot step, margin, trading permissions, commissions and broker stop restrictions. Unknown or failed constraints mean skip; do not move S to fit the broker. A reported zero minimum stop distance does not guarantee every stop request will be accepted. An entry signal and an order request are not evidence of an actual fill.

Size using that quote and the stated costs. Record the actual fill E, keep S unchanged and recheck the distance and cash budget using E. If the fill breaches the limits, or protection cannot be established, request an immediate close at an available quote and retain the trade, costs and reason in the results. Do not reclassify a filled failure as a skip. Delays, rejected orders and emergency closes are part of execution risk, even when the pattern itself was recognised correctly.

8. Use fixed exits and size in the account currency

For BUY, price risk is E−S and target T is E plus twice that distance. For SELL, risk is S−E and T is E minus twice that distance. This target uses entry-to-stop risk, not a projection of the initial triangle height. BUY exits use Bid; SELL exits use Ask. Keep S and T fixed, with no trailing or break-even adjustment. If neither is reached, request an exit after 12 completed H1 bars, counting the entry-containing bar as the first, at the first subsequent real quote.

Use an illustrative budget of 0.5% of current equity and at most one open position for this rule set. Divide the cash budget by estimated loss per lot, including price distance, round-trip commission and the total adverse-slippage allowance. Round down to the permitted lot step; below minimum volume means skip. An allowance is not a maximum-loss guarantee. Gaps and execution failures can exceed it. Assess combined exposure with other systems separately using the risk-management guide.

Pips, platform points and minimum ticks are different units. Use the actual contract and account currency for pip or tick money values, converting distance and tick size into matching price units. A value given in points must be converted before combining it with a price distance. USD 10 per pip is not universal. Correct Ask/Bid entries and exits already include spread; do not add the same spread twice. Include swaps when applicable. The pip guide and position-sizing guide cover these conversions.

9. Worked BUY with fixed resistance and rising lows

The fictional events are a = 20, m = 26, b = 32 and n = 38. Each adjacent leg spans 6 indices, so n−a is 18. Highs are H[a] = 1.10500 and H[b] = 1.10490; their 1-pip difference gives B = 1.10500. The lows are L[m] = 1.10100 and L[n] = 1.10280, an 18-pip rise. W0 is 40 pips and W1 is 22 pips, a ratio of 0.55. The last pivot becomes usable at c = 40. Assume all strict pivot, timestamp and no-earlier-break checks pass.

F(40) = 1.10310 leaves 19 pips of width at confirmation. At the first eligible bar t = 41, F(41) = 1.10325, so width is 17.5 pips and the lower invalidation threshold is 1.10305. A Bid low of 1.10340 survives, while a completed Bid close of 1.10530 strictly exceeds G = 1.10520. The fixed stop is S = 1.10260. The first quote arrives 2 seconds later at Bid 1.10540 and Ask 1.10550: spread is 1 pip and adverse chase is 2 pips. Assume accepted protection and actual fill E = 1.10550.

The fixed stop is 29 pips below E; T = 1.11130 is 58 pips above it. In a USD 10000 account, the 0.5% budget is USD 50. Assume USD 10 per pip per 1 lot, USD 7 round-trip commission per lot and a total adverse-slippage allowance of 2 pips per alternative outcome. Modelled loss per lot is USD 317. Rounding down to a 0.01 lot step gives 0.15 lot and modelled loss USD 47.55. Rounding upward would exceed the budget.

CalculationDeclared valueMeaning
Signal gate G1.10520Fixed horizontal boundary plus closing buffer
Fixed stop S1.10260Last confirmed low minus buffer
Price target T1.11130Twice actual entry-to-stop distance
Cash budgetUSD 50Equity multiplied by the risk fraction
Modelled loss per lotUSD 317Price distance plus commission and allowance
Rounded volume0.15 lotRound down; never round risk upward
Modelled lossUSD 47.55Conditional allowance, not a loss cap
Modelled net target outcomeUSD 82.95Conditional result, not a forecast

At T, gross price gain is USD 87.00. Deduct USD 1.05 commission and USD 3.00 slippage allowance for a modelled net target outcome of USD 82.95. The allowance is used once in each alternative outcome, not twice inside one trade. The price-distance ratio is 2, while the net cash ratio is lower. This example assumes no swap and no further fill deviation. Neither the target nor the stop is a guaranteed execution price, and the calculations are not a return forecast.

Fictional triangle EURUSD BUY in a USD account, with pip size 0.0001. Assumed Ask entry and actual fill E 1.10550, fixed stop S 1.10260 and target T 1.11130 give 29 pips downward to the stop and 58 pips upward to the target. With USD 10 per pip per 1 lot, USD 7 round-trip commission per lot and a total adverse-slippage allowance of 2 pips per outcome, modelled loss is USD 317 per lot. A USD 50 budget and 0.01 lot step give 0.15 lot, modelled loss USD 47.55 and modelled net target outcome USD 82.95. These conditional calculations are not guaranteed fills, maximum losses or expected returns.
Fictional triangle EURUSD BUY in a USD account, with pip size 0.0001. Assumed Ask entry and actual fill E 1.10550, fixed stop S 1.10260 and target T 1.11130 give 29 pips downward to the stop and 58 pips upward to the target. With USD 10 per pip per 1 lot, USD 7 round-trip commission per lot and a total adverse-slippage allowance of 2 pips per outcome, modelled loss is USD 317 per lot. A USD 50 budget and 0.01 lot step give 0.15 lot, modelled loss USD 47.55 and modelled net target outcome USD 82.95. These conditional calculations are not guaranteed fills, maximum losses or expected returns.On a narrow screen, scroll the diagram horizontally.

10. Test the sequence and retain every rejection

Replay bars and quotes in time order. Store original pivot times and later confirmation times, sequence identity, fixed B and F(k), S, expiry, remaining width, cancellation reason, signal close, first subsequent quote, requested order, actual fill, volume, costs and exit. A final chart cannot establish what was available at entry. The optional equations summarise the declared method; they are not a complete EA or executable order-management system.

Keep rejected sequences, including non-alternation, poor spacing, unmatched contacts, insufficient convergence, invalid widths, an early break, a new pivot, a line violation, expiry, bad quotes and broker constraints. Use historical Bid/Ask quotes for SELL checks and stop/target ordering. If both exits appear in one OHLC bar and ordering is unknown, mark the case ambiguous and report a separate conservative stop-first sensitivity result. Never select the favourable ordering. A candidate cancelled before entry is not a filled losing trade; report the two populations separately.

Freeze the specification before evaluating untouched periods. Report all tested parameter variants, candidate counts, rejections, quote failures, emergency closes and completed trades, together with net expectancy, drawdown, turnover and sample uncertainty. Test nearby tolerances and different feeds without retaining only winners. The backtesting guide and execution-cost guide explain related limitations. No performance study or demonstrated advantage is supplied here.

Common errors are using n before n+2 closes, searching older pivots after the latest four fail, redrawing F(k) after a violation, ignoring cancellation priority, letting the two lines cross before entry, entering at a historical signal close, retrying a failed first quote and moving the fixed stop with the rising or falling line. Long quote gaps can delay a time exit; use the next real quote and retain the delay. News, gaps, wider spreads and correlated systems can exceed a small nominal risk budget. Compression and a target twice the stop do not establish profitability.

Optional: exact boundary, width and sizing equations

low_pivot(j) = L[j] < min(L[j-2], L[j-1], L[j+1], L[j+2])

high_pivot(j) = H[j] > max(H[j-2], H[j-1], H[j+1], H[j+2])

pivot_known_at(j) = close_time[j+2]

F(k) = Q[m] + (Q[n]-Q[m])*(k-m)/(n-m)

c = n + 2; eligible_break_bars = [c+1, c+8]

buy_width(t) = B - F(t); sell_width(t) = F(t) - B

buy_break(t) = C_Bid[t] > B + 2*pip; sell_break(t) = C_Bid[t] < B - 2*pip

buy_stop = L[n] - 2*pip; sell_stop = H[n] + 2*pip

buy_target = E + 2*(E-S); sell_target = E - 2*(S-E)

cash_budget = equity * 0.005

loss_per_lot = stop_pips * pip_value_per_lot + commission_per_lot + slippage_pips * pip_value_per_lot

lots = floor((cash_budget / loss_per_lot) / lot_step) * lot_step

While flat, confirm the latest eligible four-pivot sequence and fix B, F(k) and stop S. During the next 8 completed bars, check new pivots, data gaps, the remaining width and opposite-line invalidation before looking for a break. The first valid closing break marks the candidate used. Only the first subsequent quote can reach the broker and cash-risk checks. A failure means skip, without retrying the same sequence. After entry, exits are fixed; the sloping line does not trail the stop.
While flat, confirm the latest eligible four-pivot sequence and fix B, F(k) and stop S. During the next 8 completed bars, check new pivots, data gaps, the remaining width and opposite-line invalidation before looking for a break. The first valid closing break marks the candidate used. Only the first subsequent quote can reach the broker and cash-risk checks. A failure means skip, without retrying the same sequence. After entry, exits are fixed; the sloping line does not trail the stop.On a narrow screen, scroll the diagram horizontally.

11. Questions about the triangle-breakout strategy

Must both contacts be at exactly the same price?

No. This detector allows the stated tolerance between the confirmed highs or lows. The conservative outer value fixes horizontal B before the signal. It is not adjusted to a later wick or close. Contacts outside the tolerance reject the sequence rather than redefining the boundary.

Can the triangle be redrawn after a failed breakout?

Not within the same candidate. Both equations are fixed when the final pivot becomes available. A cancellation or failed first-quote attempt ends that opportunity. A new candidate needs a newly confirmed event and the latest eligible four-event sequence while flat, not a manual selection of older winning points.

What happens near the triangle’s apex?

The remaining-width check ends the opportunity before the opposite line reaches the horizontal boundary. The finite bar window may expire even earlier. A recognisable shape that breaks after those limits is not a late entry in this specification. Record it as an expired or invalidated candidate.

Does the sloping line become a trailing stop?

No. It only helps reject a candidate before entry. The actual trade keeps the declared rightmost-pivot stop, the risk-based target and the time exit. A trailing-line exit or a target based on initial triangle height would be a different hypothesis requiring a separate complete test.

12. Primary sources and declared scope

Primary references: IG Academy on ascending and descending triangles and breakout uncertainty; MetaQuotes on timeseries indexing, symbol, tick and volume properties, and market-order prices and stop restrictions. Checked 2026-10-19. The detector, tolerances, clocks, invalidation rules, fixed stop, execution policy and worked example are our educational construction. The sources do not prescribe these settings or validate profitability.

Forex and leveraged trading involve substantial risk. This article is educational and is not investment advice. Confirmation, stops and cost allowances do not guarantee fills, limited losses or profit. All prices, diagrams and numerical outcomes here are fictional conditional examples.