"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 setups right now, usually 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.
What we tested
Anything that cannot be written as a rule cannot be tested, so we limited the scope to six machine-readable setups, defined in writing before the run. Targets were set at 2× and 3× the stop only. If the target is narrower than the stop, the win rate comes out high regardless of entry (random entries produced 66.3% in a separate test here), so that geometry cannot test the claim. With a target at twice the stop, breakeven is a 33.3% win rate; at the claimed 70–80% the profit factor would be 4–6. This design is as favourable to the claim as it reasonably gets.
Results
| Logic | 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 of the day | 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% |
| Trades | 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 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% interval of 39.5%–55.7%. 0 configurations have an upper bound reaching 70%. The gap cannot be explained by small samples.
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. Refining the entry barely moves the result. Two of the six come in below random.
| Logic | Trades | Win rate | Random entry, same exits | Diff |
|---|---|---|---|---|
| Retracement into a 3-bar price gap (imbalance) | 80,989 | 28.8% | 31.9% | -3.1pt |
| Retest of the last opposing candle before an impulse | 133,529 | 31.8% | 31.9% | -0.2pt |
| Reversal after a temporary break of the prior-day / session extreme | 245,157 | 33.6% | 32.2% | +1.4pt |
| A setup restricted to one specific hour of the day | 2,655 | 38.2% | 31.6% | +6.6pt |
| Structure shift: pullback after a close through the last swing | 22,055 | 34.6% | 31.9% | +2.7pt |
| Fading the first move of a session as a false break | 13,390 | 31.4% | 31.5% | -0.1pt |
The main finding: why these backtests look good
On the first run, all six instruments were profitable on hourly bars. 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 here enters with a limit order below the current price (for longs), which means that bar's high may have printed before the fill. 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 — it sits below the limit, so it can only be reached after the fill — and start checking the target from the next bar. Every instrument flipped from profit to loss.
| Instrument | Trades | Fill-bar TP allowed: Net (pips) | Win rate | Correct handling: Net (pips) | Win rate |
|---|---|---|---|---|---|
| USDJPY | 5,976 | +5,069 | 42.7% | -12,216 | 29.1% |
| EURUSD | 5,721 | +4,500 | 42.4% | -10,572 | 28.9% |
| EURJPY | 6,573 | +7,698 | 42.8% | -14,514 | 29.2% |
| GBPUSD | 6,190 | +6,118 | 42.2% | -12,511 | 29.0% |
| XAUUSD | 2,621 | +5,384 | 42.9% | -2,100 | 30.3% |
| US30 | 1,783 | +1,087 | 40.1% | -2,271 | 28.4% |
Checking that the fix is not too harsh
Refusing every target on the fill bar could be too conservative. So we used 1-minute data to find the exact minute of the fill and re-resolved every exit from there. Every disagreement ran the same way — hourly said "stopped out" where the minute data showed the target came first — with zero cases the other way. The corrected version is conservative by roughly one pip per trade, nowhere near enough to close the deficit.
| Instrument | Compared | Same verdict | Overturned by 1-min | Opposite direction | Mean diff |
|---|---|---|---|---|---|
| USDJPY | 2,268 | 93.3% | 120 | 0 | +0.97 |
| EURUSD | 1,802 | 93.6% | 90 | 0 | +0.74 |
| EURJPY | 2,266 | 94.1% | 101 | 0 | +1.07 |
| GBPUSD | 2,144 | 93.4% | 114 | 0 | +0.89 |
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. This is not about bad faith; it is a property of the tools. Results for any limit-entry setup are unreadable until you know how the fill bar was handled.
The cost structure
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 to 6% — and it is still negative. This is not "spreads are too high"; the expectancy before costs is already about zero.
| Condition | Mean stop distance | Round-trip cost | Cost / risk | Per trade |
|---|---|---|---|---|
| EURUSD M15 | 5.1 | 1.57 | 30.8% | -1.79 |
| EURJPY M15 | 6.0 | 3.60 | 60.4% | -4.19 |
| EURUSD H1 | 7.6 | 1.00 | 13.2% | -1.85 |
| XAUUSD H1 | 8.2 | 0.50 | 6.1% | -0.80 |
On averaging down with lot doubling (separate category)
Adding to a losing position and doubling the size must not be judged by win rate or profit factor — by construction it wins almost every time until it does not. The right measure is time to failure. Starting balance $10,000, liquidation below a 100% margin level, every possible start month. Doubling the lot size is what changes everything. Among start dates that were not liquidated the median ending balance is well above the starting capital, so a sample that looks like an excellent tool always exists. With a median time to failure of three to nine months, a few months of statements sits inside the survival window. Raising leverage barely changed the rate: the driver is the lot doubling.
| Lot multiplier | Instrument | Wiped out | Median time | Fastest 10% | Median ending balance |
|---|---|---|---|---|---|
| ×1.0 | USDJPY | 0.0% | — | — | $11,447 |
| ×1.0 | EURUSD | 0.0% | — | — | $12,092 |
| ×1.0 | GBPUSD | 0.0% | — | — | $11,001 |
| ×1.5 | USDJPY | 80.6% | 151 | 30 | $4,940 |
| ×1.5 | EURUSD | 68.3% | 317 | 45 | $5,270 |
| ×1.5 | GBPUSD | 90.5% | 178 | 24 | $4,777 |
| ×2.0 | USDJPY | 80.6% | 105 | 20 | $4,248 |
| ×2.0 | EURUSD | 84.1% | 225 | 42 | $6,159 |
| ×2.0 | GBPUSD | 90.5% | 122 | 20 | $4,887 |
What we could not test
Most publicly reported large gains are not described in a testable form. "Read the flow." "Enter when the order book tilts." None state which number has to reach what value before entering. You cannot claim to have tested what you cannot check, so those were excluded — and that exclusion is itself informative.
Summary
- No configuration met the pre-registered criteria.
- The 70–80% win rate could not be confirmed under these definitions, even allowing the widest statistical margin.
- 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.
- 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. The pre-aggregation data (CSV) and the harness design notes are also available. The conclusions, every configuration's result, the pass criteria and the reasons for failure are all published on this page. Nothing inconvenient sits behind the gate. It goes to readers who opened an account through this site (account-number match only; no email needed).
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. This is not investment advice. Make your own decisions.
Related articles
Does Buying High-Interest Currencies Actually Pay? 8 Currencies, 16 Years Tested
We tested buying the highest-yielding currencies and selling the lowest across 8 currencies and 193 monthly rebalances. Over 16 years it returned +82.0%, of which +44.6% came from interest. Here is why we still did not adopt it.
Do Grid Orders Across a Range Actually Work? 21 Pairs, 16 Years, Survival Tested
We tested evenly spaced limit orders with small take-profits and no stop-loss across 21 pairs. Without liquidation modelled, every pair profits. With it, survival splits 33%–100%. Here are the pairs that survived a shifted start date.
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.
