Northmark
Forex
14 min read

Do Order Blocks, Fair Value Gaps and Liquidity Sweeps Actually Work? 995,550 Trades Tested

We ran the six setups usually presented with a "70–80% win rate" over 995,550 trades with measured spreads, targets fixed at 2–3× the stop. Here is the outcome — and the specific reason these backtests look good.

Fact-checked · Last verified August 1, 2026

About the accuracy of information: The figures and regulatory information on this page were verified by the editorial team against each company's official website and the regulator's registry as of August 2026 update. Since bonus amounts, spreads, and regulatory status may change, our editorial team rechecks primary sources with each update. Read detailed disclaimer

Do Order Blocks, Fair Value Gaps and Liquidity Sweeps Actually Work? 995,550 Trades Tested

"Buy when price returns to the order block." "Enter as it fills the fair value gap." "Take the reversal after the prior-day low gets swept." These are the most widely shared trade setups right now, and they usually come with numbers attached: a 70–80% win rate at 1:2 reward-to-risk or better.

This is a record of testing that claim as logic, not as a person. We ran 328 configurations and 995,550 trades. This is not a rebuttal of anyone in particular. The same logic circulates under many different names, and most versions are not written in a form that can be checked at all — so we only tested the parts that could be defined in machine-readable terms.

What we tested, and how it was defined

Anything that cannot be written as a rule cannot be tested, so the scope was fixed to six setups. The definitions were written down before the run and were not changed afterwards.

  • Price gap — a 3-bar imbalance (high of bar 1 below the low of bar 3). Limit order at the midpoint; stop beyond the far edge of the gap.
  • Last opposing candle — the final counter-direction bar before a move that closes through the recent swing. Limit at that bar's extreme; stop beyond its other side.
  • Stop-run reversal — price trades through the prior-day (or Asian-session) low and closes back above it. Market order on the next bar; stop beyond the spike.
  • One-hour window setup — inside one specific hour only: a sweep of the preceding range, then a gap, then a retracement into that gap. Session hours are evaluated in New York local time with daylight saving handled.
  • Structure shift — after lower highs and lower lows, a close back above the last swing high. Limit into the gap created by that leg.
  • Session-open fade — treat the first 15 (or 30) minutes of a session as a false move and take the other side.

Targets were set at 2× and 3× the stop distance only. This matters. If the target is narrower than the stop, the win rate comes out high regardless of where you enter — in a separate test on this site, purely random entries produced a 66.3% win rate with that geometry. With a target at twice the stop, breakeven sits at a 33.3% win rate. If the claimed 70–80% were real, the profit factor would be 4–6 and impossible to miss. In other words, this design is as favourable to the claim as it can reasonably be.

Instruments: USD/JPY, EUR/USD, EUR/JPY and GBP/USD on 15-minute bars, plus gold and a US equity index on hourly bars. M15 covers 2021-05-17 to 2026-07-31; H1 goes back as far as 2001-06-03 to 2026-07-10. Spreads come from our own measured ledger, broken down by hour of day — not from advertised figures — and the full round trip is deducted from every trade.

Results

Logic testedConfigsTradesNet (pips)Per tradeWin rate
Retracement into a 3-bar price gap (imbalance)56161,978-395,711-2.4425.9%
Retest of the last opposing candle before an impulse56267,058-652,594-2.4428.7%
Reversal after a temporary break of the prior-day / session extreme80490,314-884,169-1.8030.6%
A setup restricted to one specific hour (session window + stop-run + gap)485,310-12,244-2.3135.9%
Structure shift (pullback after a close through the last swing)5644,110-111,153-2.5232.2%
Fading the first move of a session as a false break3226,780-63,540-2.3728.2%
Total328995,550-2,119,412-2.13

That is -2,119,412 pips in total, or -2.13 pips per trade. Configurations meeting every pre-registered criterion (sample size, profit factor, share of profitable years, multiple-testing correction, out-of-sample split, 2× cost stress): 0 out of 328.

What happened to the "70–80% win rate"

Of the 310 configurations with at least 80 trades, 0 had a win rate above 50% . The highest was 47.5% (143 trades), with a 95% confidence interval of 39.5%–55.7% . 0 configurations have an upper bound that reaches 70%.

So the gap cannot be explained by small samples. The win rate does not get near 70–80%. It is by design that the rate is lower here — the target is wider than the stop. The problem is that it lands below the 33.3% breakeven.

