Article contents

Evidence and scope

Original indicator authors use different structure and protected-swing definitions. The article supplies one explicit research convention, without an independently verified profitability claim.

Data and marketsOHLC with versioned pivot scales and protected-swing selection. Aggressor delta is optional and requires a compatible trade feed.
Research timeframesKeep major and minor structure separate. An unfinished hourly signal cannot be used as a confirmed one-minute entry filter.
A downtrend establishes protected high 102, then closes against it at 102.40 and enters a reversal-pending state.Open full-size illustration
Synthetic prices. The high at 102 must be confirmed before bearish BOS to qualify as protected; no actual results are shown. Points are selected event landmarks, not consecutive bars or equal elapsed-time intervals.

Practical workflow

Workflow for CHoCH and market structure shift: selecting a protected swing causally
The full steps appear below. At each stage, missing data or failed conditions require a recorded rejection reason.
  1. Establish prior structureRequire a valid trend and eligible protected swing.
  2. Snapshot the old levelEvaluate the bar before appending newly confirmed pivots.
  3. Detect CHoCHRequire a close-break against the prior trend.
  4. Classify MSS separatelyApply the optional displacement thresholds to the same event.
  5. Wait for the next stateTrade the chosen entry and confirm a new trend independently.

From a countertrend break to a pending state

A downtrend contains lower highs and lower lows. A protected high is a level previously selected by the system to represent an important reaction. Closing above it challenges the bearish state, but one break does not automatically create the full sequence of higher highs and higher lows needed for an uptrend.

The SMC source distinguishes BOS and CHoCH [1], while the Protected Swings implementation uses its own context and confirmation levels [2]. Disagreement between two indicators therefore need not mean one calculation is wrong. Record the swing detector, protected-selection rule and close-versus-wick convention before comparing labels.

Here BOS follows the existing trend, CHoCH breaks against a protected swing, and MSS is a displacement-qualified CHoCH. If the prior state is mixed, ranging or lacks a valid protected swing, label the event range_structure_break or insufficient_context. Do not invent missing context merely to produce a familiar acronym.

Select the protected swing in chronological order

Proposed major pivots use three bars on either side and b=max(2 ticks,0.10ATR) from before the event. When bearish BOS breaks major low B, search for a major high that occurred after B and before BOS and was already confirmed before the BOS bar. Choose the latest candidate. Replace the old protected high only if the new one is lower by more than the predefined eps. If no candidate exists, retain the old reference; without an old reference, context remains insufficient.

The new protected level becomes eligible on the next bar. At the start of t, snapshot the level from t−1, evaluate its close-break, then update pivots or protection for future decisions. A high confirmed at the same close must not overwrite the earlier reference and erase an event that just occurred.

Bullish CHoCH requires prior downtrend, C[t−1]≤P+b and C[t]>P+b. Proposed MSS filters are body/ATR≥0.8, body/range≥0.6 and CLV≥0.75. These are research thresholds. After the event, set REVERSAL_PENDING_UP; require new higher-high/higher-low evidence on the same scale before promoting the state to uptrend.

Store protected_from_event and the selected pivot ID, not only its price. Two identical prices can refer to different structural histories. This lineage permits a replay audit to establish which low break authorized protection and why an otherwise nearby high was excluded.

old = snapshot(t-1)
if old.trend == DOWN and old.protected_high is not None:
  P = old.protected_high.price
  if C[t-1] <= P+b and C[t] > P+b:
    emit(CHOCH_UP, t, protected_id=old.protected_high.id)
    if displacement(t): emit(MSS_UP, same_event_id)
    trend = REVERSAL_PENDING_UP
update_future_state_only(pivots_confirmed_at=t)

Sweep, displacement and volume may share information

Requiring a preceding downside sweep creates an additional version. If the sweep, strong bullish candle and protected-high break all arise from one rebound, they are not three independent samples. Link them through event_group_id and measure each condition with ablation.

