Strategies · intermediate · 9 min
Order Blocks
The order block is one of the most heavily marketed ideas in modern retail trading. The story goes like this: before a large institution can push price a long way in one direction, it has to accumulate a position, and the last candle against the eventual move — the final down candle before a sharp rally, or the final up candle before a sharp drop — marks where that accumulation happened. That candle's range becomes a zone. The claim is that when price later returns to the zone, the "unfilled institutional orders" there defend it, and it becomes a high-probability place to enter in the direction of the impulse.
It is a compelling narrative. This lesson keeps the useful part of it — a precise, observable pattern — and does the thing the courses selling it almost never do: turns it into a mechanical rule and runs it through Visor's robustness gates on real data.
The observable part
Strip away the story about institutions (which no retail chart can actually verify) and a clean, testable pattern remains:
- a candle that closes down (an opposing candle), immediately followed by
- a strong move up that breaks above that candle's high (the impulse).
That is something a chart either shows or does not. Whether unfilled institutional orders caused it is untestable from price alone — so we test only what we can see: does an up-impulse away from the last down candle predict further upside?
The mechanical rule we tested
The version baked below is deliberately simple and fully specified, so there is no room for hindsight:
- Entry: today closes above yesterday's high and yesterday was a down candle (
CLOSE > REF(HIGH, 1) AND REF(CLOSE, 1) < REF(OPEN, 1)). That is the impulse breaking away from the opposing candle — the order block "confirming." - Exit: a fixed 5% take-profit or 3% stop, whichever comes first.
Run on SPY, five years of daily bars. Load the exact configuration into the Strategy Editor at the end and run it yourself.
What this rule captures — and what it leaves for later. This is the impulse-continuation reading of the idea: "buy strength away from the last opposing candle." But the classic order-block entry is not the impulse itself — it is the return to the zone afterwards, the pullback back into the block. That version needs the strategy language to remember a specific price band across many bars and fire only when price re-enters it. The re-entry version is tested faithfully in its own section below, now that the DSL can express it.
The honest verdict
Here is the baked robustness report for this exact rule and window. Read How to read a robustness report if the four gates are unfamiliar.
Random control
Beat 80.2% of 500 randomly-timed versions of itself (real 53.54% vs random average 35.12%).
Out-of-sample
In-sample 28.07% · held-out 19.89%.
Significance
t = 1.671 against a 3.5 threshold.
Deflated Sharpe
0.9503 — Sharpe of 0.2438.
These checks describe how much of this backtest survives statistical scrutiny. Past simulated performance is not a guide to future results, and nothing here is a recommendation to trade.
This one is more interesting than a flat failure, because it fails in an instructive way. The rule traded 47 times and returned about +54% — a real, sizeable number, and it even held up out-of-sample (it made money on the back portion of the timeline it was not measured on). If you stopped reading the gates there, you would call it a winner.
The random control is where it comes apart. The engine re-ran the identical rule 500 times with its entry timing scrambled — same number of trades, same exit, same market, only the alignment to price destroyed. The real +54% beat only about 80% of those randomly-timed twins, short of the 95% bar, and roughly one in five scrambled versions did better. In plain terms: buying strength in a market that rose for five years made money, but the specific timing — "the last down candle before the break" — was not doing measurable work. A coin-flip on entry, holding for the same 5%/3% target, did nearly as well. The significance test agrees: t = 1.67, well under the |t| ≥ 3.5 multiple-testing threshold.
What to take from it
Order blocks are a genuinely useful vocabulary for describing where impulses begin — reading them is free and can sharpen how you see structure. But "useful for describing a chart" and "an edge you can trade" are different claims, and the second is the one being sold. On this window, the mechanical version cleared the bar that most beginners use (it beat zero, and it survived out-of-sample) yet still failed the one that matters: it could not out-time its own scrambled twin. That is exactly the trap the whole Strategies track is built to expose.
The faithful version — waiting for the pullback
The rule above buys the impulse. The version every course actually teaches waits for price to come back into the block and buys the pullback. Until now Visor could not test it, because doing so needs the strategy language to remember a price band across many bars and fire only when price returns to it — zone memory. The DSL now has that (ZONE_OB), so here is the faithful re-entry rule, on the same SPY window and the same 5%/3% exit, so the only thing that changes from the impulse version is when it enters:
- Detect: the last down candle before an up-impulse that breaks its high — its range becomes the block's zone.
- Enter: when price later trades back into that zone (the return), not when the impulse fires. A zone is remembered for 30 bars, is dropped if price closes clean through it, and is used at most once.
- Exit: the same fixed 5% take-profit or 3% stop.
Random control
Beat 16% of 500 randomly-timed versions of itself (real -0.45% vs random average 19.52%).
Out-of-sample
In-sample -9.23% · held-out 9.67%.
Significance
t = 0.097 against a 3.5 threshold.
Deflated Sharpe
0.5384 — Sharpe of 0.0162.
These checks describe how much of this backtest survives statistical scrutiny. Past simulated performance is not a guide to future results, and nothing here is a recommendation to trade.
This is the more damning result of the two. The faithful re-entry rule traded 36 times and returned about −0.45% — essentially nothing — over the same window where buying the impulse returned +54% and buy-and-hold returned +73%. Waiting for the pullback into the block did not sharpen the entry; it handed most of the move back.
The random control drives it home. The identical rule with its entry timing scrambled averaged +19.5% across 500 runs, and the real, carefully-timed version beat only about 16% of those twins. In plain terms: entering at a random moment and holding for the same 5%/3% target beat "wait for the return to the zone" roughly five times out of six. The significance test is unambiguous — t = 0.10 against a 3.5 bar — so across 36 trades the average result is indistinguishable from zero. The one gate it clears, out-of-sample, it clears only because it happened to lose over the first 70% of the timeline (−9%) and scrape a small gain over the last 30% (+10%): not evidence of an edge, just noise landing kindly. Fail — and for a sharper reason than the impulse version, which at least made money by being long. Here the precise entry the whole idea is sold on actively cost money.
The two readings of the same idea — buy the impulse, or wait for the return — are now tested identically, and the return-to-zone entry is the one the courses sell hardest. Being able to test it faithfully is the entire point of the new zone memory; the verdict it earns is the same honest answer the rest of this track gives. (The same zone-memory capability now makes the retrace entries of Fair Value Gaps and Supply and Demand Zones testable too — both have since been run through the gates, and both fail the same way.)
Try it yourself
Load this configuration into the Strategy Editor, run it, and open the Robustness tab.
What to read next
- Fair Value Gaps — the same "imbalance" family, tested the same way.
- The Random Control — why beating a scrambled version of yourself is the only test that counts.
- Supply and Demand Zones — the zone idea order blocks belong to.