Every fair value gap in seven futures markets, 2019 to mid-2026 — 5,591,235 of them — against a matched control: the same size move, same time of day, no gap.
How each number was produced is below, with every table behind it.
The pattern: three candles where the first candle’s high sits below the third’s low, or the mirror of that. It counts only once the third candle closes.
Control A — a fake zone: same size, same distance from price, same time of day, different day. Control B — the same move with no gap: a real candle that moved as far, at the same time of day, without leaving a gap. Two controls built on different logic, the same answer everywhere.
A bug that finds nothing looks exactly like a concept that predicts nothing, so the detector was proved before any claim was tested. Planted gaps in synthetic charts are found exactly, with the right boundaries, and charts with none come back empty. An independently written second count matched to the gap: 230,666 bullish and 216,740 bearish on one-minute NQ. No measurement begins before a gap is complete.
For 120 random days every gap, trade and filter decision was rebuilt with all later price data deleted and had to come out identical — almost 10,000 decisions, zero differences. The newer respect and model tests have their own version: a genuine effect planted in synthetic prices is recovered, pure noise comes back empty, and 7,408 decisions rebuilt from data ending at the decision minute came out identical. The first version of that check missed a leak we planted on purpose, so we fixed the check until it caught it, then ran it for real.
Every test was written down, with the result we expected, before the data was touched, and 18 months of recent history was sealed off until the end. One control did change after an early look: the fake zones were moved onto real tick prices, because a zone sitting between ticks is harder for price to touch than a real gap edge. Every change of that kind made the test harder to pass, never easier — a gap now has to beat the fake zone both on and off the tick grid.
ATR — how far the market typically moves in one bar, its normal swing. Using it instead of dollars lets the Nasdaq and gold be measured on the same scale.
A point — one percentage point. If real gaps hold 51% of the time and the control holds 50%, the gap is ahead by one point.
R — one unit of what a trade risks. Risk $100 to make $200 and that is a 2R target; “−0.10R per trade” means each trade lost a tenth of what it risked, on average. It keeps big and small trades comparable.
In sample / out of sample — the study was built on 2019–2024 (in sample). Everything from January 2025 was locked away, untouched, until the end (out of sample). A result that only works on the data it was built from is not a result.
The bar — before looking at anything, we wrote down how big a difference would have to be to count: 2 percentage points. Anything smaller is too small to pay for the cost of trading, so it counts as no effect, however tidy it looks.
Costs — every trade here pays commission plus one tick of slippage on the way in and out. A tick is the smallest price step a market moves in, and slippage is getting filled slightly worse than you wanted, which is what happens in real trading.
Reading the tables — cells like 51.2% / 50.5% show the real gap first, then the matched control. If fair value gaps worked, the first number would be clearly bigger, and the “difference” column is the gap between them in percentage points.
Price comes back and touches the gap’s edge. Does it travel one ATR — the market’s normal swing — away from the gap before one ATR through it? A coin lands near 50%; the control shows what “half” is worth here. To count, a gap had to beat its control by 2 points in both periods.
| The race · 1 ATR away before 1 ATR through | In sample · 2019–24 | Difference | Out of sample · 2025–26 | Difference |
|---|---|---|---|---|
| Five-minute | 51.2% / 50.5% | +0.7 | 49.7% / 49.4% | +0.3 |
| Fifteen-minute | 51.4% / 50.3% | +1.1 | 50.5% / 49.2% | +1.3 |
| One-hour | 50.9% / 49.6% | +1.3 | 50.4% / 49.0% | +1.4 |
| Four-hour | 51.4% / 49.0% | +2.5 | 49.2% / 48.0% | +1.1 |
| Daily | 48.8% / 49.2% | −0.4 | 51.9% / 54.1% | −2.2 |
Gaps do hold a little better. On every chart from five-minute to four-hour they bounce about one point more often than their control, and the same thing showed up again out of sample — the daily is the one exception, where gaps come out slightly behind. The second control, the same move with no gap, agrees — its table is below. So the effect is real, and it is small: no timeframe cleared the 2-point bar, and one point is worth about two cents per dollar risked, before commission and slippage. From 575,415 touches down to 2,534 on the daily.
The second control, and the one used in the video: instead of a fake zone, a real candle that made the same size move at the same time of day but left no gap, so the candles overlap. Its own high or low is the level. Pooled over 2019–2026.
| Bounced 1 ATR before breaking 1 ATR | Real gap | Same move, no gap | Difference | Touches |
|---|---|---|---|---|
| Five-minute | 50.9% | 50.2% | +0.7 | 727,486 |
| Fifteen-minute | 51.2% | 50.0% | +1.2 | 235,935 |
| One-hour | 50.8% | 49.6% | +1.2 | 59,550 |
| Four-hour | 51.0% | 48.4% | +2.6 | 16,811 |
Two controls built on completely different logic, landing within a few tenths of each other on every timeframe. The four-hour row is the biggest gap-versus-control difference anywhere in the study at +2.6 — but it is also the thinnest, at 16,811 touches, and against the fake zone it shrank from +2.5 in sample to +1.1 out of sample.
The rule traders actually use is stricter, and it turns on the difference between a candle’s body and its wick: the body is where the price opened and closed, the wick is the thin line showing how far it poked beyond that before coming back. Under this rule a gap still counts as holding if price pokes through with a wick — it only fails if a candle closes its body past the far side of the gap. So: does price reach the target before that happens?
| Target before a body close through | In sample · 2019–24 | Difference | Out of sample · 2025–26 | Difference |
|---|---|---|---|---|
| Five-minute | 47.9% / 48.1% | −0.3 | 46.0% / 46.6% | −0.7 |
| Fifteen-minute | 46.9% / 47.1% | −0.2 | 46.1% / 45.9% | +0.2 |
| One-hour | 47.2% / 46.7% | +0.5 | 45.8% / 45.4% | +0.3 |
| Four-hour | 48.2% / 46.7% | +1.5 | 46.1% / 45.4% | +0.6 |
| Daily | 43.1% / 44.5% | −1.4 | 47.1% / 49.1% | −2.1 |
Under the definition used to decide whether a gap has held, there is no difference at all.
The four-hour row is the one place the in-sample data looked different: 51.4% against 49.0%, a 2.5-point edge. It was not one of the main tests, so we wrote it down as the single observation to check before opening the held-back data. Out of sample it shrank to 1.1 points, interval −1.5 to +3.9. It did not hold. Daily gaps show no respect at all.
People will tell you gaps only work in the right conditions. So we tested the conditions, and looked for where gaps work best. Every time price came back and reached a gap’s edge counts as one touch, and there were 1,022,971 of them on five-minute to one-hour charts. We split those touches by time of day, by whether it was price’s first visit back or its third, by how big the gap was, and by whether the move was with the trend or against it. We also checked the market, news days, how old the gap was, gaps sitting inside other gaps, what the previous day did, and the day of the week.
| Bounced 1 ATR before breaking 1 ATR | Real gap | Same move, no gap | Difference |
|---|---|---|---|
| Time of day | |||
| Asia | 51.0% | 50.2% | +0.8 |
| London | 51.1% | 50.3% | +0.8 |
| New York open | 48.5% | 47.3% | +1.2 |
| New York morning | 50.3% | 48.4% | +1.9 |
| Lunch | 51.8% | 51.0% | +0.8 |
| New York afternoon | 51.2% | 50.7% | +0.5 |
| Which visit back to the gap | |||
| First | 51.0% | 50.1% | +0.8 |
| Second | 49.3% | 48.8% | +0.5 |
| Third | 48.6% | 48.4% | +0.3 |
| Gap size | |||
| Small | 50.8% | 50.3% | +0.5 |
| Medium | 51.1% | 50.2% | +0.9 |
| Big | 51.0% | 50.0% | +1.1 |
| Trend on the higher timeframe | |||
| With the trend | 50.8% | 50.2% | +0.6 |
| Against the trend | 51.0% | 49.9% | +1.1 |
Gaps come out slightly ahead of the no-gap move in every single split — between +0.3 and +1.9 points. The best is the New York morning at +1.9, and it held there out of sample at +1.7: the largest conditional result on this page, and still under the 2-point bar. Note that gaps hold less often in those hours (50.3%) than at lunch (51.8%) — what changes is that levels with no gap break far more in a fast market. Nothing else moves the needle: a second or third visit is worse than the first, big gaps beat small ones by half a point, and trading against the trend beats trading with it by half a point. Of roughly 1,500 splits run in both periods, eight beat 2 points twice — about what luck produces.
Seventeen more ways of cutting the same touches, all against the no-gap control, five-minute to one-hour gaps pooled. The range covers every level inside that split — so “hour of the touch” means all 23 hours fell between those two numbers.
| What we split by | Splits | Difference range | Cleared 2 points in both periods |
|---|---|---|---|
| Hour of the touch | 23 | −1.8 to +2.0 | none |
| Market | 7 | +0.2 to +1.9 | none |
| Session of the touch | 7 | +0.2 to +1.9 | none |
| Session the gap formed in | 7 | +0.3 to +1.3 | none |
| Gap age | 5 | +0.6 to +2.2 | 1 — gaps 1–5 days old |
| Gap size | 5 | +0.4 to +1.2 | none |
| Size of the move that made it | 5 | +0.5 to +1.1 | none |
| Day of the week | 5 | +0.5 to +1.1 | none |
| Week of the month | 5 | +0.6 to +1.1 | none |
| Killzone | 4 | +0.5 to +1.7 | none |
| Higher-timeframe trend | 3 | +0.6 to +1.1 | none |
| What the previous day did | 3 | +0.7 to +1.3 | none |
| Volatility | 3 | +0.6 to +0.9 | none |
| Part of the month | 3 | +0.7 to +0.9 | none |
| Sitting inside a bigger gap | 2 | +0.7 to +0.9 | none |
| News day | 2 | +0.7 to +0.9 | none |
| Within 30 minutes of news | 2 | +0.8 to +1.4 | none |
91 splits. One cleared the bar twice: gaps between one and five days old, +2.1 in sample and +2.4 out of sample. That is the single best thing in this study, it was not something we predicted, and one hit out of ninety-one is roughly what chance hands you — so we are reporting it, not selling it. Every other split lands between +0.2 and +1.9, which is the same small edge the headline table shows, wherever you look.
| The race · session of the touch (ET) | In sample · 2019–24 | Difference | Out of sample · 2025–26 | Difference |
|---|---|---|---|---|
| Five-minute gaps | ||||
| Asia · 6pm–3am | 51.4% / 50.5% | +0.9 | 49.4% / 49.0% | +0.3 |
| London · 3am–8:30am | 51.4% / 51.0% | +0.4 | 49.8% / 49.8% | +0.1 |
| New York open · 9:30–10am | 48.5% / 47.2% | +1.3 | 47.1% / 46.7% | +0.5 |
| New York morning · 8:30–11am | 50.3% / 48.6% | +1.6 | 49.9% / 48.8% | +1.2 |
| Lunch · 12–1pm | 51.7% / 50.6% | +1.1 | 51.1% / 51.1% | +0.0 |
| Afternoon · 1:30–4pm | 51.2% / 51.3% | 0.0 | 50.6% / 50.3% | +0.2 |
| Fifteen-minute gaps | ||||
| Asia · 6pm–3am | 51.7% / 50.5% | +1.3 | 49.9% / 49.0% | +0.9 |
| London · 3am–8:30am | 51.8% / 51.1% | +0.7 | 50.8% / 49.5% | +1.3 |
| New York open · 9:30–10am | 49.5% / 47.3% | +2.3 | 49.2% / 47.1% | +2.1 |
| New York morning · 8:30–11am | 50.3% / 48.7% | +1.6 | 50.7% / 48.1% | +2.5 |
| Lunch · 12–1pm | 50.8% / 51.0% | −0.2 | 53.8% / 53.3% | +0.5 |
| Afternoon · 1:30–4pm | 51.3% / 50.9% | +0.4 | 50.0% / 49.0% | +1.0 |
The New York morning row excludes the 9:30–10am open. On the five-minute chart no session moves the answer.
A second or third touch is no better than the first. Gap size, news days, trading with or against the higher-timeframe trend, the prior day’s type and its volatility all leave the gap within a point or two of its control. The closest thing to a pattern is age: on fifteen-minute and one-hour charts, touches arriving more than an hour after the gap formed run one to three points ahead in both periods, while the far more common quick touches — two-thirds of all fifteen-minute touches — show under a point.
| The rest of the vocabulary | What it did |
|---|---|
| The 50% entry (“consequent encroachment”) | identical to the 25% or the 75% of the same gap, across 84 tests |
| Balanced price ranges | nothing |
| Volume imbalances | nothing |
| Liquidity voids | react 2 to 3 points worse than an ordinary gap, in all seven markets |
| New day / new week opening gaps | marginal, and only in gold and silver |
Two checks on the rig itself: re-running the headline under four different rules for overlapping gaps moves it by about half a point, and if you shuffle each day’s minute-by-minute price moves into a random order and re-find the gaps, gaps and controls score the same — exactly what should happen in a market where nothing real is going on. That is a check that our measuring equipment is not inventing effects.
Price fills a five-minute gap about 98% of the time. A plain line the same distance away, with no gap at all, is reached 98% of the time too — the gap wins by a tenth of a point at best across 575,000 gaps, and loses slightly in four of seven markets on one-hour charts.
Two catches. The near edge of a bullish gap is the low of the candle that made it, so a “tap of the gap” is usually price re-entering that candle — measured loosely, 99% of gaps fill. And bigger gaps stay open longer only because filling means travelling further: match the distance and a 19-point difference falls under 3.
| Five-minute gaps | Gap filled | Plain line reached | Difference |
|---|---|---|---|
| NQ — Nasdaq | 98.4% | 98.3% | +0.03% |
| ES — S&P 500 | 98.4% | 98.3% | +0.10% |
| YM — Dow | 98.6% | 98.5% | +0.09% |
| GC — Gold | 98.4% | 98.4% | −0.00% |
| SI — Silver | 98.4% | 98.4% | +0.01% |
| CL — Crude oil | 98.4% | 98.3% | +0.07% |
| RTY — Russell 2000 | 98.7% | 98.7% | +0.03% |
The fallback claim is patience: an unfilled gap may take days, but it gets filled in the end. Every gap and every fake zone was followed until price crossed all the way through.
| Share filled · in sample | One-hour · gap / zone | Four-hour · gap / zone | Daily · gap / zone |
|---|---|---|---|
| Same trading day | 62.7% / 62.8% | 41.5% / 42.1% | — |
| Within 5 days | 89.1% / 89.3% | 77.8% / 78.5% | 50.9% / 52.9% |
| Within 20 days | 94.3% / 94.5% | 88.1% / 88.6% | 72.5% / 73.3% |
| Within 60 days | 96.7% / 96.9% | 93.2% / 93.3% | 84.9% / 85.4% |
| By the end of the data | 98.6% / 98.6% | 96.9% / 96.9% | 92.7% / 92.5% |
At every deadline, on every timeframe, a gap and its fake zone fill at the same rate — none of the 48 in-sample comparisons cleared the 3-point bar. Out of sample the answer repeated with one exception in 42: daily gaps filled within 20 days more often than their fake zones, 73.7% against 67.3%, on 558 gaps, where in sample the same comparison pointed the other way.
At every moment in six years we took the nearest unfilled one-hour, four-hour, daily or weekly gap and asked whether price reaches it more often than the same distance the other way.
| Price reaches… | In sample · gap / other side | Out of sample · gap / other side | Verdict |
|---|---|---|---|
| One-hour gap · within 20 candles | 70.5% / 70.7% | 70.4% / 71.6% | no pull |
| Four-hour gap · within 20 candles | 72.2% / 72.8% | 72.7% / 72.2% | no pull |
| Daily gap · within 5 days | 50.9% / 52.4% | 43.1% / 46.7% | no sign of a pull |
| Weekly gap | too few candles | — | can’t tell |
We also raced them: the nearest unfilled gap on one side, empty space the same distance on the other, each race paired with the same race on a day with nothing on either side, so a market that was drifting upward cannot flatter a gap that happens to sit above. No timeframe won, in either period. Across hundreds of thousands of races, any pull is smaller than 2 points.
| Touched first | In sample · 2019–24 | Difference | Out of sample · 2025–26 | Difference |
|---|---|---|---|---|
| The clean race — nothing else nearby on either side | ||||
| One-hour gaps | 47.8% / 49.0% | −1.3 | 45.7% / 50.4% | −4.7 |
| Four-hour gaps | 50.0% / 49.2% | +0.7 | 40.7% / 52.0% | −11.3 |
| Daily gaps | 48.0% / 48.4% | −0.4 | 40.4% / 48.5% | −8.1 |
| Weekly gaps | 48.7% / 50.9% | −2.2 | too few races | — |
| Every moment — no emptiness requirement, far more races | ||||
| One-hour gaps | 48.6% / 49.5% | −0.9 | 48.2% / 48.9% | −0.7 |
| Four-hour gaps | 48.4% / 49.4% | −1.0 | 49.9% / 48.8% | +1.2 |
| Daily gaps | 48.6% / 49.2% | −0.6 | 47.7% / 47.2% | +0.5 |
| Weekly gaps | 51.9% / 49.1% | +2.7 | 39.9% / 48.7% | −8.8 |
Out of sample the four-hour gap actually lost the clean race more often than its empty race, 40.7% against 52.0%, too large to be chance — but in sample the same race was dead even, so we do not claim gaps push price away either. Two further versions, one race per gap and an uneven race with the empty level twice as far, agree. The clean race ran 30,970 times on one-hour gaps, 16,903 on four-hour, 6,064 on daily and 1,510 on weekly in sample. Splitting it by distance, direction, size, age, nesting, trend, session and market produced no slice where the gap won in both periods.
Worth knowing when someone points at a nearby gap: on a five-minute chart there are typically three live unfilled gaps within a single ATR of price, covering more than half that range, and a gap is within reach essentially 100% of the time. Between 23% of five-minute gaps and 76% of one-hour gaps sit on top of a level traders already watch — the previous day’s high or low, the session open, the overnight extreme, VWAP.
Gaps are rarely traded alone. The model: price sweeps an obvious high or low, structure breaks the other way, and the move that breaks it leaves a gap you enter on the way back. Two questions — does that gap hold better, and does the model make money?
| Wins the race at the first touch · 2019–2026 | Gap after a sweep + shift | Any other gap | Difference |
|---|---|---|---|
| One-minute entry chart | 48.8% | 47.0% | +1.8 |
| Five-minute entry chart | 50.4% | 50.7% | −0.3 |
| Fifteen-minute entry chart | 51.6% | 51.1% | +0.5 |
Context does not make a gap hold better. Measured from the first touch after the setup completes — the first moment it is knowable — the five- and fifteen-minute differences are chance: their ranges run −1.0 to +0.4 and −0.6 to +1.5. One-minute gaps win by 1.8 points in both periods, on a chart where gaps hold under half the time either way. 75,074 gaps in context against 4.4 million ordinary ones — and gaps in context are bigger, which favours them.
Then the model itself, traded properly: stop just past the swept high or low, target twice what the trade risks, commission and slippage charged both ways, one setup per market per day.
| 2R target · near-edge entry · all day | In sample · trades | In sample · win rate | In sample · per trade | Out of sample · trades | Out of sample · win rate | Out of sample · per trade |
|---|---|---|---|---|---|---|
| Fifteen-minute | 3,523 | 41.9% | −0.04R | 810 | 40.6% | −0.03R |
| Five-minute | 4,840 | 37.1% | −0.10R | 1,130 | 36.3% | −0.09R |
| One-minute | 6,318 | 34.6% | −0.20R | 1,542 | 35.1% | −0.13R |
Every version loses money, in and out of sample. A 2R target needs a third of trades to win just to break even before costs; this wins 34–43%. All 120 versions lose after costs. The best — fifteen-minute, New York morning, aiming for three times the risk — lost 0.01R per trade over 1,115 trades, which is what trying 120 things produces by luck.
The model in full: sweep a level that already exists (Asia or London session high or low once that session has closed, the previous day’s high or low, a one-hour or four-hour swing); within two hours a candle on the entry chart closes beyond the most recent opposite swing; a gap forms in the new direction and a limit rests at its near edge or its 50%. Stop beyond the sweep or beyond the gap’s far edge; target 1R, 2R, 3R, the next untouched liquidity level, or hold to 3:55pm ET; entry charts of 1, 5 and 15 minutes; all day or New York morning only.
| 2R target · stop beyond the sweep | In sample · trades | In sample · win rate | In sample · per trade | Out of sample · trades | Out of sample · win rate | Out of sample · per trade |
|---|---|---|---|---|---|---|
| Fifteen-minute entry chart | ||||||
| Near edge · all day | 3,523 | 41.9% | −0.04R | 810 | 40.6% | −0.03R |
| Near edge · NY morning | 1,832 | 43.4% | −0.02R | 402 | 41.5% | −0.01R |
| 50% · all day | 2,349 | 39.8% | −0.06R | 524 | 38.5% | −0.08R |
| 50% · NY morning | 1,115 | 41.1% | −0.02R | 227 | 37.0% | −0.10R |
| Five-minute entry chart | ||||||
| Near edge · all day | 4,840 | 37.1% | −0.10R | 1,130 | 36.3% | −0.09R |
| Near edge · NY morning | 2,894 | 36.8% | −0.11R | 703 | 38.3% | −0.05R |
| 50% · all day | 3,374 | 37.2% | −0.09R | 761 | 34.7% | −0.14R |
| 50% · NY morning | 1,908 | 35.4% | −0.13R | 464 | 36.0% | −0.09R |
| One-minute entry chart | ||||||
| Near edge · all day | 6,318 | 34.6% | −0.20R | 1,542 | 35.1% | −0.13R |
| Near edge · NY morning | 3,817 | 35.0% | −0.17R | 916 | 35.2% | −0.10R |
| 50% · all day | 4,711 | 33.5% | −0.24R | 1,161 | 35.6% | −0.11R |
| 50% · NY morning | 2,887 | 33.7% | −0.21R | 682 | 36.2% | −0.07R |
Twelve out of twelve lose, in both periods. Out of sample 10 of the 120 versions came out slightly positive, all on the fifteen-minute chart, all but one by less than a tenth of R per trade, and none met the rules set in advance.
Take the gap away. A model can lose money while one part still does real work, so the same sweep and shift was traded with no gap, entered at the same depth of the move. Setups with no gap come from smaller moves, so a fixed tick of slippage eats more of each R — the two are compared only within groups whose moves were the same size.
| With the gap minus without · 2R, sweep stop, all day | In sample · per trade | Out of sample · per trade |
|---|---|---|
| Fifteen-minute · near edge | −0.01R (−0.12 to +0.10) | +0.03R (−0.18 to +0.24) |
| Fifteen-minute · 50% | −0.02R (−0.12 to +0.10) | −0.06R (−0.30 to +0.15) |
| Five-minute · near edge | +0.06R (−0.06 to +0.17) | −0.14R (−0.43 to +0.14) |
| Five-minute · 50% | +0.05R (−0.07 to +0.17) | −0.13R (−0.41 to +0.17) |
| One-minute · near edge | +0.09R (−0.06 to +0.24) | +0.20R (−0.22 to +0.40) |
| One-minute · 50% | +0.09R (−0.09 to +0.27) | +0.10R (−0.17 to +0.40) |
Every range includes zero, on every entry chart, in both periods, and so does every New York morning version before and after costs. Out of sample the gap version came out behind on half the rows. Entering at the gap did beat entering blindly at the halfway point of the move — but the no-gap version entered at the same depth did just as well, so what matters is where you enter, not the gap. A break of structure plus a gap with no sweep lost on every version with enough trades to read, and trading the model backwards lost too.
Four fixes made before the full run. A first pass on NQ alone showed the gap version beating the no-gap version by 0.2 to 0.45R per trade. None of it was the gap: the no-gap setups had smaller moves, so costs weighed more heavily; their orders could fill during the two candles before anyone could know no gap would form; the backtest filled orders at stale prices when price had already run past the level; and a target could use a liquidity level before it had finished forming. All four are fixed, and the pass rule was tightened — the gap had to beat the no-gap version both before and after costs.
The study was built on 2019–2024. Everything from January 2025 was sealed off — never loaded, never examined — then opened once for 2,356 tests, every one written before anyone saw that data, on 1.2 million more gaps. Everything that failed before failed again: the bounce edge about a point, the four-hour standout down to 1.1, the model still losing, no gap winning the race against empty space. The few splits that did beat the bar pointed in both directions at once.
| Re-run out of sample | Tests | Edges found |
|---|---|---|
| Price respects the gap — both definitions, every timeframe and condition | 1,489 | 0 of the 6 main tests; the four-hour standout did not hold |
| Gaps fill more than a plain line | 120 | 0 |
| Fills by deadline, and magnet reach | 109 | no pull; one daily fill result, on 558 gaps |
| The race: gap versus empty space | 78 | 0 of the 3 main tests; the four-hour gap lost more often |
| Sweep, shift and gap model, with its comparisons | 120 | 0 pass; all 12 main versions lose |
| “Take the right ones” — size, displacement, session, killzone | 150 | 0 that survive; the two strongest go the wrong way |
| The 50% entry, volume imbalance, fast fills | 80 | 0 that survive |
| Reaction size, liquidity voids, balanced ranges | 96 | voids react worse again |
| Magnets, gaps on ordinary levels, overlap and shuffle checks | 114 | no pull; the few hits point both ways |
Fair value gaps are not nothing. Price holds at them about one percentage point more often than at a matched move with no gap — on every chart from five-minute to four-hour, and it repeated on the 18 months we had never looked at (the daily is the one exception, and it goes the other way). Across 5.6 million gaps, that is a real effect.
It is also worth about two cents per dollar risked, before commission and slippage take their share. And every larger claim built on top of it failed: gaps fill no more often than a plain line, they pull price toward them on no timeframe, they hold no better after a liquidity sweep and a break of structure, and all 120 versions of that model lose money after costs.
A gap marks something real about how price moved. It does not tell you where price goes next.
← Back to all studiesThe same brutal test — matched controls, real costs, one honest out-of-sample shot — applied to what we sell: edges that survive it, on your TradingView charts.
View our strategies