Article contents

Evidence and scope

The source indicator provides one BOS implementation, while platform and exchange documentation clarify timing and orders. The proposed rules have no verified profitability result here.

Data and marketsOHLC with consistent price adjustments, ticks and pivot scales. Volume is optional context; quote data is needed for stronger execution assumptions.
Research timeframesSeparate minor and major swing streams. A small-scale break against a larger trend does not automatically reverse the larger-scale structure.
Rising confirmed swings precede a close above 104, followed by an illustrative retest and continuation.Open full-size illustration
Synthetic event-price sequence of higher highs/lows followed by BOS. It is not a complete candle series or a backtest. Points are selected event landmarks, not consecutive bars or equal elapsed-time intervals.

Practical workflow

Workflow for Break of structure: a confirmed continuation event with explicit swing timing
The full steps appear below. At each stage, missing data or failed conditions require a recorded rejection reason.
  1. Confirm the prior trendUse eligible higher highs/lows or lower highs/lows.
  2. Freeze the referenceSnapshot an unbroken swing before the current bar.
  3. Confirm the close-breakApply the fixed buffer and mark the level broken.
  4. Evaluate optional filtersKeep displacement and RVOL experiments separate.
  5. Execute the selected entryImmediate and retest entries retain distinct results.

BOS requires a trend that was already known

If confirmed highs are 100 then 104 and corresponding confirmed lows are 95 then 99, an uptrend can be defined by higher highs and higher lows. A later close above 104 is bullish BOS under this convention. In a range without an ordered swing sequence, the same close is a range breakout rather than trend continuation.

LuxAlgo distinguishes internal and swing structure [1]. Preserve that distinction in the data by assigning a scale_id to each fixed pivot configuration. A minor countertrend break is not sufficient evidence that the major trend has reversed.

The word unbroken matters. Once a swing high was crossed by a qualifying close yesterday, every higher close today must not emit another BOS against that same level. Store broken_level_id and group simultaneous breaks. Otherwise one sustained move can become dozens of apparently independent signals.

Snapshot structure before testing the current bar

Proposed pivots use three bars on each side, eps=max(2 ticks,0.15ATR) and b=max(2 ticks,0.10ATR). An uptrend requires both recent highs and both recent lows to increase by more than eps; a downtrend reverses those inequalities. Other configurations are mixed. The lengths and thresholds are research parameters.

At the start of bar t, snapshot the prior trend and latest eligible unbroken high. Bullish BOS requires prior_state=UPTREND, close[t]>high+b, and the preceding close not already above that threshold. ATR comes from t−1. Pivots confirmed at the close of t are appended only for decisions from t+1, so they cannot replace the level midway through the same processing cycle.

If several references break together, create one parent event with a list of crossed levels. Choosing the highest level in scope as the main reference is possible, but the policy must be stable. An expired level cannot be revived simply because a later chart makes it look important.

Define equality and ties in the underlying pivot engine. A flat double high might be one swing or several depending on tie handling. That choice affects the trend state and the next unbroken reference, so record it with the strategy version rather than treating it as a charting detail.

old = structure_snapshot_at_end(t-1)
A = ATR14[t-1]
if finite_positive(A) and old.trend == UPTREND:
  b = max(2*tick,0.10*A)
  h = old.last_eligible_unbroken_high
  if h is not None and C[t-1] <= h.price+b and C[t] > h.price+b:
    emit(BOS_UP,known_at=received_close_time(t),level_id=h.id)
    mark_broken(h.id)
append_pivots_confirmed_at(t,eligible_from=t+1)
# New pivots cannot replace the threshold inside this bar's decision.

Displacement and volume are separate feature families

A proposed bullish displacement filter requires body/ATR≥0.8, body/range≥0.6 and CLV≥0.75. Those numbers are optional experiments, not mandatory BOS definitions. An opening gap may close beyond the swing with a small candle body; retain a gap_break label instead of forcing it into a large-body condition.

Breakout RVOL asks whether activity is unusual for that time of day. Compare BOS with and without the filter on the same original break list. Large bodies and high volume often accompany one event and should not be counted as independent witnesses.

