Article contents
- Evidence and scope
- Illustration
- Process
- Define the impulse before choosing its anchor
- A reproducible anchor-selection algorithm
- Use volume as distinct, testable features
- Synthetic block creation and a losing retest
- First retest, invalidation and zone lifetime
- Does the anchor improve on a simple pullback zone?
- Common pitfalls
- Practical checklist
- Frequently asked questions
- Research sources
Evidence and scope
Original implementations offer different block definitions and body/full-range options. The following versioned proposal has not been shown to generate profitable returns.
Practical workflow
- Confirm BOS or MSSA structural event must already be known.
- Specify the impulseUse the fixed run and displacement definition.
- Select the anchorApply W and the body/full-range convention.
- Publish and auditRecord the timestamp and earlier retests.
- Trade or invalidateUse a separate entry model without moving the anchor.
Define the impulse before choosing its anchor
The phrase last bearish candle before a strong rally leaves two questions unresolved: how strong must the rally be, and when is it considered complete? Looking at the entire future move and then choosing the prettiest candle on its left creates an attractive zone without a feasible publication time.
The Order Blocks & Breaker Blocks tool offers body or full-candle zones [1], and the SMC implementation contains several structure and block types [2]. This article uses the full wick range of one anchor candle and publishes only after BOS or MSS is known. It does not infer the identity of traders from the candle’s location.
Wider zones make more returns count as successful touches but usually require wider protection. Narrow zones can appear attractive in reward/risk terms while becoming more sensitive to the spread. Neither touch rate nor bounce rate alone establishes which boundary convention is economically preferable.
A reproducible anchor-selection algorithm
At a confirmed bullish BOS/MSS close t, find the final consecutive run of bullish candles ending at t, limited to a proposed M=3 bars. A doji terminates the run. Let s be its start and require (C[t]−O[s])/A_ref≥1, where A_ref=ATR14[s−1]. Then select the last bearish candle within a proposed W=4 bars immediately before s. Without such a candle, do not create a block.
For anchor j, set zone=[L[j],H[j]], published_at=t and eligible_from=t+1. occurred_at=j records history only. Preserve the zone and A_ref. The bearish version reverses direction and searches for a bullish anchor before a bearish run. M, W and the one-ATR displacement are proposed research choices, not parameters attributed to the source author.
Freshness begins when price leaves the zone, including the interval before BOS publication. If a return occurred between departure and publication, store prepublication_retest=true. A first-touch version may exclude it. A newly drawn block is not automatically untouched.
Define a deterministic response when the bullish run is longer than M. This baseline evaluates the final M candles rather than extending the run indefinitely until it meets the displacement requirement. Store the chosen s and j, so a later replay can reproduce the selection instead of searching the full future impulse again.
on_confirmed_bullish_structure_break(t):
s = start_of_final_bullish_run(t,max_bars=3)
if s is None or not valid_history_before(s,lookback=4): return
A = ATR14[s-1]
if not finite_positive(A): return
if (C[t]-O[s])/A < 1: return
j = last_bearish_bar(s-4,s-1)
if j is None: return
zone = [L[j],H[j]]
publish(zone,original_bar=j,known_at=received_close_time(t),
eligible=t+1,A_ref=A,
prior_retests=count_since_departure(zone,j,t))
Use volume as distinct, testable features
Measure anchor volume, impulse volume and return volume separately. Heavy anchor volume does not automatically create a better block: the candle may reflect distribution or two-way trading. Compare otherwise identical BOS-confirmed blocks with and without an RVOL filter.
If return volume is lower than impulse volume, control for duration and time of day. Comparing a three-bar impulse with a one-bar retracement using raw totals mechanically favors the smaller window. Also measure the spread when price revisits the zone; a narrow block may leave too little room to pay transaction costs.
An FVG within the impulse is another feature. FVG, displacement and BOS may all be produced by the same strong candle, so assigning three arbitrary confidence points can exaggerate independent support. Keep their common event lineage and add each condition separately in the experiment.
Synthetic block creation and a losing retest
A synthetic bearish anchor j has O=100.80, H=101, L=100 and C=100.20. The following bullish run reaches a close of 103.50 and crosses a previously known swing at 103; ATR before the run is 1. The bullish block is[100,101], midpoint 100.50, and becomes available only at the BOS close.
A later retest reaches 100.40 and closes 101.20, satisfying a proposed rejection above the upper edge plus b=0.10. A buy filled at 101.25, stop 99.90 and target 103.95 has risk 1.35 and reward 2.70, or 2R before costs. A midpoint-limit entry at 100.50 is legitimate only if the order existed before the return and the fill model permits execution.
In a failure path, the return reaches 99.70 and closes 99.80. The confirmation version does not enter. The already resting midpoint limit may have filled and then exited at 99.88, losing 0.62 from 100.50. Do not replace the anchor with an older candle whose low was 99.50 to make the failed trade appear structurally valid. If j originally lay outside W=4, no block should have been created in the first place.
First retest, invalidation and zone lifetime
A proposed baseline allows 30 bars after publication and only the first eligible retest, followed by a close above zone_high+b. Cancel before entry if price closes below zone_low−b, a separately defined major structure condition fails, or the candidate expires. For an existing limit, process fills during its lifetime before any cancellation decided at the bar close.
A stop outside the zone and a stop outside the larger swing are different risk policies. Size from actual entry, the stop distance and the instrument’s value per price unit. A predetermined spread-to-risk limit can reject an entry; it cannot be chosen after inspecting which trades lost. Exchange order documentation helps define the execution layer [3].
When a block fails, preserve its FAILED record. A later breaker is a new candidate carrying parent_ob_id, not a rewrite that converts the old loss into a successful zone. Retain every touch so first- and second-touch hypotheses can be compared.
If several anchors qualify across overlapping timeframes, do not automatically stack the positions. The same impulse may have produced all of them. A portfolio rule should select one trade or share a fixed event budget, with the rejected alternatives retained for research rather than silently discarded.
Does the anchor improve on a simple pullback zone?
Useful controls include a different pre-impulse candle or a fixed-percentage retracement zone from the same move. Match width, distance, age and trend. If the apparent advantage comes only from placing the entry closer to price, that is different from evidence for a special institutional-inventory mechanism.
Prefix replay must show the zone appearing only at publication. Preserve failed blocks instead of reading only those still displayed on the final chart. Report block count, retest frequency, no-fill rate, net expectancy, drawdown and costs in R.
Test nearby M/W values, body versus wick boundaries and TTL on new data. Include prepublication-touched blocks as their own group to measure the cost of freshness selection. Searching hundreds of anchor rules and displaying one convincing chart does not validate the broader method.
Common pitfalls
Every candle becomes an order block
Without an impulse and structure-break context, the detector is insufficiently specific.
Changing the anchor after a stop
This removes losing samples and introduces zone-level survivorship bias.
Assuming newly drawn means untouched
Freshness must include the interval before publication.
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.
Frequently asked questions
Is an order block a bank’s resting limit order?
That cannot be established from candles. Here it is only a price zone selected by explicit rules.
Is the candle body better than the whole wick?
They change width, fills and protection. Compare them outside the development sample on the same opportunity set.
Research sources
Each source supports the definition or evidence described beside it. The pseudocode, synthetic examples and proposed parameters require separate validation.
- Order Blocks and Breaker BlocksLuxAlgo on TradingView. Read the original tool description, body/full-range options and polarity behavior. Checked: .
- Smart Money ConceptsLuxAlgo on TradingView. Read one implementation, not a universal market standard. Checked: .
- Futures Order TypesCME Group. Read order mechanics to distinguish detection from execution. 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