Compared with random entries using the same exits

If the entry logic carries information, it should beat entering at random. We matched the stop-distance distribution and the reward multiple, and randomised only the direction.

LogicTradesMeasured win rateRandom entry, same exitsDifference
price gap80,98928.8%31.9%-3.1pt
last opposing candle133,52931.8%31.9%-0.2pt
stop-run reversal245,15733.6%32.2%+1.4pt
one-hour window setup2,65538.2%31.6%+6.6pt
structure shift22,05534.6%31.9%+2.7pt
session-open fade13,39031.4%31.5%-0.1pt

Refining the entry barely moves the result. Two of the six come in below random. Only the one-hour window setup is visibly ahead, and it has far fewer trades and still ends up negative overall.

Splitting the sample in time

To evaluate the act of selection itself, we split each configuration 70/30 in time, picked the best performer in the first part, and checked it in the second.

9.8% of configurations were profitable out of sample (326 configurations). A coin flip gives 50%. Choosing on past performance made future performance worse.

The main finding: why these backtests look good

On the first run, all six instruments were profitable on hourly bars. Profit factors of 1.16–1.42, win rates around 42%, and the edge held up when the sample was split.

One line of code explained it.

The high of the bar on which the limit order filled was being used to check the target.

Every setup listed above enters with a limit order placed below the current price (for longs): the midpoint of the gap, the high of the opposing candle, the far side of the swept low.

Which means that bar's high may have printed before the fill. If price rallied first and only then came back down to the limit, that high belongs to a period when no position existed yet. Counting it as a target hit means taking profit at a price that occurred before entry.

The fix: on the fill bar, evaluate the stop only — the stop sits below the limit, so it can only be reached after the fill — and start checking the target from the next bar.

Instrument (H1)TradesFill-bar TP allowed: netwin rateCorrect handling: netwin rate
USDJPY5,976+5,069 pips42.7%-12,216 pips29.1%
EURUSD5,721+4,500 pips42.4%-10,572 pips28.9%
EURJPY6,573+7,698 pips42.8%-14,514 pips29.2%
GBPUSD6,190+6,118 pips42.2%-12,511 pips29.0%
XAUUSD2,621+5,384 pips42.9%-2,100 pips30.3%
US301,783+1,087 pips40.1%-2,271 pips28.4%

All 6 instruments flipped from profit to loss. Profit factors went from 1.16–1.42 to 0.68–0.86, and win rates from about 42% to about 29%.

That single line is the distance between "I backtested it and got a 70% win rate" and the actual result.

Checking that the fix is not too harsh

Refusing every target on the fill bar could be too conservative — some fills genuinely happen early in the bar and reach the target later within it.

So we used 1-minute data to find the exact minute of the fill and re-resolved every exit from there, then compared it to the hourly verdict.

InstrumentTrades comparedSame verdictOverturned by 1-min dataOpposite directionMean difference
USDJPY2,26893.3%1200+0.97 pips
EURUSD1,80293.6%900+0.74 pips
EURJPY2,26694.1%1010+1.07 pips
GBPUSD2,14493.4%1140+0.89 pips

Verdicts matched on 93.3%–94.1% of trades. Every disagreement ran in the same direction — hourly said "stopped out" where the minute data showed the target came first — and there were 0 cases the other way. The mean difference is 0.74–1.07 pips.

So the corrected version is conservative by roughly one pip per trade — nowhere near enough to close a deficit of 1.8 to 4.2 pips. The error is known in both direction and size.

Why this happens so widely

A single bar does not record whether the fill or the high came first. Charting-platform strategy testers, bar-level modes in trading terminals, and manual bar-by-bar replay all share that limitation. Logic that enters on limit orders is structurally exposed to it.

This is not about bad faith. It is a property of the tools. Which is why the result of any limit-entry test is unreadable until you know how the fill bar was handled.

The cost structure

The per-trade numbers show why nothing survives.

Test conditionMean stop distanceMean round-trip costCost / riskNet per trade
EURUSD M15, measured spread5.1 pips1.57 pips30.8%-1.79 pips
EURJPY M15, measured spread6.0 pips3.60 pips60.4%-4.19 pips
EURUSD H1, floor-spread assumption7.6 pips1.00 pips13.2%-1.85 pips
Gold H1, floor-spread assumption8.2 pips0.50 pips6.1%-0.80 pips

