"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 tested | Configs | Trades | Net (pips) | Per trade | Win rate |
|---|---|---|---|---|---|
| Retracement into a 3-bar price gap (imbalance) | 56 | 161,978 | -395,711 | -2.44 | 25.9% |
| Retest of the last opposing candle before an impulse | 56 | 267,058 | -652,594 | -2.44 | 28.7% |
| Reversal after a temporary break of the prior-day / session extreme | 80 | 490,314 | -884,169 | -1.80 | 30.6% |
| A setup restricted to one specific hour (session window + stop-run + gap) | 48 | 5,310 | -12,244 | -2.31 | 35.9% |
| Structure shift (pullback after a close through the last swing) | 56 | 44,110 | -111,153 | -2.52 | 32.2% |
| Fading the first move of a session as a false break | 32 | 26,780 | -63,540 | -2.37 | 28.2% |
| Total | 328 | 995,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.
| Logic | Trades | Measured win rate | Random entry, same exits | Difference |
|---|---|---|---|---|
| price gap | 80,989 | 28.8% | 31.9% | -3.1pt |
| last opposing candle | 133,529 | 31.8% | 31.9% | -0.2pt |
| stop-run reversal | 245,157 | 33.6% | 32.2% | +1.4pt |
| one-hour window setup | 2,655 | 38.2% | 31.6% | +6.6pt |
| structure shift | 22,055 | 34.6% | 31.9% | +2.7pt |
| session-open fade | 13,390 | 31.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) | Trades | Fill-bar TP allowed: net | win rate | Correct handling: net | win rate |
|---|---|---|---|---|---|
| USDJPY | 5,976 | +5,069 pips | 42.7% | -12,216 pips | 29.1% |
| EURUSD | 5,721 | +4,500 pips | 42.4% | -10,572 pips | 28.9% |
| EURJPY | 6,573 | +7,698 pips | 42.8% | -14,514 pips | 29.2% |
| GBPUSD | 6,190 | +6,118 pips | 42.2% | -12,511 pips | 29.0% |
| XAUUSD | 2,621 | +5,384 pips | 42.9% | -2,100 pips | 30.3% |
| US30 | 1,783 | +1,087 pips | 40.1% | -2,271 pips | 28.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.
| Instrument | Trades compared | Same verdict | Overturned by 1-min data | Opposite direction | Mean difference |
|---|---|---|---|---|---|
| USDJPY | 2,268 | 93.3% | 120 | 0 | +0.97 pips |
| EURUSD | 1,802 | 93.6% | 90 | 0 | +0.74 pips |
| EURJPY | 2,266 | 94.1% | 101 | 0 | +1.07 pips |
| GBPUSD | 2,144 | 93.4% | 114 | 0 | +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 condition | Mean stop distance | Mean round-trip cost | Cost / risk | Net per trade |
|---|---|---|---|---|
| EURUSD M15, measured spread | 5.1 pips | 1.57 pips | 30.8% | -1.79 pips |
| EURJPY M15, measured spread | 6.0 pips | 3.60 pips | 60.4% | -4.19 pips |
| EURUSD H1, floor-spread assumption | 7.6 pips | 1.00 pips | 13.2% | -1.85 pips |
| Gold H1, floor-spread assumption | 8.2 pips | 0.50 pips | 6.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 multiplier | Instrument | Share wiped out | Median time to wipeout | Fastest 10% | Median ending balance |
|---|---|---|---|---|---|
| ×1.0 (no doubling) | USDJPY | 0.0% | — | — | $11,447 |
| ×1.0 (no doubling) | EURUSD | 0.0% | — | — | $12,092 |
| ×1.0 (no doubling) | GBPUSD | 0.0% | — | — | $11,001 |
| ×1.5 | USDJPY | 80.6% | 151 days | 30 days | $4,940 |
| ×1.5 | EURUSD | 68.3% | 317 days | 45 days | $5,270 |
| ×1.5 | GBPUSD | 90.5% | 178 days | 24 days | $4,777 |
| ×2.0 | USDJPY | 80.6% | 105 days | 20 days | $4,248 |
| ×2.0 | EURUSD | 84.1% | 225 days | 42 days | $6,159 |
| ×2.0 | GBPUSD | 90.5% | 122 days | 20 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).
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.
Related articles
Do Fibonacci + Elliott Wave + MACD + RSI Actually Win? 198,000 Backtests Across 38 Instruments
We tested the classic "combine four indicators for a high win rate" claim across 38 instruments, 3 timeframes and 2 brokers — 198,000 backtests. All 15 combinations came in under PF 1.0. We also show exactly where an "80% win rate" comes from.
Measured broker spreads 2026-W31 — logged hourly from our own MT5 accounts
Not a copy of published spread tables: 1,915 hourly bid/ask samples taken on our own accounts (XM (real money)) over 2026-07-24 → 2026-07-31, broken down by pair and by hour of day.
Welcome to Northmark: Your Independent Forex Broker Guide
Discover how Northmark helps traders worldwide find regulated forex brokers — independent reviews, comparisons and bonus offers in 11 languages.