RVOL separates structural changes during ordinary activity from those during unusual activity. Increasing buy-aggressive delta after the low can add an observation when the feed supports it. A large bullish candle with heavy volume does not prove that every short position has closed.

Higher-timeframe confirmation is especially important. An hourly CHoCH that appears during the hour may disappear before its close. A one-minute entry cannot use the eventual hourly result while discarding the cases that failed to confirm. Test historical and real-time consistency explicitly [3].

Synthetic protected-high example and confirmation delay

Assume a downtrend with older high 108, later high 104, older low 100 and later low 96. After 96, a reaction high 102 is confirmed before bearish BOS reaches 95.20. The rule can then replace protected high 104 with 102 for future bars. With A=2 and b=0.20, a subsequent close at 102.40 triggers bullish CHoCH.

Suppose that candle has O=100.60, H=102.60 and L=100.40. The body is 1.80, the range 2.20 and CLV about 0.91, satisfying the proposed MSS filter. An entry at 102.50 with structural stop 95.00 and target 110 offers only 1R: both initial risk and reward are 7.50. A strong-looking shift does not solve the problem of entering far from the extreme.

In a losing path, price never establishes a higher low and returns to 95.00, with the stop filled at 94.90. The loss is 7.60. A retest strategy might use a closer trade stop, but cannot borrow a higher low confirmed only after this loss. If 102 had not been confirmed before the bearish BOS, protection would remain 104; the later 102.40 close must not be relabeled as CHoCH after the fact.

A protected swing is different from a trade stop

An entry may follow the MSS close or a later retest of the broken level within a proposed K=5 bars. For a retest entry, record the holding candle and the later executable fill. Do not enter at an earlier touch when a required closing condition was not yet known. No retest means no trade for that version.

Structural protection lies outside the relevant transition extreme. Trade protection may lie outside an already observed retest low. They answer different questions: a trade can stop out while the reversal-pending state survives, and the pending state can also fail before any entry qualifies.

End a pending event when its predefined opposite break or TTL occurs. Do not emit a new CHoCH each time price oscillates across the same level. Re-arm only after a new eligible structural state exists.

A useful implementation stores state transitions and order transitions in separate logs. That prevents a stop fill from silently rewriting the structural history, or a later state change from deleting a trade that was valid when entered. Every manual override should be a separate experiment rather than an undocumented correction.

Validate level selection before evaluating returns

Construct cases with an unconfirmed protected candidate, a bar that both breaches the old level and confirms a new pivot, a new high above the old high during a downtrend, and no replacement candidate. Prefix replay must preserve previously emitted event IDs and timestamps.

Compare CHoCH with a simpler countertrend break through a rolling high. If complicated protected-selection does not improve performance outside the development sample, its complexity has no demonstrated economic value. Evaluate CHoCH and MSS separately, with and without a preceding sweep, and by agreement or disagreement between major and minor scales.

Report delay from the extreme to the signal, reward remaining at actual entry, stop distance, regime counts and net results. Visual reversal accuracy is insufficient when entry occurs late. Include failed pending states and signals that never produce an executable retest; excluding them would hide the cost of waiting for confirmation.

Common pitfalls

One break proves reversal

A full new trend requires additional same-scale structure.

Overwriting the protected level during the bar

New pivot information must apply only to subsequent decisions.

Adding correlated confirmations

A sweep, displacement and MSS can describe one rebound and one risk exposure.

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

Are CHoCH and MSS universally defined?

No. Different implementations use different swing and confirmation conventions. This article states one version explicitly.

Can a trade stop while reversal-pending remains valid?

Yes. A local trade stop and the structural invalidation level can differ; keep their state changes separate.

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 one original implementation description, not a universal market standard. Checked: .
  2. Protected SwingsLuxAlgo on TradingView. Read the author’s protected-swing publication logic. Checked: .
  3. RepaintingTradingView. Read documentation on unconfirmed and historical data. 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