On 15-minute bars, costs eat 30–60% of the stop distance. Widening the stop on hourly bars and assuming the tightest possible spread brings that down to 6% — and it is still negative.

This is not "spreads are too high." It is that the expectancy before costs is already about zero. A separate test on this site, which stretched holding periods from hours to weeks specifically to dilute costs, reached the same conclusion.

"Maybe the implementation was too loose"

Loosely written conditions fire on almost every bar, which turns a test into a random number generator. To show that did not happen, we recorded how often each setup fired.

Configurations that produced zero trades: 0. (Logically contradictory conditions produce no signals at all, and it is easy to call that "tested".) Causality, daylight-saving handling and cost deduction are all checked mechanically by an automated test suite.

On averaging down with lot doubling (separate category)

Some tools are built to add to a losing position and double the size each time, so that a small retracement recovers everything. Win rate and profit factor are the wrong measures here — by construction, these win almost every time until they do not. The right measure is time to failure.

Starting balance $10,000, liquidation when the margin level falls below 100%, every possible start month tested:

Lot multiplierInstrumentShare wiped outMedian time to wipeoutFastest 10%Median ending balance
×1.0 (no doubling)USDJPY0.0%$11,447
×1.0 (no doubling)EURUSD0.0%$12,092
×1.0 (no doubling)GBPUSD0.0%$11,001
×1.5USDJPY80.6%151 days30 days$4,940
×1.5EURUSD68.3%317 days45 days$5,270
×1.5GBPUSD90.5%178 days24 days$4,777
×2.0USDJPY80.6%105 days20 days$4,248
×2.0EURUSD84.1%225 days42 days$6,159
×2.0GBPUSD90.5%122 days20 days$4,887

Doubling the lot size is what changes everything. At ×2.0, 80.6%–90.5% of start dates ended in liquidation, with a median of 105–225 days and the fastest 10% inside 20–42 days.

Without doubling, liquidation never occurred — but the median ending balance after 5.2 years was $11,001–$12,092, low single digits annually, and that figure excludes swap costs.

The number that matters most is what happens to the survivors. Among start dates that were not liquidated, the median ending balance is well above the starting capital. A sample that looks like an excellent tool always exists. And with a median time to failure of three to nine months, a few months of statements sits comfortably inside the survival window.

Raising leverage from 500× to 1000× barely changed the liquidation rate. The driver is the lot doubling, not the leverage.

What we could not test

One more thing surfaced while gathering material: most publicly reported large gains are not described in a testable form.

"Read the flow." "Enter when the order book tilts." "Set direction on the higher timeframe, then buy the pullback." None of these state which number has to reach what value before entering. Without a definition there is no way to check whether it works — and you cannot claim to have tested something you cannot check, so those were excluded.

That exclusion is itself informative. A procedure that cannot be reproduced gives a reader no way to know in advance whether they will get the same outcome.

Summary

  • 328 configurations, 995,550 trades, 0 meeting the pre-registered criteria.
  • The 70–80% win rate could not be confirmed under these definitions, even allowing the widest statistical margin (highest observed: 47.5%).
  • Refining the entry produced results close to random entries with the same exits.
  • The single largest reason these backtests look good is counting the fill bar's high as a target hit. Correcting it reverses the outcome.
  • Lot-doubling tools should be judged on time to liquidation, not win rate.

This article does not teach a winning method. It shares one way of checking. When you see results for a limit-entry setup, ask first how the fill bar was handled.


About the raw data

The tables above aggregate 328 configurations and 995,550 trades. The pre-aggregation data — one row per configuration — is also available.

What you get: trades, win rate, profit factor, per-year P/L and multiple-testing-corrected significance for every instrument × timeframe × logic × parameter set (CSV), plus the harness design notes (fill-order resolution, daylight-saving handling, cost deduction, the 1-minute reconciliation procedure).

This is not a trade record. The conclusions, all six results, the pass criteria and the reasons for failure are published in full on this page. Nothing inconvenient sits behind the gate — the result is a clean negative. The raw data is gated because it is the work that backs our testing.

It goes to readers who opened an account through this site (we only match your account number against our partner ledger; no email, no password).

How to receive it


This is a record of testing we ran ourselves. It is not an assessment of any individual, organisation or service. All figures are simulations on historical data and do not indicate future results. Trading can produce losses exceeding your deposit. Make your own decisions.

Tags
#forex#order-block#fair-value-gap#liquidity#backtest#verification#technical-analysis#martingale

Related articles