When volume is unreliable, the structure detector can still operate with volume_unavailable=true. Do not impute RVOL=1, because normal activity and unknown activity are different states. Preserve missingness in the report so a change of data provider cannot silently alter which setups are tradable.

Synthetic continuation and whipsaw examples

Assume confirmed highs of 100 and 104, lows of 95 and 99, ATR=2 and tick=0.05. Then b=0.20. The next candle has O=103.80, H=105.80, L=103.60 and C=105.50, exceeding 104.20. Its body is 1.70, or 0.85ATR; body/range is about 0.773 and CLV about 0.864. It passes the proposed displacement filter.

Suppose a separate minor pullback low at 103.40 was already confirmed before this BOS. A post-close fill at 105.60 with a trade stop there and target at 110 has risk 2.20 and reward 4.40, or 2R before costs. This stop is a known local trade reference, not a future retest low. A strategy waiting for a later retest must wait and calculate its own actual entry.

In a whipsaw path, price reverses from the qualifying close and protection fills at 103.35, losing 2.25. BOS remains a correctly labeled event while the continuation trade fails. A wick to 104.50 followed by a close at 103.90 never triggers this close-based version. A wick-based detector would require a separate specification and test.

A retest entry requires an actual retest

Maintain separate strategies for buying after the breakout close and buying after a later retest. A proposed retest window is K=6 bars, with the low touching a predefined zone around 104 and the close returning above 104+b. Submit only after its conditions become available. A direct run upward is no-fill for that version.

A stop beneath a retest low is usually closer than the protected structural low. A trade can stop out without ending the whole uptrend. Conversely, protection at a distant major low may leave insufficient reward to the next target. The BOS label does not choose position risk automatically.

Before entry, expiry or a sufficiently deep close back into the old range can cancel the waiting candidate under a predetermined rule. Once filled, protection follows the executable order type and market prices [3]. A later recovery cannot remove an earlier stop from the history.

Keep the total risk of overlapping minor and major BOS entries within one event budget. If both signals occur during the same impulse, their losses can be strongly correlated even when their formal swing IDs differ. Report incremental positions and exits instead of counting every label as a new independent trade.

Does BOS add information beyond being in an uptrend?

Compare uptrend periods with BOS against matched uptrend periods with similar volatility and distance from the high but no break. Comparing bullish BOS against the entire market can mostly measure the fact that an uptrend was selected.

First measure post-signal returns, then evaluate executable trading results. Report retest frequency, retest survival, entry delay, MAE/MFE, expectancy and latency sensitivity. Prefix replay, guided by information-timing principles [2], should prevent future pivots from changing old events.

Inspect nearby pivot lengths and buffers for stable results rather than optimizing one precise threshold. Group simultaneous events across scales when estimating uncertainty. Also retain periods where the trend state becomes mixed: excluding them after seeing unfavorable outcomes would make the continuation sample artificially clean.

Common pitfalls

Every new high becomes BOS

Without a defined prior trend, the event may only be a range breakout.

Using a future retest low

A breakout-close entry cannot borrow a stop identified afterward.

Many scales imply independent evidence

Several labels may describe the same impulse and correlated risk.

Checklist before using this method

Check each item after verifying it on your data. Progress is saved in this browser; it does not certify a profitable strategy.

0/7 items

Frequently asked questions

Does a wick beyond the swing count?

Not in this baseline, which requires a completed close. A wick-break rule is a separate detector.

Does a failed BOS trade mean the event was mislabeled?

No. An event can satisfy its definition while its continuation hypothesis loses after entry.

Research sources

Each source supports the definition or evidence described beside it. The pseudocode, synthetic examples and proposed parameters require separate validation.

  1. Smart Money ConceptsLuxAlgo on TradingView. Read the original description of one structure implementation. Checked: .
  2. RepaintingTradingView. Read technical guidance on information availability and repainting. Checked: .
  3. Futures Order TypesCME Group. Read order mechanics, not validation of the trading strategy. Checked: .

Related methods

Risk note

This content supports education and research design, not financial advice. Backtest is historical simulation, does not guarantee future performance and does not place real trades. Methods in this library are not automatically features available in the app. See methodology and learning center.

Validate rules before risking real capital

Check app support, data and individual simulated trades; advanced detectors may require a separate implementation.

Download Backtest on the App Store