The tests that could have killed this product
Anyone selling market seasonality should be able to say what their data supports and what it does not. This page is that answer, run against our own published numbers rather than somebody else's — the three tests it started with, the category's four headline reports, a forward holdout, and the one chart every competitor leads with. Some of it came back in our favour. A good deal of it did not, and none of that has been removed.
What this page concludes
Every figure here is read from the test that produced it, so this panel cannot drift from the sections below.
What the data supports
- The hour-of-week grid is not data-mining — 187 significant buckets against 5.9 from noise §1
- It has not decayed — 70 significant buckets in the early era against 84 in the late one, at matched power §2
- The timetable survives a forward test — hours picked on pre-2020 data were still 1.81× the typical hour on 2020+, and 0.839 rank correlation even inside the busy band §13
- Selection survives a forward test — windows chosen on pre-2020 data beat unselected ones on 2020+ in both bands §8
- Sessions tell you when a market moves — the London/New York overlap moves 2.41× the typical hour, against 0.87× when no desk is open
- Scheduled news is bigger, reliably — the payrolls hour is larger than an ordinary Friday hour in 18 of 18 markets, past t ≥ 2 in 16
What it does not
- 7 of 19 markets show no demonstrable structure — four indices, both crypto, and UK100 which cannot produce one publishable bucket §1
- Direction barely survives out of sample — in ordinary hours, 0.54 points on 20,993 candles — z = 1.57, less than a round trip §8
- The largest surviving effect is not tradeable — about one pip at the New York close, smaller than the spread in 11 of 12 markets §9
- The famous reports do not survive matched controls — the weekend gap, yesterday's high, the opening range — and the day-of-month grid finds 0 of 285 slots §10
- A hot streak is drift, not memory — mean z 0.277 at lag 1 and 0.248 at lag 4, so it does not decay §4
Read together, the honest one-line version is that this archive is far better at when and how much than at which way. Timing and size clear their bars by a wide margin and repeat out of sample; direction clears them narrowly, in fewer markets, and mostly in the hours where the spread is widest. The product is built and priced around the first two, and this page exists so nobody has to take that on trust.
1. Is the grid data-mined?
The most damaging paper to a product like this one is Sullivan, Timmermann & White, Dangers of data mining: the case of calendar effects in stock returns (Journal of Econometrics, 2001). They built a large universe of calendar rules, applied White's Reality Check, and showed that calendar effects which look decisive alone are far weaker once you account for every rule that could have been tested. That is a precise description of what we do: we search a weekday × hour grid across 19 markets and publish the survivors.
So we built the null. It preserves each bucket's real sample size and each market's own overall up-rate, destroys only the weekday-hour structure — the one thing we claim exists — and draws 4,000 times.
That second constraint matters more than it looks, and it is also where we found an error in our own method. Every figure on this page is now measured against the market's own up-rate rather than a flat 50%. In FX the two are the same question: every baseline sits within a point of 50. In the equity indices they are not — NAS100 and SPX500 close up 52.3% of every hour they trade, so a bucket scored against 50 looks bullish because the index is. Asking instead whether an hour differs from that market's own average hour is the question this product actually promises to answer.
| Market | Buckets tested | Own up-rate | Found | Noise expects | p |
|---|---|---|---|---|---|
| EUR/USD | 121 | 50.1% | 13 | 0.3 | <0.00025 |
| GBP/USD | 121 | 49.9% | 10 | 0.3 | <0.00025 |
| USD/CHF | 120 | 49.9% | 16 | 0.3 | <0.00025 |
| USD/JPY | 121 | 50.7% | 11 | 0.3 | <0.00025 |
| AUD/USD | 121 | 50.1% | 13 | 0.3 | <0.00025 |
| USD/CAD | 121 | 49.8% | 17 | 0.3 | <0.00025 |
| NZD/USD | 121 | 50.0% | 13 | 0.3 | <0.00025 |
| EUR/JPY | 121 | 50.9% | 9 | 0.3 | <0.00025 |
| GBP/JPY | 120 | 51.2% | 8 | 0.3 | <0.00025 |
| EUR/GBP | 120 | 49.2% | 16 | 0.3 | <0.00025 |
| Gold (XAU/USD) | 120 | 51.0% | 20 | 0.3 | <0.00025 |
| Silver (XAG/USD) | 120 | 49.5% | 38 | 0.3 | <0.00025 |
The 7 markets we fail
Publishing only the first table would be the exact behaviour the paper warns about. Here is the rest of it.
| Market | Found | Noise expects | p | |
|---|---|---|---|---|
| BTC/USD | 2 | 0.4 | 0.0680 | fails |
| ETH/USD | 1 | 0.5 | 0.3673 | fails |
| US30 (Dow) | 0 | 0.3 | 1.0000 | fails |
| NAS100 | 0 | 0.3 | 1.0000 | fails |
| SPX500 | 0 | 0.3 | 1.0000 | fails |
| GER40 (DAX) | 0 | 0.3 | 1.0000 | fails |
| UK100 (FTSE) | not one bucket reaches our 300-sample minimum — largest 201 | cannot be tested | ||
Measured against their own baselines, not one of the four testable equity indices produces a single significant window. Not one. Every index row above reads zero, at p = 1.00.
Nothing marginal ever reaches our board
The same arithmetic runs in the opposite direction, and it is the plainest answer to why our numbers look boring next to a screener's. Our bar is |z| ≥ 3 on at least 300 samples, which fixes the smallest gap from its own baseline each market is capable of flagging at its median bucket:
| Market | Median bucket | Its average hour | Smallest gap we can flag |
|---|---|---|---|
| Gold (XAU/USD) | n = 1,212 | 51.0% | 4.3pp → 55.3% |
| USD/CAD | n = 1,191 | 49.8% | 4.3pp → 54.2% |
| EUR/USD | n = 1,187 | 50.1% | 4.4pp → 54.4% |
| AUD/USD | n = 1,154 | 50.1% | 4.4pp → 54.5% |
| EUR/JPY | n = 1,051 | 50.9% | 4.6pp → 55.5% |
| GBP/USD | n = 1,047 | 49.9% | 4.6pp → 54.6% |
| Silver (XAG/USD) | n = 1,041 | 49.5% | 4.6pp → 54.1% |
| NZD/USD | n = 1,039 | 50.0% | 4.7pp → 54.6% |
| USD/JPY | n = 918 | 50.7% | 5.0pp → 55.7% |
| GBP/JPY | n = 838 | 51.2% | 5.2pp → 56.3% |
| USD/CHF | n = 652 | 49.9% | 5.9pp → 55.8% |
| US30 (Dow) | n = 575 | 51.4% | 6.3pp → 57.7% |
| GER40 (DAX) | n = 539 | 51.4% | 6.5pp → 57.9% |
| EUR/GBP | n = 495 | 49.2% | 6.7pp → 56.0% |
| BTC/USD | n = 436 | 50.9% | 7.2pp → 58.1% |
| ETH/USD | n = 418 | 49.8% | 7.3pp → 57.2% |
| NAS100 | n = 348 | 52.3% | 8.0pp → 60.3% |
| SPX500 | n = 348 | 52.2% | 8.0pp → 60.2% |
| UK100 (FTSE) | — | 51.0% | 11.0pp → 62.1% |
UK100 (FTSE) cannot produce a single publishable number
We sell a market whose data cannot clear our own bar. Its largest weekday × hour bucket holds 201 samples against our 300 minimum, across 5 covered years. The dashboard already says so twice — the signals card reports that nothing clears the bar, and the tile reads "Years with data: 5" — but it belongs here too, stated plainly rather than left for a user to discover. This site does not offer 19 equally-supported markets. The FX majors and metals are where this dataset is strong.
2. Has the edge already decayed?
The literature is blunt about this. Schwert found the weekend, size and value effects weakening after the papers documenting them were published (NBER w9277); McLean & Pontiff tracked 97 anomalies and found systematic post-publication decay; Urquhart & McGroarty report that calendar anomalies have essentially gone since the 1980s. We publish one pooled number per bucket across 2003–2026, so an effect that died in 2015 would still show — and our sample-size column, the site's main honesty device, would make a dead edge look more trustworthy rather than less.
Split at 2014. First the harsh, selected question: of the buckets the product flags today, how many survive on the recent half alone?
The trap we nearly published
The same run reports that of the buckets significant in the first era, only 16% are still significant in the second. Read cold, that is a decay story. It is not one. Those buckets were selected on first-era data: any bucket near the boundary gets into that set only when first-era noise happens to favour it, so the set is guaranteed to regress whether or not anything changed. That is the winner's curse, not market efficiency. Reporting it as decay would have been a confident, well-presented, wrong finding.
The honest measure has to be unselected: take every bucket, measure how far its up-rate sits from its market’s own average hour, and compare eras. Counts need one more correction — the second era holds 24% more bars and so detects the same effect more easily, so its z is scaled by 0.899 before the two are compared.
| Market | 2003–2013 | 2014–2026 | Change | Significant, era 1 | Significant, era 2 |
|---|---|---|---|---|---|
| EUR/USD | 2.83pp | 2.85pp | 1% | 8 | 9 |
| GBP/USD | 2.50pp | 2.88pp | 15% | 3 | 10 |
| USD/JPY | 3.11pp | 2.55pp | -18% | 9 | 5 |
| AUD/USD | 3.02pp | 2.75pp | -9% | 14 | 8 |
| USD/CAD | 2.86pp | 2.76pp | -3% | 13 | 10 |
| NZD/USD | 3.11pp | 3.25pp | 4% | 11 | 8 |
| EUR/JPY | 2.45pp | 2.76pp | 13% | 1 | 9 |
| GBP/JPY | 2.61pp | 2.91pp | 11% | 2 | 9 |
| Gold (XAU/USD) | 2.88pp | 3.13pp | 9% | 9 | 16 |
| Silver (XAG/USD) | 5.81pp | 4.02pp | -31% | 33 | 18 |
| All ten | 3.12pp | 2.98pp | -4% | 103 | 102 |
| Excluding silver | 2.82pp | 2.87pp | 2% | 70 | 84 |
70 significant buckets in the first era against 84 in the second, out of 1,086 tested — measured without picking winners and with the power advantage removed. Across 23 years the two halves differ by 14 buckets, and the later half is the larger of the two. Whatever is in this grid did not fade after the papers were published.
Silver is our weakest data, and we would rather say it first
Silver is the one market of the ten that genuinely decays: 5.81pp to 4.02pp, and 33 significant buckets down to 18. On its own it turns a 2% ex-silver figure into -4% across all ten. Part of that is a data-quality artifact and the numbers say so: silver's mean absolute hourly move was 1.32% in 2003, 1.21% in 2004, 0.97% in 2005, against a median of 0.23% across every year since 2012. A 5-fold difference in a metal whose realised volatility was not 5 times higher then looks like the early feed, not the market. Silver's early-era buckets should not be trusted, and silver is the one symbol where our pooled number overstates what is live today.
Why we differ from the literature, without claiming to refute it
We are not measuring the same object. Those papers study day-of-year and day-of-month calendar anomalies in equity indices; we measure hour-of-week structure in FX. A January effect is a calendar quirk with no ongoing mechanism — once published, capital competes it away and it stays away. An hour-of-week effect is anchored to when desks are actually open: session opens, the liquidity cycle, the daily rollover. You cannot arbitrage away the fact that London and New York are both open at 14:00 UTC. That is a hypothesis consistent with our result, not something this test proves.
3. Does anything we found have a reason to exist?
The best-specified claim in trading folklore is month-end rebalancing: index trackers benchmarked to MSCI and the major bond indices must rebalance their currency hedges when equity values move, and they transact at the WM/Reuters fix on the last trading day of the month. It has what the weaker folklore lacks — a named mechanism, a precise time, and a prediction about which markets should respond.
The control is the same fix hour on every other trading day, not an ordinary hour: the fix is itself elevated, and measuring against ordinary hours would credit month-end with the fix's own effect. Significance is a Welch t on log|move|, because hourly ranges are right-skewed enough that a raw-magnitude test reports whichever group caught the biggest handful of hours.
| Market | Month-end fix vs ordinary fix | t | Direction (z) |
|---|---|---|---|
| USD/CHF | 148% | 4.57 ✓ | 2.37 |
| EUR/USD | 132% | 4.32 ✓ | -2.12 |
| AUD/USD | 133% | 4.18 ✓ | -1.35 |
| GBP/USD | 132% | 3.78 ✓ | -0.19 |
| USD/CAD | 126% | 3.31 ✓ | -0.09 |
| EUR/GBP | 141% | 3.13 ✓ | -1.82 |
| USD/JPY | 126% | 2.82 ✓ | 1.47 |
| NZD/USD | 117% | 1.99 | -0.67 |
| EUR/JPY | 115% | 1.73 | 0.03 |
| GBP/JPY | 113% | 1.44 | 0.52 |
| GER40 (DAX) | 110% | 0.68 | -0.22 |
| Silver (XAG/USD) | 105% | 0.62 | -0.39 |
| Gold (XAU/USD) | 97% | -0.42 | -1.48 |
| US30 (Dow) | 93% | -0.62 | 0.31 |
Read the bottom rows first. Every one of the 10 FX pairs leans positive and 7 clear t ≥ 2. Not one of the 4 non-FX markets clears the bar — the largest t among them is 0.68; Gold (XAU/USD), US30 (Dow) sit below their ordinary fix hour and GER40 (DAX), Silver (XAG/USD) sit within noise of theirs. That is the mechanism validating itself. Month-end rebalancing is currency-hedge rebalancing; it should flow through FX pairs and it should not touch gold or the equity indices themselves. It doesn't. A data-mined artifact would not respect an asset-class boundary. This is the strongest single piece of evidence we hold, and it comes from where the effect is absent.
The same shape, on the one scheduled event our data can locate
Most event studies need an economic calendar we do not hold — FOMC dates are not derivable from a clock. Non-farm payrolls is the exception: it is released on the first Friday of the month at 08:30 New York time, which is a rule rather than a calendar, so it can be found in 23 years of hourly bars without any outside data. Control, again, is the same hour on the other Fridays — not ordinary hours, which would credit the release with everything the New York morning does anyway.
| Market | Release hour vs other Fridays | t | Direction (z) |
|---|---|---|---|
| EUR/USD | 194% | 7.74 ✓ | -0.56 |
| USD/JPY | 202% | 6.62 ✓ | 0.18 |
| AUD/USD | 175% | 6.61 ✓ | 0.41 |
| NZD/USD | 182% | 6.39 ✓ | -1.47 |
| USD/CAD | 161% | 5.93 ✓ | -0.98 |
| GBP/USD | 171% | 5.85 ✓ | -0.64 |
| Gold (XAU/USD) | 165% | 5.58 ✓ | -1.11 |
| US30 (Dow) | 189% | 5.24 ✓ | 0.74 |
| EUR/JPY | 162% | 5.15 ✓ | 0.35 |
| GBP/JPY | 166% | 5.08 ✓ | 0.13 |
| USD/CHF | 173% | 4.94 ✓ | 1.15 |
| Silver (XAG/USD) | 141% | 3.98 ✓ | 0.11 |
| GER40 (DAX) | 135% | 2.53 ✓ | 0.96 |
| EUR/GBP | 133% | 2.31 ✓ | -0.35 |
| NAS100 | 145% | 2.02 ✓ | 0.58 |
| BTC/USD | 132% | 2.01 ✓ | 0.70 |
| SPX500 | 139% | 1.78 | -0.11 |
| ETH/USD | 125% | 1.61 | 1.00 |
Bigger in 18 of 18 markets, median 162% of an ordinary Friday's same hour, and EUR/USD nearly doubles at t = 7.7. Note that this one does appear in the indices — the Dow at 189%. That is not a contradiction of the result above: a payrolls release is not an hour-of-week claim. It is a fixed moment when everything moves, which is a different thing from a market keeping a weekly schedule.
4. Does a hot streak mean anything?
Every trading product in this category sells streaks, and Edgeful sells them by name: how often a thing happened three, four, five times running. "It has been hitting lately" is one of the most common reasons anyone takes a setup at all. We could have built that feature in an afternoon — a weekday × hour window is a clean weekly series, and ours run to about 1,180 consecutive observations each.
So we checked it first. For every window — not the interesting ones; testing the ones that already look strong is the selection error that makes any result inevitable — we split the observations by what the previous occurrence did, and compared the two up-rates.
| mean z across all 2221 windows | |
|---|---|
| After last week (lag 1) | 0.277 |
| After two weeks ago (lag 2) | 0.261 |
| After four weeks ago (lag 4) | 0.248 |
| Same data, order shuffled | -0.049 — the method returns nothing when there is nothing |
There is a signal, and it is not the one the feature would have sold. Lag 1 is 0.277; lag 4 is 0.248. If last week genuinely carried information about this week, the effect would decay as the gap widened. It does not decay at all — which means this is not memory of the previous occurrence. It is a slow drift in the window's own rate, the same thing our era test measures, and it makes any two nearby observations look alike no matter how far apart they sit in the sequence.
The size settles the rest. Across every window the gap between "up after up" and "up after down" averages 0.91 percentage points (median 0.76). Excluding silver, whose early data we already distrust, it is 0.7. A round trip costs more than that in every market we carry.
| Group | mean z | windows |
|---|---|---|
| FX Majors | 0.29 | 483 |
| FX Minors | 0.341 | 724 |
| Metals | 0.923 | 240 |
| Indices | 0.01 | 443 |
| Crypto | 0.009 | 331 |
5. Does the weekend gap fill?
Edgeful sells gap reports by name, and "the gap fills 90% of the time" may be the most repeated statistic in retail FX. It is true. It is also, on this data, worth nothing — because a move of the same size on an ordinary Tuesday fills just as often.
Every weekend since 2003 in 12 FX and metals markets — 11,773 of them — measured as: how far did the market open from Friday's close, and did price trade back through that close? Then the same question asked of size-matched midweek moves: an hour whose next hour travelled between 0.85× and 1.35× as far, measured from the bar after the move so the reference is not sitting inside it.
| Within | weekend gap fills | ordinary move of the same size fills |
|---|---|---|
| 4 hours | 75% | 70% |
| 24 hours | 89% | 88% |
Twenty-four hours in, the two are indistinguishable — 89% against 88%. The famous number is not describing the weekend at all; it is describing the fact that price wanders back past a level a few pips away. Inside four hours the gap is ahead by 5 points, which is the only part of the claim with anything in it, and it is small.
Then the cost arrives. The median gap is 6.86 pips and it has to be captured in the Sunday reopen — the widest-spread hour of the week and, as section 1 of this page says, the hour our own data flatters most. Each gap is charged the round trip of the reopen hour it actually landed in, measured from bid and ask minute candles (section 33) in the 10 currency pairs the minute archive holds, and an assumed 3× the weekday spread in the metals, which it does not. On that footing only 55% of gaps are even larger than the round trip needed to trade them. Until September 2026 this section charged every gap a flat 3× and printed 73%; the first reopen hour costs more than that in most pairs, and it is the hour most gaps open in.
6. Does yesterday's high or low matter?
The other report sold by name in this category, and one of the most traded ideas in retail FX: price takes out the previous day's high, and the break is treated as information. Two incompatible stories are told about it — that it runs, and that it fails and reverses — which is usually the sign that the event carries no information at all.
68,974 breaks across 19 markets. When price trades through yesterday's extreme, the day closes beyond it 50.4% of the time. Against a level the same distance from the same day's open that owes nothing to yesterday: 50.8%.
| closed beyond the level | |
|---|---|
| Yesterday’s high or low | 50.4% |
| A matched ordinary level | 50.8% |
So a break of yesterday's extreme is, if anything, slightly less likely to hold than a break of any level that far from the open — the direction the "liquidity sweep" story predicts, at a size nobody can trade: 0.4 points pooled across every break, and 0.6 in the median market, against a spread that costs several times either.
7. Does the opening range set the day?
The third report this category sells by name, and the most traded of them: mark the high and low of the first thirty minutes after the London open, and treat a break of that range as the day's direction. It needs finer bars than the rest of this page — an opening range belongs to a specific half hour — so it was measured on the 5-minute archive, four majors, 2015 to 2026, with the session resolved through the London clock each day so daylight saving cannot shift it.
The first thing the measurement says is that the signal is not a signal. Across the 7,811 sessions our archive holds the range was broken on 99.8–100% of days. Over the eight hours that follow, a thirty-minute range is always exceeded in one direction or the other; an event that happens every day cannot select anything.
| session closed beyond the level | |
|---|---|
| The opening range edge | 51.4% |
| A matched ordinary level | 51% |
And when it is broken, the session closes beyond that edge 51.4% of the time — against 51% for a level at a comparable distance from the same midpoint that has nothing to do with the open. Per market the gap runs from −0.6 to +0.5 points. The opening range is a line like any other line that far from the middle.
8. Chosen on one era, scored on another
Everything above is measured on the whole archive, which is exactly what a sceptic should not accept. Section 2 shows the grid survives being split in half — 70 significant buckets in the early era against 84 in the late one, unselected and at matched power, silver aside — but that is a statement about the grid. It cannot answer the question a buyer actually asks: take the windows we would have published back then, and see what they did afterwards.
So every window here is chosen using only candles from before 1 January 2020, by the same bar this site publishes — 300 candles and |z| ≥ 3 — and then scored using only candles from 2020 onward. 132 windows across 10 markets qualified. Markets whose history is too short to choose from do not appear at all, which is a coverage statement rather than a result.
The answer is not a number, it is a table. Every bucket is classed on two axes: did it clear the bar in the fit era, and does it sit in the band this site already flags — the Sunday reopen, or 20:00 UTC onward, which runs from the New York close through the daily rollover.
| Windows | Holdout candles | Edge | ||
|---|---|---|---|---|
| picked · thin band | 65 | 16,396 | +9.75 pts | z = 24.96 |
| picked · ordinary hours | 67 | 20,993 | +0.54 pts | z = 1.57 |
| not picked · thin band | 134 | 40,226 | +2.85 pts | z = 11.43 |
| not picked · ordinary hours | 933 | 283,595 | 0 pts | z = 0 |
"Edge" is the holdout up-rate minus that market's own holdout average, signed by the direction the fit era chose. Read the bottom row first: 0 points on 283,595 candles. That cell is the control. It has to read zero, and it does — which is what makes the three cells above it worth reading at all.
What the table says
Selection works. In both bands the windows that cleared the bar beat the ones that did not: 9.75 against 2.85 in the thin band, 0.54 against 0 in ordinary hours. Choosing on 17 years of data and then walking forward into 6 years that did not exist yet is a hard test, and the grid passes it.
| Hour (UTC) | Windows | Out-of-sample edge |
|---|---|---|
| Sun 22 | 3 | +19.0 pts |
| Sun 21 | 5 | +18.5 pts |
| 20 | 27 | +13.4 pts |
| 23 | 4 | +9.2 pts |
| 21 | 15 | +8.4 pts |
| 01 | 4 | +5.6 pts |
| 08 | 5 | -1.3 pts |
| 12 | 5 | -2.1 pts |
9. The largest surviving effect is one tick
Section 8 leaves a loose end, and it is the biggest single block of everything that survived: 20:00 UTC, 27 windows, +13.4 points out of sample. 20:00 UTC is the New York close — and the close is not a UTC hour. 16:00 in New York is 20:00 UTC under daylight time and 21:00 UTC under standard time, so on 65% of days it is one bucket and on 35% the other. Our grid, like every grid in this category, had been flagging the wrapper instead of the event.
Resolved through New York's own clock for every day in the archive, the effect gets stronger: out of sample it kept +20.57 points against +12 when pinned to 20:00 UTC. And it is not one market's quirk. All 12 markets that trade the whole clock close DOWN in that hour — USD pairs, crosses that share no currency with them, and both metals — 12 of them past our |z| ≥ 3 bar, the most extreme at z = -18.6.
An effect present in every instrument, in the same direction, at one named minute of the day, is not twelve pieces of evidence. It is one — and the obvious question is what it is worth.
| Market | Up-rate in that hour | z | Median move | Round trip | Lean ÷ cost |
|---|---|---|---|---|---|
| EUR/JPY | 47.3% | -4.92 | -0.4 | 1.5 | 0.21× |
| EUR/USD | 45.9% | -6.22 | -0.5 | 1 | 0.24× |
| GBP/JPY | 45.6% | -6.97 | -1 | 2 | 0.39× |
| Silver (XAG/USD) | 37.9% | -16.27 | -1.2 | 3 | 0.42× |
| Gold (XAU/USD) | 44.5% | -9.86 | -1.16 | 3 | 0.45× |
| USD/JPY | 46.6% | -5.27 | -0.4 | 1 | 0.52× |
| GBP/USD | 43.6% | -8.96 | -1 | 1.2 | 0.66× |
| NZD/USD | 39.5% | -14.91 | -1.3 | 1.8 | 0.69× |
| AUD/USD | 41.3% | -13.11 | -1 | 1.2 | 0.82× |
| EUR/GBP | 36.5% | -12.43 | -1 | 1.2 | 0.83× |
| USD/CAD | 40.7% | -13.85 | -1.5 | 1.5 | 0.99× |
| USD/CHF | 33.3% | -18.56 | -1.8 | 1.2 | 1.72× |
And that reading is now a measurement, for the ten FX pairs we hold minute data on. The hourly feed is bid-only; the minute archive (section 33) carries the ask too, so the clean test can be run: in the same hour, on the same days, does the ask fall as well? It does the opposite. The bid closes up in a median 42.55% of New York close hours and the ask in 62.3% — the bid below its own average past our bar in 10 of 10 pairs, the ask above its own in 10 of 10. Two quotes of one price moving apart in the same hour is the spread widening, not the price moving. The control is the hour three hours earlier, where nothing settles: there the ask and bid up-rates sit a median 0.7 points apart, against 18.2 at the close. The mid — halfway between — keeps no common direction at all: it leans up past the bar in 4 pairs, down in 2, and sits a median 52.1%, so the fall every market shares belongs to the bid alone. The two metals are not in the minute archive, so for them this remains the reading it was.
So the single largest block of out-of-sample edge on this site is, on the balance of evidence, one tick of spread at 17:00 New York, and it is not available to anybody. That does not undo section 8 — selection still beat non-selection in both bands, and the control still reads zero. It sharpens what section 8 already said: the surviving edge and the cost of taking it live in the same hours, and here they are the same thing.
10. The axis we do not have
Open Seasonax or Barchart and the first thing you are shown is the calendar walked day by day — the average year, or the average month, with every date carrying a number. It is the category's signature chart, and this site does not have it. That is a decision, and this section is the reason.
Unlike the annual claims further down this page, the day of the month is a unit our archive can genuinely test. The fifth trading day happens about twelve times a year for twenty-three years, so n lands in the hundreds, not in the twenties. So it was tested: close to close, 285 slots across 11 markets, each against that market's own share of up days, with a null that shuffles the day labels inside each month — which destroys day-of-month structure while keeping the month's returns, its length, its volatility and its trend exactly as they were.
| Market | Months | Slots tested | Clear |z| ≥ 3 | Null expects | Strongest slot |
|---|---|---|---|---|---|
| EUR/USD | 274 | 26 | 0 | 0.06 | day 5, z = -2.61 |
| GBP/USD | 242 | 26 | 0 | 0.05 | -5 from end, z = 2.93 |
| USD/CHF | 151 | 25 | 0 | 0.04 | -5 from end, z = -2.45 |
| USD/JPY | 212 | 26 | 0 | 0.06 | day 12, z = 2.29 |
| AUD/USD | 267 | 26 | 0 | 0.1 | -5 from end, z = 2.78 |
| USD/CAD | 275 | 26 | 0 | 0.07 | -4 from end, z = -2.11 |
| NZD/USD | 240 | 26 | 0 | 0.09 | day 10, z = -1.87 |
| EUR/JPY | 243 | 26 | 0 | 0.04 | day 17, z = -2.53 |
| GBP/JPY | 194 | 26 | 0 | 0.04 | day 12, z = 2.92 |
| Gold (XAU/USD) | 281 | 26 | 0 | 0.07 | day 16, z = -1.66 |
| Silver (XAG/USD) | 243 | 26 | 0 | 0.07 | day 19, z = -2.09 |
The two named versions, each against its own control
The folklore is more specific than the chart. Turn of the month — pension and index flows around the boundary — and the third Friday, options expiry, "triple witching" when index and futures options land together. Both were tested against the control that isolates them: the turn against every other day of the same months, the third Friday against the other Fridays, so the weekday is not quietly credited to the claim.
| Market | Turn of month | vs rest | z | Third Friday | vs other Fridays | z |
|---|---|---|---|---|---|---|
| EUR/USD | 49.36% | 50.4% | -0.62 | 49.08% | 49.46% | -0.11 |
| GBP/USD | 50.21% | 49.54% | 0.37 | 47.28% | 48.83% | -0.42 |
| USD/CHF | 51.99% | 50.79% | 0.53 | 52.03% | 46.53% | 1.18 |
| USD/JPY | 51.18% | 52.22% | -0.55 | 44.55% | 46.71% | -0.55 |
| AUD/USD | 52.72% | 51.12% | 0.94 | 48.48% | 50.11% | -0.46 |
| USD/CAD | 50.45% | 49.88% | 0.35 | 54.78% | 49.02% | 1.67 |
| NZD/USD | 52.5% | 51.73% | 0.43 | 50.21% | 51.93% | -0.46 |
| EUR/JPY | 51.44% | 51.81% | -0.21 | 47.3% | 48.78% | -0.4 |
| GBP/JPY | 52.45% | 51.78% | 0.34 | 46.35% | 48.68% | -0.57 |
| Gold (XAU/USD) | 54.27% | 53.13% | 0.69 | 55.6% | 57.28% | -0.49 |
| Silver (XAG/USD) | 54.63% | 52.87% | 0.99 | 52.38% | 53.03% | -0.17 |
The turn of the month leans up in 8 of 11 markets, which sounds like something until you notice that not one of them reaches even |z| ≥ 2 — and that these markets are correlated, so eight agreements are not eight observations. The third Friday leans up in 2 of 11, also with nothing above |z| ≥ 2. The largest effect either claim produces anywhere is USD/CAD's +5.76 points on expiry Fridays, at z = 1.67, on 272 of them.
11. Why n ≥ 300 and |z| ≥ 3?
Two numbers decide everything this site publishes: the sample-size floor and the significance bar. Both have been stated here as if they were handed down. A sceptic is entitled to ask what happens at other settings, because "they picked the thresholds that flattered the result" is the most ordinary way a finding like ours goes wrong — and it cannot be answered by argument, only by running the other settings and showing the whole curve.
So here are 25 of them: 5 sample-size floors × 5 significance bars, each cell the entire grid rebuilt at those settings, and each one also walked through section 8's holdout — chosen on pre-2020 candles, scored on 2020+, restricted to ordinary hours because the thin band would flatter every row equally.
| Min n | |z| bar | Found | Noise expects | Ratio | Out-of-sample windows | OOS edge | OOS z |
|---|---|---|---|---|---|---|---|
| 150 | 2.0 | 414 | 107.56 | 3.8× | 231 | 0 | 0 |
| 150 | 2.5 | 269 | 29.36 | 9.2× | 128 | +0.49 | 1.94 |
| 150 | 3.0 | 190 | 6.38 | 29.8× | 68 | +0.55 | 1.61 |
| 150 | 3.5 | 146 | 1.1 | 132.7× | 42 | +0.39 | 0.89 |
| 150 | 4.0 | 103 | 0.15 | 687.5× | 23 | -0.01 | -0.01 |
| 200 | 2.0 | 404 | 103.01 | 3.9× | 231 | 0 | 0 |
| 200 | 2.5 | 265 | 28.12 | 9.4× | 128 | +0.49 | 1.94 |
| 200 | 3.0 | 189 | 6.11 | 30.9× | 68 | +0.55 | 1.61 |
| 200 | 3.5 | 146 | 1.05 | 138.6× | 42 | +0.39 | 0.89 |
| 200 | 4.0 | 103 | 0.14 | 717.9× | 23 | -0.01 | -0.01 |
| 300 | 2.0 | 400 | 101.06 | 4× | 224 | +0.05 | 0.28 |
| 300 | 2.5 | 262 | 27.58 | 9.5× | 127 | +0.49 | 1.92 |
| 300 | 3.0 | 187 | 6 | 31.2× | 68 | +0.55 | 1.61 |
| 300 | 3.5 | 144 | 1.03 | 139.3× | 42 | +0.39 | 0.89 |
| 300 | 4.0 | 102 | 0.14 | 724.7× | 23 | -0.01 | -0.01 |
| 500 | 2.0 | 328 | 66.38 | 4.9× | 202 | -0.02 | -0.1 |
| 500 | 2.5 | 219 | 18.12 | 12.1× | 117 | +0.45 | 1.74 |
| 500 | 3.0 | 161 | 3.94 | 40.9× | 66 | +0.54 | 1.55 |
| 500 | 3.5 | 120 | 0.68 | 176.7× | 41 | +0.34 | 0.76 |
| 500 | 4.0 | 84 | 0.09 | 908.5× | 23 | -0.01 | -0.01 |
| 800 | 2.0 | 280 | 53.78 | 5.2× | 77 | +0.39 | 1.28 |
| 800 | 2.5 | 186 | 14.68 | 12.7× | 45 | +1.03 | 2.56 |
| 800 | 3.0 | 132 | 3.19 | 41.4× | 24 | +0.73 | 1.32 |
| 800 | 3.5 | 94 | 0.55 | 170.9× | 16 | +1.04 | 1.53 |
| 800 | 4.0 | 62 | 0.07 | 827.7× | 7 | +1.08 | 1.06 |
What the curve says
The anti-data-mining result does not depend on where the bars are. 21 of the 25 specifications beat noise by at least five times, and the four that do not are all the loosest bar (|z| ≥ 2), at n ≥ 150, n ≥ 200, n ≥ 300 and n ≥ 500 — a bar that is barely filtering the grid at all. Our published cell sits at 31.2×.
And the honest half. Out of sample, in ordinary hours, the whole surface runs from -0.02 to +1.08 points, and 1 of 25 cells reaches |z| ≥ 2. Our cell is +0.55 points, z = 1.61 — mid-table. There is no setting of these two dials that turns ordinary-hour direction into something worth a round trip, which is the same conclusion section 8 reached from one specification and this reaches from 25.
Two things we are deliberately not doing with this table
We are not moving to the best cell. 800/2.5 shows +1.03 points at z = 2.56, the only ordinary-hour cell near conventional significance — and it is the best of 25 looks. Choosing it on that basis is precisely the error the rest of this page is about. A threshold picked because it maximised a holdout is not a threshold, it is a fit.
And we checked whether that row is even about sample size. The n ≥ 800 floor drops all four indices and both crypto, leaving 10 long-history FX and metals markets — so a "bigger samples do better" reading could just be "the good markets only". Re-running every specification on that fixed set of 10 settles it: from 150 to 500 the column does not move at all, which means those extra low-n buckets contribute nothing either way. The 800 row does move, on the same 10 markets — but on 45 windows at its best cell and 7 at its strictest. Big swings on small counts.
12. What cost does the edge die at?
This site assumes one spread per market — 1.0 pips for EUR/USD, 1.2 for USD/CHF, 3.0 for gold — and applies it to every hour of every day of twenty-three years. It is a reasonable retail figure and it is used honestly: a rule's net is its gross edge minus that spread, and nothing net-negative reaches anybody. What has never been published is how much that assumption is carrying.
The number that answers it is the break-even spread: the cost at which a rule's net becomes zero, which is simply its gross edge per trade, measured on the first 70% of the history — the part the rule was chosen on. Beside it, the cushion — how many times the assumed spread that represents, and therefore how wrong our table can be before the rule is worth nothing.
| Market | Window | Gross | Assumed spread | Breaks even at | Cushion |
|---|---|---|---|---|---|
| EUR/USD | 11:00 · Mon–Fri | 1 | 1 | 1 pips | 1× |
| AUD/USD | Fri 09:00 | 1.21 | 1.2 | 1.21 pips | 1.01× |
| EUR/GBP | 20:00 · Mon–Fri | 1.25 | 1.2 | 1.25 pips | 1.04× |
| EUR/GBP | Mon 20:00 | 1.3 | 1.2 | 1.3 pips | 1.09× |
| EUR/USD | Mon 20:00 | 1.16 | 1 | 1.16 pips | 1.16× |
| USD/CHF | Thu 20:00 | 1.44 | 1.2 | 1.44 pips | 1.2× |
| EUR/GBP | Tue 20:00 | 1.49 | 1.2 | 1.49 pips | 1.24× |
| AUD/USD | Wed 00:00 | 1.5 | 1.2 | 1.5 pips | 1.25× |
| EUR/USD | Tue 02:00 | 1.28 | 1 | 1.28 pips | 1.28× |
| EUR/GBP | Wed 20:00 | 1.66 | 1.2 | 1.66 pips | 1.38× |
| EUR/USD | Wed 11:00 | 1.4 | 1 | 1.4 pips | 1.4× |
| GBP/USD | Fri 19:00 | 1.8 | 1.2 | 1.8 pips | 1.5× |
| USD/CAD | Fri 20:00 | 2.32 | 1.5 | 2.32 pips | 1.55× |
| EUR/JPY | Thu 13:00 | 2.88 | 1.5 | 2.88 pips | 1.92× |
| USD/CHF | Fri 20:00 | 2.71 | 1.2 | 2.71 pips | 2.26× |
It is not a thin-band story either, which was the obvious suspicion after section 9: the median cushion is 1.24× in the thin band and 1.28× in ordinary hours. The whole board runs on the same narrow margin — across all 150 net-positive rules the median is 1.31×, and only 23 of them survive a doubled spread.
Why this is a sensitivity and not a correction
Our hourly price feed is bid-only, so this section does not claim the table is wrong. It says what happens if it is, and leaves the reader to judge their own broker against it. For the ten FX pairs our minute archive covers, the ask is there too: section 33 measures what the spread actually was, hour by hour, and section 9 uses it to test the New York close directly. Metals, indices and crypto still rest on the assumption.
13. Does the size axis survive out of sample?
This page has spent twelve sections saying what does not work. Section 8 walked direction forward into data it had never seen and got +0.54 points at z = 1.57 in ordinary hours — not significant, and less than a round trip. Everything after it followed from that: this site says it is better at when a market moves and how far than at which way.
That claim had never been tested. It is the one thing left that the product actually rests on, so it gets exactly the same instrument: the median move of every weekday × hour computed on pre-2020 candles only, then again on 2020+ candles only, and the two compared.
| Market | Rank correlation | Fit era's top 10 | Every other hour | Still in the top 20 | Inside the busy band |
|---|---|---|---|---|---|
| EUR/USD | 0.973 | 1.82× | 0.99× | 9 of 10 | 0.774 |
| GBP/USD | 0.964 | 1.81× | 1× | 9 of 10 | 0.881 |
| USD/CHF | 0.962 | 1.82× | 0.99× | 9 of 10 | 0.835 |
| GBP/JPY | 0.939 | 1.58× | 0.96× | 10 of 10 | 0.892 |
| US30 (Dow) | 0.93 | 2.64× | 1.1× | 10 of 10 | 0.89 |
| USD/JPY | 0.929 | 1.7× | 1.03× | 9 of 10 | 0.875 |
| GER40 (DAX) | 0.929 | 1.83× | 0.99× | 10 of 10 | 0.788 |
| EUR/JPY | 0.927 | 1.57× | 0.98× | 9 of 10 | 0.823 |
| USD/CAD | 0.925 | 1.98× | 0.99× | 10 of 10 | 0.956 |
| AUD/USD | 0.92 | 1.59× | 0.98× | 9 of 10 | 0.836 |
| EUR/GBP | 0.893 | 1.72× | 1.07× | 5 of 10 | 0.711 |
| NZD/USD | 0.885 | 1.52× | 0.97× | 9 of 10 | 0.839 |
| Gold (XAU/USD) | 0.876 | 2.12× | 0.99× | 10 of 10 | 0.956 |
| Silver (XAG/USD) | 0.81 | 2.08× | 0.99× | 10 of 10 | 0.923 |
| BTC/USD | 0.434 | 1.18× | 1.05× | 3 of 10 | -0.364 |
| ETH/USD | 0.287 | 1.18× | 1.04× | 4 of 10 | -0.278 |
The control, which is the reason this is worth publishing at all
A rank correlation across the whole week proves almost nothing on its own. Every market is quiet in Asia and busy over London; that shape needs no archive, and run 73's mistake was built on exactly it — a sizing warning drawn from hour-of-day shapes that rhyme everywhere.
So the same correlation is measured inside the London/New York overlap alone, where every bucket is already a busy hour and the obvious shape has been removed. It comes back at 0.839, above 0.5 in 14 of 16 markets. The fine ordering within the busiest four hours of the week survives the era split too — which is information the archive is carrying, not a restatement of what anyone could guess.
14. Is the timetable the same in August as in November?
Section 13 showed the size axis survives an era split. That is not the only way a timetable can move. Everyone in this market believes in the summer lull, and if August's busiest hours were different from November's then the strip on our dashboard — built on a pooled 23-year median — would be wrong for part of every year.
Two things are easy to confuse here and the measurement keeps them apart. Shape is which hours are the big ones, which is what this product claims. Level is how big they all are: a quarter can be uniformly quieter while the shape stays perfect, and that is a different caveat.
| Period | Markets | Shape (rank correlation) | Worst market | Level vs its own year |
|---|---|---|---|---|
| Jan–Mar | 18 | 0.912 | 0.795 | 1.071× |
| Apr–Jun | 18 | 0.949 | 0.809 | 1.005× |
| Jul–Sep | 18 | 0.953 | 0.811 | 0.945× |
| Oct–Dec | 18 | 0.944 | 0.808 | 0.977× |
| August only | 15 | 0.915 | 0.609 | 0.946× |
The level moves, a little. The quarters span 0.126 — from 5.5 points below a market's own typical hour to 7.1 points above it — and August runs 0.946×. So the summer lull is real and it is about 5.4%, not the collapse the folklore describes. The absolute pip figures on this site are pooled medians; in a quiet quarter they run slightly high, in a busy one slightly low, by about that much.
15. Is UTC the right clock?
Every number on this site lives in a weekday × hour bucket measured in UTC. That is a choice, and it had never been tested. There is a specific reason to doubt it: whatever structure exists here is made by desks opening, and London and New York keep their own clocks and change them on their own dates. If an effect is anchored to a trading floor, a UTC grid smears it across two adjacent buckets for about 60% of the year — and every number we publish would be an understatement.
So the same grid was rebuilt from the same bars on four clocks, scored on the same bar (n ≥ 300, |z| ≥ 3 against each market's own up-rate). One thing to note before the table: a fixed offset cannot change a single count. Shifting every bar by a constant renames the 168 buckets without moving any bar between them. Only a clock that moves during the year can change anything, which means the whole difference below comes from the summer-time days.
| Clock | Windows clearing the bar | In the block | Everywhere else | z-mass in the block | Top three hours hold | Block sits at |
|---|---|---|---|---|---|---|
| UTC | 187 | 115 | 72 | 587 | 64.2% | 20:00 21:00 22:00 |
| New York | 167 | 122 | 45 | 683 | 78.7% | 16:00 17:00 18:00 |
| London | 166 | 126 | 40 | 683 | 77.2% | 21:00 22:00 23:00 |
| Sydney | 133 | 92 | 41 | 415 | 61.9% | 06:00 07:00 08:00 |
| an arbitrary moving clock | 134.7 | 98.5 | 36.1 | — | — | — |
But that total conceals the interesting half, and it splits by hour. Inside the settlement block the northern clocks are sharper than UTC: 122 windows carrying 683 of z-mass in New York, against 115 carrying 587 in UTC, and the strongest three hours hold 78.7% of everything against UTC's 64.2%. A right clock does not merely move the block to a new hour — it gathers it, because smearing is what a wrong clock does. Outside the block the same clocks lose almost everything: 72 ordinary-hour windows in UTC fall to 45 and 40, against 36.1 from a clock with arbitrary dates.
What this cannot tell you. Outside the block, flags fall to roughly the level an arbitrary clock produces. Two different things would look like that, and this test does not separate them: those windows may be fragile, or they may be genuinely UTC-anchored and therefore destroyed by an hour of jitter on 60% of days. We do not claim the first. Section 8 reaches ordinary-hour direction by a completely different route — chosen on one era and scored on another — and rates it weak there too, at +0.54 points; read the two together rather than either alone.
16. Should you only take a window when the market is busy?
It is the first thing anyone tries. Two of our own findings point straight at it: after an hour that ran twice its usual size the next hour runs 1.47× normal and is still 1.35× a day later — a state, not a reaction — while taking every window we flag would have lost at every holding period. So does the second depend on the first?
Every occurrence of every flagged window was sorted by how big the previous hour was, measured against that hour's own long-run median. ⚠ That normalisation is the test. Measured raw, "the previous hour was big" mostly means "the previous hour was London", and the split would rediscover the trading session and call it a state.
| Market | Windows | After a big hour | After a quiet hour | Gap | p |
|---|---|---|---|---|---|
| EUR/USD | 13 | 54.66% | 56.61% | -1.95 | 0.025 |
| GBP/USD | 10 | 55.8% | 56.31% | -0.51 | 0.652 |
| USD/CHF | 16 | 58.36% | 61.12% | -2.76 | 0.007 |
| USD/JPY | 11 | 55.93% | 57.87% | -1.94 | 0.098 |
| AUD/USD | 13 | 55.01% | 56.82% | -1.81 | 0.015 |
| USD/CAD | 17 | 55.75% | 57% | -1.25 | 0.087 |
| NZD/USD | 13 | 55.74% | 59.62% | -3.88 | 0 |
| EUR/JPY | 9 | 55.47% | 56.13% | -0.66 | 0.568 |
| GBP/JPY | 8 | 55.7% | 58.42% | -2.72 | 0.03 |
| EUR/GBP | 16 | 61.61% | 64.07% | -2.46 | 0.02 |
| Gold (XAU/USD) | 20 | 55.29% | 56.17% | -0.88 | 0.245 |
| Silver (XAG/USD) | 38 | 55.14% | 58.14% | -3 | 0 |
| BTC/USD | 2 | 58.65% | 58.38% | 0.27 | 0.963 |
| ETH/USD | 1 | 59.34% | 59.12% | 0.22 | 1 |
But almost all of it is in the thin band, which is the part of the week this site already tells you to discount. In the Sunday reopen and from 20:00 UTC the gap is -3.33 points; in ordinary hours it is -0.62, on 75,181 occurrences. Read as a rule you could trade, it is a rule about the hours with the widest spreads.
17. Are the weeks inside a window independent? Our own maths assumes so
Everything on this page rests on one assumption nobody had checked. The significance figure we print is z = (UP − N·base) / √(N·base(1−base)), and that denominator is the claim that each occurrence of "Thursday 13:00" is an independent coin. If consecutive weeks are correlated, the real error bar is wider, every |z| we publish is too big, and our own bar is too lenient.
Each window's up/down series was taken in time order and its autocorrelation measured, then turned into a variance inflation factor — the standard Newey–West correction. ⚠ The control turned out to be the calibration. A sample autocorrelation is biased downward by about −1/n, so on shuffled copies of these very windows — dependence destroyed — the estimator returns 0.9895 rather than 1.000. Comparing the real 1.0319 against a nominal 1 would have charged the data for about half of what is there, so every window is divided by its own shuffled baseline instead.
| Market | Flagged windows | Survive the correction | Median inflation |
|---|---|---|---|
| EUR/USD | 13 | 11 | 1.0508 |
| GBP/USD | 10 | 9 | 1.0478 |
| USD/CHF | 16 | 14 | 1.0407 |
| USD/JPY | 11 | 10 | 1.0432 |
| AUD/USD | 13 | 9 | 1.0806 |
| USD/CAD | 17 | 16 | 1.0333 |
| NZD/USD | 13 | 12 | 1.0813 |
| EUR/JPY | 9 | 7 | 1.0401 |
| GBP/JPY | 8 | 7 | 1.0361 |
| EUR/GBP | 16 | 16 | 1.0577 |
| Gold (XAU/USD) | 20 | 19 | 1.067 |
| Silver (XAG/USD) | 38 | 33 | 1.3077 |
| BTC/USD | 2 | 2 | 1.033 |
| ETH/USD | 1 | 1 | 1.0205 |
⚠ How many fall depends on a choice we make, so every setting is shown rather than the one that reads best. Truncating the correction at more lags kills more windows — 14 at 4, 21 at 8, 32 at 12, 43 at 16 lags — but the central estimate barely moves across that whole sweep. The casualty count grows because a longer truncation adds noise to each window's own estimate, so more windows cross the line by estimator variance rather than by dependence. The size of the correction is the stable number; the body count is not, and quoting only the second would be picking a figure out of a spread.
18. Crypto trades all week, and we have been measuring it with a five-day instrument
Every movement figure on this site comes from one file, and until 2026-09-02 that file was 120 numbers long: weekday × hour, Monday first, weekends excluded. That is the correct shape for seventeen markets and the wrong shape for two. BTC/USD carries 8,134 Saturday hours and 8,877 Sunday hours in the very cube the dashboard already serves — real bars, a real market — and the timetable, the hours-ahead strip, the biggest-windows list, the screener's size ranking and the per-symbol articles were blind to every one of them. The file carries all seven days for those two markets now, and everything below is the measurement we did before widening it.
So before publishing weekend figures we measured what is in them. 69,315 real hourly BTC bars and 67,394 ETH, from 2017 on.
| Market | Weekend share of bars | Weekend vs weekday hour | Weekend hour vs round trip | Hour-shape ρ, weekday vs weekend | Control ρ, weekday vs weekday | Biggest hour, weekday → weekend |
|---|---|---|---|---|---|---|
| BTC/USD | 24.8% | 0.84× | 2.76× | 0.647 | 0.897 | 14:00 → 00:00 |
| ETH/USD | 26.0% | 0.80× | 2.60× | 0.689 | 0.913 | 14:00 → 22:00 |
| EURUSD | — | — | — | — | 0.992 | — |
| GBPUSD | — | — | — | — | 0.990 | — |
| USDJPY | — | — | — | — | 0.988 | — |
| XAUUSD | — | — | — | — | 0.994 | — |
The weekend is quieter, and not by much. A typical weekend hour moves 0.844× a weekday one in BTC and 0.796× in ETH — and it is still worth 2.76× a round trip. On size alone the crypto weekend is an ordinary trading period, which is exactly why leaving it out of the timetable is a gap rather than a rounding.
⚠ And it is not flatter — it has moved. The obvious story is that crypto's intraday rhythm is Western working hours, so the weekend should wash out into a flat line. It does not: BTC's peak-to-trough hour ratio is 1.85× on weekdays and 1.81× at the weekend. What changes is which hour is the big one — 14:00 UTC on a weekday against 00:00 UTC at the weekend. A weekend timetable would be a second timetable, not an extension of the first.
Direction finds nothing, as expected. Against the same bar the rest of the site uses — n ≥ 300, |z| ≥ 3 on each market's own base rate — the weekend hours yield 1 flagged window of 45 tested in BTC, 1 flagged window of 48 tested in ETH, against nulls of 0.12 and 0.13. Single counts at that scale are not evidence of anything. Both markets are graded no structure shown for direction across this site.
⚠ The institutionalisation story is half-supported, so we are not telling it. Split at 2021-01-01: BTC's weekend/weekday movement ratio fell from 0.794 to 0.609, which is the shape you would expect if the weekend lost ground as futures, options and funds arrived. ETH moved the other way (0.636 → 0.667). Two markets disagreeing is not a law. ⚠ Note the ratio is deliberately what is reported and never the level: crypto's absolute volatility fell a long way between those eras for reasons that have nothing to do with Saturdays. The one thing both markets do agree on is that the weekend's shape has diverged further in the modern era — the weekday-versus-weekend correlation fell in both.
⚠ "The weekend sets up Monday" does not survive its control either. Monday closes the same way the weekend did in 54% of 363 BTC weekends. That sounds like something until you run the same estimator on a shape-matched control — two consecutive weekdays summed, followed by the third — which returns 50%. The gap is 4 ± 2.96 points (t = 1.35), and 2.1 ± 2.95 in ETH. Neither is significant. ⚠ The first version of this test used a one-day control against a two-day weekend and produced a larger gap; the weekend is a two-day sum, and a control has to be the same object.
19. When does the day's high and low actually form?
This is a report the rest of this category sells by name — daily high and low by session, high and low by weekday — and it is the clearest example we have found of a true number that means nothing without its control. We ran it on 73,338 trading days across 19 markets, and the first answer we got was wrong.
First, the arcsine law. A random walk does not scatter its maximum evenly along its path — it concentrates the extremes at the ends. So "1 in 24" is the wrong yardstick even for a market with a perfectly flat day. Second, some hours are simply bigger. London and New York move two to three times a typical hour, so the extreme lands there more often for a reason that is not about the clock.
Our control keeps every bar in its own hour — so the volatility profile of the day is untouched — and randomises only its direction, flipping each bar's move about its own open with probability one half, then rebuilding the path and relocating the extreme. Whatever survives that is not "the London hour is big", because the London hour is still just as big in every one of the 30 draws. Against that control, the opening hour is the busiest in 17 of 19 markets — more than we actually observe. The naive finding is not merely unsupported; it is slightly weaker than chance.
The control that settles it: move the boundary
If the concentration belongs to the start of the day rather than to midnight, then moving the day boundary must move it too. So we re-ran everything on a day that begins at 22:00 UTC — the FX rollover, and the boundary a broker platform actually uses.
| Market | Days | Busiest hour (midnight cut) | Share | Control | Busiest hour (22:00 cut) | Hours beyond the control |
|---|---|---|---|---|---|---|
| EUR/USD | 5,932 | 00:00 | 9.5% | 10.4% | 14:00 | 5 |
| GBP/USD | 5,239 | 00:00 | 9.0% | 9.6% | 14:00 | 6 |
| USD/CHF | 3,260 | 00:00 | 9.6% | 9.5% | 14:00 | 3 |
| USD/JPY | 4,594 | 00:00 | 19.4% | 16.3% | 22:00 | 11 |
| AUD/USD | 5,670 | 00:00 | 14.3% | 14.2% | 22:00 | 6 |
| USD/CAD | 5,950 | 14:00 | 9.3% | 7.8% | 14:00 | 9 |
| NZD/USD | 5,188 | 00:00 | 14.0% | 13.4% | 22:00 | 8 |
| EUR/JPY | 5,258 | 00:00 | 16.3% | 14.8% | 22:00 | 5 |
| GBP/JPY | 4,190 | 00:00 | 14.5% | 13.5% | 22:00 | 5 |
| EUR/GBP | 2,471 | 00:00 | 8.3% | 9.4% | 07:00 | 9 |
| Gold (XAU/USD) | 6,054 | 00:00 | 9.6% | 11.2% | 13:00 | 9 |
| Silver (XAG/USD) | 5,216 | 00:00 | 10.8% | 10.1% | 13:00 | 12 |
| US30 (Dow) | 2,209 | 19:00 | 10.5% | 8.8% | 19:00 | 1 |
| NAS100 | 1,729 | 19:00 | 11.3% | 8.3% | 19:00 | 5 |
| SPX500 | 1,728 | 19:00 | 13.4% | 9.3% | 19:00 | 1 |
| GER40 (DAX) | 2,051 | 00:00 | 10.4% | 11.4% | 07:00 | 3 |
| UK100 (FTSE) | 915 | 07:00 | 8.7% | 8.9% | 19:00 | 0 |
| BTC/USD | 2,876 | 00:00 | 15.3% | 14.3% | 22:00 | 4 |
| ETH/USD | 2,808 | 00:00 | 16.1% | 14.9% | 22:00 | 4 |
What actually survives the control
106 of 912 hour-tests clear |z| ≥ 3 against 2.5 expected — 42.4× — so there is real structure in where the extreme lands. But the largest single block of it is a negative, and it is about the band this site already tells you not to trust: 45 of those 106 flags sit at 21:00–23:00 UTC and say the extreme lands there less often than the control expects, against 3 saying more. The rollover does not make new highs and lows. It is thin, it is expensive, and it does not even produce the day's extremes.
And the weekly version is mostly a trend
Counted raw, the week's high lands on Fri in 15 of 19 markets and the week's low on Mon in 15. Against the same control, only 6 of 19 clear even |z| ≥ 2 on the Friday high — NZD/USD, EUR/GBP, Gold (XAU/USD), US30 (Dow), NAS100, SPX500 — and a Friday high is what an asset that rose across the sample is obliged to produce. The rank correlation between a market's own drift and its Friday-high strength is 0.36: positive, and too weak to carry the story on its own. ⚠ The Monday low is the broader of the two effects: 9 of 19 clear the same weak bar on it. ⚠ And nineteen markets agreeing is not nineteen observations — we measure US30 (Dow) and SPX500 at 0.94 correlation of hourly returns, so a head-count here overstates its own evidence.
20. Does the first hour set the day?
Two more reports the rest of this category sells by name, and they are the same question asked twice: opening candle continuation — if the first hour is green, how often does the session close green? — and the initial balance, the first hour's high and low, and whether the rest of the session breaks one side, both, or neither. We ran both on 68,966 sessions across 17 markets.
Continuation: nothing, in every market we hold
The control re-pairs each day's first hour with a different day's session. That keeps both marginals exactly — the same number of green first hours, the same number of green sessions — and destroys only the link between them. Anything the conditional does above that is the effect.
| Market | Sessions | Green first hour → green session | Control | Δ | z | One side of the IB breaks | Control | Neither side breaks |
|---|---|---|---|---|---|---|---|---|
| EUR/USD | 5,929 | 48.3% | 48.4% | -0.1 | -0.14 | 47.2% | 45.0% | 0.27% |
| GBP/USD | 5,236 | 50.4% | 49.6% | +0.8 | 0.81 | 47.1% | 44.4% | 0.32% |
| USD/CHF | 3,258 | 51.1% | 51.4% | -0.2 | -0.19 | 46.2% | 44.5% | 0.37% |
| USD/JPY | 4,592 | 52.5% | 52.1% | +0.3 | 0.33 | 46.7% | 43.4% | 0.41% |
| AUD/USD | 5,739 | 48.8% | 49.2% | -0.4 | -0.47 | 45.1% | 43.9% | 0.14% |
| USD/CAD | 5,949 | 49.2% | 50.1% | -0.8 | -0.9 | 34.9% | 35.6% | 0.05% |
| NZD/USD | 5,187 | 50.2% | 50.3% | -0.1 | -0.11 | 44.5% | 43.6% | 0.10% |
| EUR/JPY | 5,256 | 50.6% | 50.3% | +0.3 | 0.29 | 51.5% | 48.5% | 0.51% |
| GBP/JPY | 4,188 | 52.9% | 52.1% | +0.8 | 0.71 | 50.7% | 47.4% | 0.26% |
| EUR/GBP | 2,471 | 47.5% | 47.7% | -0.2 | -0.14 | 47.9% | 47.1% | 0.20% |
| Gold (XAU/USD) | 6,058 | 51.8% | 50.5% | +1.3 | 1.44 | 37.2% | 35.4% | 0.13% |
| Silver (XAG/USD) | 5,204 | 52.6% | 53.1% | -0.5 | -0.47 | 32.4% | 35.6% | 0.04% |
| US30 (Dow) | 2,827 | 51.9% | 53.3% | -1.4 | -1.1 | 68.1% | 68.1% | 1.87% |
| NAS100 | 1,679 | 57.0% | 56.4% | +0.6 | 0.35 | 70.3% | 70.0% | 2.50% |
| SPX500 | 1,679 | 55.3% | 53.9% | +1.4 | 0.82 | 66.0% | 65.8% | 1.67% |
| GER40 (DAX) | 2,728 | 52.8% | 52.9% | -0.1 | -0.04 | 63.0% | 61.9% | 1.25% |
| UK100 (FTSE) | 986 | 49.9% | 51.9% | -2.0 | -0.92 | 63.9% | 61.7% | 0.51% |
The initial balance is broken on essentially every session
Which is the same defect the opening range has, and it is fatal in the same way: the first hour's range survives the rest of the session untouched on a median of 0.32% of days. A filter that admits 99.7% of sessions is not a filter.
The interesting half is the split between a session that breaks one side and one that breaks both. That is the trend-day story the report is really sold on, and it does clear its control — just barely. One side only happens on a median 47.23% of sessions against 45.01% for a session that keeps its own bars and hours and loses only their direction: a gap of +1.12 points. ⚠ The control matters more here than anywhere: a bigger session breaks a range more often for reasons that have nothing to do with the opening hour, so the naive version of this statistic is mostly a volatility measurement wearing a pattern's name.
21. Are nineteen markets nineteen experiments?
Section 1's headline is a sum: 187 significant windows against about 5.78 from noise, added up across 19 markets. Adding them is only a fair experiment if the markets are independent — and this site publishes the file that says they are not. /data/correlation.json has US30 (Dow) and SPX500 at 0.94, NAS100 and SPX500 at 0.93, BTC/USD and ETH/USD at 0.836, and every dollar pair sharing a leg. Our own yesterday's-high test says so in words — "those markets are correlated, so nineteen agreements are not nineteen observations" — and nobody had measured what the sentence is worth.
Two things had to come out right before the answer meant anything. Correlation moves the spread of a sum, never its centre, so the two arms must agree on the mean — they differ by 0.10 flags. And this test rebuilds the grid from raw hourly bars by a different route than section 1 does, so its per-market arm should land on section 1's analytic null: it reads 5.78 against the 5.95 that page publishes. A permutation reproducing an analytic figure it was never fitted to is the calibration; without it, any inflation this test reported would be its own.
| mean | sd | 95th | max | P(≥ what we see) | |
|---|---|---|---|---|---|
| total flags — one null per market | 5.78 | 2.42 | 10 | 16 | < 1 in 1,500 |
| total flags — one null shared | 5.68 | 2.41 | 10 | 17 | < 1 in 1,500 |
| markets with ≥ 1 flag — per market | 4.9 | 1.87 | 8 | 11 | < 1 in 1,500 |
| markets with ≥ 1 flag — shared | 4.85 | 1.9 | 8 | 13 | < 1 in 1,500 |
Why so little, when the price series correlate as high as 0.94? Because a flag is not a return. It is a small deviation accumulated over hundreds of hours inside one bucket, and two markets can move together minute by minute while their bucket-level deviations barely do. The intuition that correlated markets must produce correlated findings is reasonable and, measured, mostly wrong here.
What changes on this site. Section 1 stands exactly as written: 187 against 5.78 is not an artefact of adding correlated things up, and the observed count sits outside 1,500 draws of either null. What could change is the sentence about agreement. 14 of 19 markets carry at least one flag and the null never produced more than 13 in 1,500 tries — but when this site says nineteen markets agree, the interval on the effective count (17–21.3) contains all 19, so reading it as 19 is not an overstatement this test can measure. Drives /data/crossnull.json. ⚠ Not rebuilt weekly — it costs about ten minutes and measures something structural — so the gate ties it to the live grid instead: if the 187 moves, the build fails until this test is re-run.
22. Do round numbers act as support and resistance?
After support and resistance itself, this is the most widely taught idea in retail FX: price respects the big figure. And like yesterday's high, it is sold two incompatible ways at once — either the round number holds, so you fade it, or it breaks and runs because everybody's stops are parked behind it. Both stories are told about the same event, which is usually the sign that the event carries nothing at all.
For every hour we take the nearest lattice level above the open and the nearest one below it, keep the ones the hour actually traded through, and ask how far past the level the hour closed. A level the hour opened beyond is not a level the hour broke — that is a gap, and section 5 measured it. Moves are in pips, positive when the close finished past the level.
| market | crossings | closed beyond | control | move past | control | distance-matched | difference | z | vs spread |
|---|---|---|---|---|---|---|---|---|---|
| EUR/USD | 25,835 | 48.77% | 46.99% | 0.60 | -0.02 | -0.03 | +0.625 | 5.8 | 0.63× |
| USD/JPY | 18,558 | 48.42% | 47.12% | 0.74 | 0.15 | 0.14 | +0.590 | 4.2 | 0.59× |
| GBP/USD | 27,996 | 49.64% | 48.28% | 0.76 | 0.29 | 0.29 | +0.470 | 3.4 | 0.39× |
| AUD/USD | 23,027 | 47.36% | 46.27% | 0.03 | -0.27 | -0.28 | +0.303 | 3.0 | 0.25× |
| EUR/JPY | 30,205 | 48.12% | 47.36% | 0.41 | 0.05 | 0.05 | +0.363 | 2.7 | 0.24× |
| USD/CAD | 24,573 | 48.70% | 47.94% | 0.33 | 0.07 | 0.07 | +0.258 | 2.4 | 0.17× |
| NZD/USD | 18,786 | 47.17% | 46.21% | -0.17 | -0.36 | -0.37 | +0.189 | 1.9 | 0.10× |
| Gold (XAU/USD) | 52,862 | 48.85% | 47.82% | 1.32 | 0.74 | 0.76 | +0.582 | 1.8 | 0.19× |
| EUR/GBP | 5,721 | 44.92% | 43.96% | -0.17 | -0.42 | -0.42 | +0.244 | 1.8 | 0.20× |
| GBP/JPY | 32,470 | 47.36% | 47.00% | -0.03 | -0.24 | -0.24 | +0.215 | 1.4 | 0.11× |
| GER40 (DAX) | 23,283 | 49.24% | 49.20% | 0.65 | 0.34 | 0.35 | +0.302 | 1.1 | 0.20× |
| SPX500 | 4,896 | 50.94% | 49.99% | 0.40 | 0.21 | 0.21 | +0.190 | 0.9 | 0.27× |
| USD/CHF | 10,547 | 48.53% | 47.60% | 0.26 | 0.10 | 0.10 | +0.159 | 0.8 | 0.13× |
| US30 (Dow) | 37,473 | 49.72% | 49.55% | 1.05 | 0.83 | 0.82 | +0.226 | 0.5 | 0.11× |
| BTC/USD | 82,955 | 49.35% | 49.46% | 3.04 | 2.92 | 2.90 | +0.127 | 0.1 | 0.01× |
| NAS100 | 21,017 | 49.93% | 49.67% | 0.58 | 0.57 | 0.57 | +0.015 | 0.0 | 0.01× |
| Silver (XAG/USD) | 24,849 | 36.24% | 36.46% | -2.66 | -2.66 | -2.71 | −0.002 | -0.0 | -0.00× |
| ETH/USD | 71,211 | 48.76% | 49.08% | 2.71 | 2.85 | 2.85 | −0.148 | -0.2 | -0.01× |
| UK100 (FTSE) | 4,038 | 49.75% | 50.01% | 0.17 | 0.27 | 0.27 | −0.103 | -0.3 | -0.07× |
The folklore has the sign backwards. If round numbers held, an hour that reached one would close short of it more often than an hour reaching an ordinary level the same distance away. It does the opposite in 16 of 19 markets, and 4 clear |z| ≥ 3 (EUR/USD, USD/JPY, GBP/USD, AUD/USD). ⚠ Those markets are correlated, so read the agreement with care: section 21 could not tell our 19 markets' flag counts from 19 independent ones, but that measures flags on the hour-of-week grid, not this test, and the markets' hourly returns still correlate as high as 0.94 (US30 (Dow) and SPX500). It is not a recent artefact either — 14 of 19 lean the same way both before and since 2020-01-01.
| level | pips over the control |
|---|---|
| the big figure (x.x000) | +0.303 |
| the half figure (x.x050) | +0.136 |
| the quarters (x.x025, x.x075) | −0.081 |
| every 10 pips | 0.000 |
| every 5 pips | +0.001 |
The obvious objection, answered in the file rather than in prose. Opens are not placed uniformly against the round lattice, so the nearest round level sits slightly further from the open than a shifted one does — and a level reached from further away was reached by a bar that was already travelling. The distance-matched column re-weights the control to the real crossings' own distance distribution: what those same crossings would have been worth if a level at each distance behaved like an ordinary level at that distance. In EUR/USD it barely moves the control at all — -0.02 becomes -0.03 pips against the 0.60 the round lattice returns. The effect is not the distance.
And this is where it dies. The whole thing is worth a median of 0.226 pips over the control. 0 of 19 markets clear their own round trip, the median is 0.17× the spread, and the best anywhere is EUR/USD at 0.63×. It is also an FX and metals effect: across the 7 index and crypto markets the median is 0.127 pips and 0 clear the bar. So something real is happening at the big figure, it is the opposite of what is taught, and you cannot trade it — which is why there is no round-number surface anywhere on this site, and why requests for one are answered by this section. Drives /data/round.json, rebuilt weekly.
23. Does a narrow range precede an expansion?
After round numbers, this is the setup retail trading teaches most: volatility contracts, then it expands. It is sold under a dozen names — the coil, the squeeze, the consolidation before the break, Crabel's NR4 and NR7 — and always with the same picture and the same instruction. A run of small candles, then a large one; buy the break of the narrow day's high, sell the break of its low.
It is easy to show it is true. The day after the narrowest day in seven is 1.53× the size of that day, and it is bigger in 19 of 19 markets. That is the number this claim is sold on, and it is arithmetic rather than evidence.
1. Selecting a minimum guarantees regression. An NR7 day is defined as the smallest of its last 7. Whatever follows it is drawn from a distribution the selection never touched, so it is bigger than the narrow day almost whatever the market does. The question a trader needs answered is whether it is bigger than an ordinary day — so every range here is divided by the median of that market's previous 60 trading days first, exactly as section 16 divides each hour by its own bucket median rather than rediscovering the London session.
2. An NR7 is also just a small day, and small days are followed by small days. So each one is matched against non-NR days in the same quantile bin of normalised range: same size, no minimum.
3. And it is a small day in a busy week. This is the one the measurement found rather than the design anticipated. Being the narrowest of 7 does not only say today was small — it says the previous 6 were all bigger. The neighbourhood is larger than a matched ordinary small day's, so the next day regresses toward a larger local level for a reason that has nothing to do with a coil releasing. The third control matches on both axes at once.
Ranges are on a 22:00 UTC day boundary, not midnight — section 19 measured what midnight does to a daily statistic on FX, and a range is a daily statistic too. 1.00 below means an ordinary day for that market at that time.
| market | NR7 days | the day itself | next day | next ÷ itself | size-matched control | gap | also neighbourhood-matched | breakout gap | z |
|---|---|---|---|---|---|---|---|---|---|
| Gold (XAU/USD) | 917 | 0.617 | 1.047 | 1.66× | 0.917 | +0.130 | +0.118 | -1.51 | -1.00 |
| Silver (XAG/USD) | 775 | 0.660 | 1.006 | 1.47× | 0.899 | +0.107 | +0.068 | -0.82 | -0.50 |
| GBP/USD | 750 | 0.622 | 1.004 | 1.62× | 0.842 | +0.162 | +0.084 | 0.79 | 0.47 |
| EUR/USD | 878 | 0.618 | 0.989 | 1.57× | 0.950 | +0.039 | +0.043 | -1.06 | -0.69 |
| NZD/USD | 749 | 0.630 | 0.988 | 1.52× | 0.899 | +0.088 | +0.094 | 1.67 | 0.99 |
| AUD/USD | 823 | 0.631 | 0.971 | 1.52× | 0.895 | +0.076 | +0.083 | -2.18 | -1.35 |
| USD/CAD | 862 | 0.616 | 0.967 | 1.60× | 0.878 | +0.089 | +0.051 | 0.20 | 0.13 |
| EUR/JPY | 744 | 0.613 | 0.951 | 1.57× | 0.849 | +0.102 | +0.059 | -0.12 | -0.07 |
| USD/CHF | 474 | 0.610 | 0.945 | 1.53× | 0.892 | +0.053 | +0.096 | 0.95 | 0.46 |
| GBP/JPY | 667 | 0.624 | 0.943 | 1.47× | 0.801 | +0.143 | +0.091 | 0.27 | 0.15 |
| NAS100 | 259 | 0.612 | 0.941 | 1.59× | 0.775 | +0.166 | +0.074 | 0.06 | 0.02 |
| EUR/GBP | 352 | 0.649 | 0.934 | 1.47× | 0.889 | +0.045 | −0.044 | 0.45 | 0.18 |
| USD/JPY | 711 | 0.592 | 0.919 | 1.54× | 0.840 | +0.079 | +0.001 | -1.76 | -1.00 |
| US30 (Dow) | 341 | 0.587 | 0.900 | 1.51× | 0.787 | +0.113 | +0.037 | -0.73 | -0.29 |
| UK100 (FTSE) | 134 | 0.657 | 0.893 | 1.42× | 0.751 | +0.201 | +0.861 | -3.56 | -0.88 |
| GER40 (DAX) | 312 | 0.611 | 0.887 | 1.46× | 0.811 | +0.076 | −0.022 | 0.22 | 0.08 |
| SPX500 | 260 | 0.613 | 0.883 | 1.46× | 0.790 | +0.093 | +0.035 | 1.75 | 0.60 |
| ETH/USD | 434 | 0.518 | 0.854 | 1.56× | 0.746 | +0.108 | +0.066 | -0.27 | -0.12 |
| BTC/USD | 429 | 0.512 | 0.834 | 1.62× | 0.776 | +0.058 | −0.041 | -1.99 | -0.90 |
The expansion is the regression. Against an ordinary day the day after an NR7 is 0.943× — that is, below normal — and only 3 of 19 markets are above their own normal at all. The setup does not deliver a bigger-than-usual day. It delivers a slightly smaller one, and calls the recovery from the minimum it selected an expansion.
| rung | the selected day | the next day | above that market's normal |
|---|---|---|---|
| NR4 | 0.691 | 0.970 | 4 of 19 |
| NR7 | 0.616 | 0.943 | 3 of 19 |
| NR20 | 0.513 | 0.895 | 0 of 19 |
What does survive, and how much of it is the week rather than the coil. An NR7 day is followed by a bigger day than an equally small ordinary day is — median +0.093 of a normal day's range, positive in 19 of 19 markets, which is consistent enough to be real. Match on the neighbourhood as well and it falls to +0.066 in 16 of 19, so about 71% of it survives knowing the surrounding week was busy. ⚠ Read what that leaves: a real, small effect that moves the next day from 0.943× normal to nowhere near 1.00×. It is the difference between two below-average days, not a breakout.
And the way it is actually traded finds nothing at all. Nobody trades the size of tomorrow; they trade the break of the narrow day's high or low. ⚠ Here a narrow range is its own confound — a small range puts the breakout level close to the next day's open (median 0.252% away), a near level is crossed early, and the day then has the whole session to drift beyond it. Measured naively that looks like an edge. So the control is the one section 6 already uses for yesterday's high: a synthetic level the same distance from the same day's open, drawn from that market's own pool of break distances. Breaks of the NR7 range close beyond 51.93% of the time; the matched ordinary level does it 51.30%. The difference is -0.12 points, positive in only 9 of 19 markets, and 0 clear |z| ≥ 3 — the largest anywhere is 1.35. Follow-through over the control is -0.116× the spread, and the 2 market that clears a round trip does it at a z the rest of this site would not print: SPX500 (2.48× the spread, z = 0.60), GER40 (DAX) (1.41× the spread, z = 0.08).
⚠ The boundary is not doing the work either. Re-cut every day at midnight instead of 22:00 and the headline barely moves — the next day is 0.947× normal against 0.943, and the breakout gap is -0.27 points against -0.12. Both arms are in the file. So the most widely taught volatility setup in retail trading is the regression you get for free by selecting a minimum, it is weaker the tighter you make it, and its breakout is indistinguishable from breaking any level the same distance from the same open. There is no narrow-range surface anywhere on this site, and requests for one are answered by this section. Drives /data/coil.json, rebuilt weekly.
24. Does a candlestick pattern add anything?
After round numbers and the squeeze, this is the third thing retail trading teaches most, and the first two names anyone learns are the engulfing candle — a down day, then an up day whose body swallows it — and the pin bar, a candle with a long rejecting wick. Both are sold as reversals: the sellers are exhausted, buy the close.
Start with the plainest thing there is, so the level is not mistaken for a finding. Over 72,136 days, simply following whatever today did — no pattern, no geometry, no name — comes back at 48.62% against a base rate of 50.07%, below that base in 13 of 19 markets. The daily unit leans very slightly against continuation, and that is true of every day in the archive.
Now the pattern. The engulfing candle fires 9,944 times across 19 markets and is followed by its own direction 48.41% of the time — which is 0.21 points from what an unremarkable day already does. Against each market's own base rate the median z is -0.63 and 0 of 19 markets clear |z| ≥ 3; the largest anywhere is 2.91.
| market | engulfing days | followed through | this market’s base | z | vs the control | held one day (round trips) |
|---|---|---|---|---|---|---|
| AUD/USD | 807 | 44.86% | 51.61% | -2.91 | −3.23 | -3.42 |
| Silver (XAG/USD) | 607 | 44.81% | 53.22% | -2.40 | −2.25 | -1.07 |
| Gold (XAU/USD) | 761 | 46.39% | 53.03% | -2.14 | −1.78 | -3.19 |
| BTC/USD | 437 | 46.91% | 51.93% | -1.45 | −0.33 | -1.16 |
| USD/CHF | 453 | 46.80% | 51.79% | -1.39 | −2.92 | -1.67 |
| SPX500 | 193 | 45.08% | 55.27% | -1.28 | −5.07 | -5.55 |
| UK100 (FTSE) | 94 | 43.62% | 52.93% | -1.28 | −0.44 | -6.90 |
| GER40 (DAX) | 210 | 45.71% | 53.71% | -1.21 | −1.53 | -13.83 |
| USD/JPY | 668 | 48.35% | 51.75% | -0.86 | −1.21 | -2.55 |
| ETH/USD | 404 | 48.76% | 51.12% | -0.63 | +1.11 | -0.20 |
| EUR/USD | 859 | 49.01% | 50.36% | -0.57 | +0.11 | -0.60 |
| NZD/USD | 721 | 48.96% | 51.98% | -0.45 | −2.62 | -0.61 |
| USD/CAD | 870 | 49.43% | 50.37% | -0.32 | +1.69 | -0.43 |
| US30 (Dow) | 239 | 49.37% | 54.30% | -0.27 | +0.29 | -0.78 |
| GBP/JPY | 577 | 49.74% | 51.48% | -0.15 | +0.14 | -1.40 |
| NAS100 | 204 | 50.00% | 55.48% | -0.08 | +0.45 | -0.56 |
| GBP/USD | 758 | 50.79% | 49.93% | 0.44 | −0.39 | 0.92 |
| EUR/GBP | 346 | 51.45% | 49.52% | 0.56 | +1.72 | 1.67 |
| EUR/JPY | 736 | 53.26% | 51.41% | 1.66 | +4.66 | 3.77 |
And against the control, the geometry is worth nothing. On the 9,944 matched occurrences, days with the same two-day sequence and the same normalised size but no engulfing body ran at 48.90%; requiring the engulfing body gives 48.41%. That is −0.49 points for the shape itself, and per market the median gap is −0.39, positive in only 8 of 19. Held from the pattern day's close to the next day's close it returns -1.07 round trips in the median market, and 2 of 19 clear one.
| rung | the sequence alone | with the geometry | median market’s gap | markets it helps |
|---|---|---|---|---|
| 1× the prior body | 48.90% | 48.41% | −0.39 | 8 of 19 |
| 1.5× the prior body | 48.87% | 48.91% | −0.49 | 8 of 19 |
| 2× the prior body | 48.91% | 49.05% | −0.89 | 8 of 18 |
The pin bar is the same answer with a different shape. A hammer after a fall or a shooting star after a rise, with a rejecting wick at least 2× the body, fires 10,173 times and is followed by its own direction 50.18% of the time. Median z 0.09, largest |z| anywhere 2.59, and 0 of 19 markets clear the bar. Against days with the same prior direction and the same size but no wick: 50.24% → 50.18%, a gap of −0.05 points, positive in 8 of 19 markets.
⚠ Its ladder is the closest thing on this page to the folklore being right, and it is worth stating rather than skipping. Read per market, the pin bar's gap does climb with the length of the wick — −0.74, −0.36, −0.14 at 1.5×, 2×, 3× the body — which is the direction a believer would predict. Read pooled over the same occurrences it does not climb at all (−0.04, −0.06, +0.03), and the tightest rung is worth −0.14 points — against the +0.54 that section 8's holdout finds in ordinary hours, which is the weakest effect this site publishes as real and is itself less than a round trip. Two readings of the same numbers pointing opposite ways at a hundredth of a point is what nothing looks like when it is looked at three times.
⚠ The boundary moves the number, and not the verdict. Days are cut at 22:00 UTC rather than midnight, because section 19 showed what an arbitrary midnight cut does to a daily statistic. Re-cut at midnight, the engulfing candle runs 48.77% with the geometry worth −0.05 points and the pin bar 50.78% worth +0.58. The pin bar at midnight is the one figure in this section above section 8’s +0.54, and 0.63 points from the same pattern cut at 22:00 — so the choice of boundary moves it by more than its own size. It does not survive the rest of the test on that cut either: no market clears |z| ≥ 3 (largest 2.03), the gap is positive in 11 of 19 markets, and read per market its ladder runs +0.47, +0.27, +0.73, which does not climb. Both arms are in the file. So the most recognisable object in retail technical analysis performs indistinguishably from the ordinary day underneath it — and the ordinary day loses. There is no candlestick surface anywhere on this site, and requests for one are answered by this section. Drives /data/candle.json, rebuilt weekly.
25. Do Fibonacci retracement levels do anything?
After round numbers, the squeeze and the candlestick, this is the drawing tool retail trading teaches most: after a directional swing, price is said to retrace and react at 38.2%, 50% and 61.8% of the leg. It is a button in every platform. Like yesterday's high it is sold two incompatible ways at once — the level holds, or it breaks and the next one becomes the target.
A leg here is a confirmed 7-day fractal swing spanning at least 3× the market's own recent daily range. ⚠ Tracking starts at the confirmation bar, not at the swing: a swing high is only a swing high once the bars after it have failed to exceed it, so nobody could have drawn the levels any earlier. 1,649 legs across 14 markets — the equity indices drop out for want of history, not for want of an effect. The statistic is how far past a level the close sits 5 days after price first reaches it, as a percentage of the leg. Negative means it bounced, which is the folklore.
| level | times reached | penetration (% of leg) | bounced | vs its own fitted curve | 95% (leg bootstrap) | where that sits in the placebo |
|---|---|---|---|---|---|---|
| 23.6% | 1,554 | 24.33 | 18.7% | −0.241 | [-0.46, -0.02] | 50% |
| 38.2% | 1,285 | 16.02 | 25.8% | −0.803 | [-1.28, -0.34] | 18% |
| 50% | 1,005 | 9.49 | 31.1% | −0.555 | [-1.01, -0.13] | 29% |
| 61.8% | 658 | 3.55 | 39.7% | +0.018 | [-0.63, 0.72] | 75% |
| 78.6% | 255 | -4.96 | 57.6% | +1.491 | [-0.78, 3.67] | 93% |
The calibration is what makes this negative worth reading. The same machine was run on 28 ratios nobody has ever drawn, each treated as though it were famous. Their gaps average +0.147 with a spread of 1.70 points, and — the number to take away — 8 of 28 of them have an interval that excludes zero. That is this instrument's own false-flag rate, and it is why “the interval excludes zero” is not the test on this page. Measured properly, 0 of 5 famous ratios fall outside the central 95% of what the machine produces on a ratio nobody draws. They sit at the 50th, 18th, 29th, 75th, 93rd percentiles of it.
A second arm needs no level definition at all. If price stalls at the famous depths, then the places retracements actually stop should pile up there. Over 1,649 legs in equal one-point bins the famous depths run 23.6% +6%, 38.2% +26%, 50% −12%, 61.8% +10%, 78.6% −30% against their non-drawn neighbours — which sounds like something until the same excess is computed on 18 bins nobody draws, where it has a spread of 24% and reaches 65%. 0 of 5 famous bins are beyond that. With a median of 16 legs in a bin this arm cannot resolve anything smaller, and that is a statement about our sample rather than about the market.
⚠ What this could not have seen, stated rather than glossed. The placebo spread puts the smallest effect this test could distinguish at about 3.33 points of the leg — roughly 10 round trips at the median leg of 290. A large effect is ruled out. An effect worth a few pips is not, and no amount of history we hold would settle it, because the legs are the unit and there are only 1,649 of them. This is /coverage's minimum detectable lean on a different axis.
The horizon does not rescue it — the largest gap anywhere is 0.81 points at one day and 0.65 at ten — and neither does the swing definition: on an 11-day fractal, 2,295 legs give a largest gap of 1.57. Both arms are in the file. So the most widely drawn tool in retail charting marks levels that behave like the ratios beside them, and the version of this test a vendor would run flags a ratio nobody draws about 29% of the time. There is no Fibonacci surface anywhere on this site, and requests for one are answered by this section. Drives /data/fib.json, rebuilt weekly.
26. Does London break the Asian range and run?
Mark the high and the low of the Asian session. When London breaks one side, go with it. After round numbers and Fibonacci this is the most-taught day-trading setup in retail FX, and the nearest competitor sells an Asian session range report inside a catalogue that publishes no sample sizes, no intervals and no controls. It is the eighth report of that kind answered on this page.
First, it fires on everything. Across 59,037 sessions in 12 markets the range is broken on 93.9% of days in the median market — against 90.9% for a borrowed range, so even that small excess is same-day volatility and not a signal. A setup that triggers on nineteen days in twenty selects nothing, which is exactly what the opening range and the initial balance came back with.
Then the part that is actually traded. Given a break, the session closes beyond the broken level 54.13% of the time. That looks like an edge, and the plainest baseline does not explain it — London simply closes up 50.23% of the time. The control explains all of it. A borrowed level, broken in the same session, is closed beyond 54.76% of the time: once price has crossed a level it is already on that side and has the rest of the session to drift. Being the Asian high rather than an arbitrary level is worth −1.03 points, and only 1 of 12 markets beat their own control.
| market | sessions | broken | closed beyond | control | gap | z | break→close | control |
|---|---|---|---|---|---|---|---|---|
| USD/CAD | 5,949 | 96.1% | 50.67% | 52.86% | −2.18 | -3.31 | 0.47× | 2.20× |
| GBP/JPY | 4,188 | 94.6% | 54.07% | 56.04% | −1.98 | -2.51 | 3.47× | 5.00× |
| Silver (XAG/USD) | 5,166 | 94.9% | 45.26% | 47.03% | −1.77 | -2.48 | -0.80× | -0.50× |
| EUR/USD | 5,928 | 93.0% | 54.19% | 55.58% | −1.39 | -2.08 | 3.70× | 4.90× |
| GBP/USD | 5,235 | 92.5% | 55.29% | 56.45% | −1.17 | -1.64 | 5.75× | 7.92× |
| USD/CHF | 3,258 | 91.2% | 54.37% | 55.74% | −1.37 | -1.50 | 2.33× | 3.25× |
| NZD/USD | 5,185 | 95.3% | 52.74% | 53.61% | −0.86 | -1.22 | 1.00× | 1.50× |
| EUR/GBP | 2,471 | 92.4% | 55.02% | 55.90% | −0.89 | -0.86 | 2.42× | 2.58× |
| Gold (XAU/USD) | 6,054 | 96.3% | 52.58% | 52.96% | −0.38 | -0.59 | 1.09× | 1.34× |
| AUD/USD | 5,755 | 94.0% | 52.40% | 52.57% | −0.17 | -0.25 | 1.33× | 1.21× |
| EUR/JPY | 5,256 | 93.8% | 54.92% | 55.05% | −0.14 | -0.19 | 3.80× | 4.47× |
| USD/JPY | 4,592 | 93.3% | 55.02% | 54.47% | +0.56 | 0.73 | 3.50× | 3.30× |
Where it does reach significance it points the wrong way: 4 of 12 markets reach |z| ≥ 2 and 1 reaches 3 — and 4 of 4 of them sit below their control. The cost story agrees — the median market's break-to-close move is worth 2.38× its round trip and the control's is worth 2.92×, with 10 of 12 markets clearing one against 11 of the placebos. The second folklore claim, the false break, goes the same way: after breaking one side the session also breaks the other 38.4% of the time, against 38.9% for a borrowed level.
| Asian range | closed beyond | control | gap | break→close | control | gap |
|---|---|---|---|---|---|---|
| narrow | 54.09% | 55.45% | −1.39 | 2.96× | 3.45× | −1.25 |
| middle | 53.84% | 54.58% | −0.70 | 2.67× | 3.19× | −1.04 |
| wide | 52.98% | 54.06% | −0.64 | 1.88× | 2.06× | −0.53 |
⚠ What this could not have shown us. With about 4,632 breaks per market, a gap over the control would have to reach roughly 2.13 points before it cleared the bar this site publishes. A large effect is ruled out; an effect worth a fraction of a pip is not. ⚠ And 12 markets agreeing is not 12 observations — section 21 measured how much these markets move together. ⚠ 3.0% of sessions in the median market break both sides inside the same hourly bar; at H1 we cannot say which came first, so they are excluded rather than guessed at. Crypto is absent because it has no session, and the index markets because they do not trade the Asian hours — an overnight CFD book is not the Tokyo session. There is no Asian-range surface anywhere on this site, and requests for one are answered by this section. Drives /data/asianrange.json, rebuilt weekly.
27. Is "up" an artefact of where we cut the bar?
Every number on this site rests on one definition, and it has never been argued for: an hour counts as up when its close is above its own open. The cube builder has done it that way since the first file, and the flagged windows, the strategy board, the alerts and every section above inherit it.
There is an equally defensible alternative, and it is what a return actually is: an hour is up when its close is above the previous hour's close. The two agree exactly when a bar opens where the last one closed — and on a tick-derived feed they mostly do not. Across 1,738,751 bars the open differs from the previous close often enough that a median 3.5% of each market's price path falls between our bars, in no bucket at all.
The comparison is on identical bars. Close-to-close needs a predecessor exactly one hour earlier, so bars across a weekend, a holiday or a hole in the feed have none, and both arms are measured on that contiguous subset — otherwise the arms would differ in their sample as well as their definition and any churn could be either. The subsetting itself costs flags, and the cost is stated rather than hidden: 187 flags in these markets on the published grid, 169 on the shared sample.
And the control is the whole test, because flags would churn under this swap even if the convention meant nothing. Close-to-close is the bar's own move plus the inter-bar gap, and adding a tick-sized quantity to every move flips the sign of every bar that moved less than a tick. So the real gaps are scored against permuted ones — the same market's own gaps, the same multiset, the same amount of injected noise, dealt onto different bars. Everything about the gap survives except where in the week it lands. ⚠ A second control permutes gaps within deciles of |bar move|, so that a big gap still travels with a big bar: without it the plain permutation could charge the convention for a size pairing rather than for clock placement.
| market | flags | survive | control | beyond noise | path between bars |
|---|---|---|---|---|---|
| Silver (XAG/USD) | 37 | 20 | 27.74 | −7.74 | 22.3% |
| EUR/GBP | 15 | 10 | 14.68 | −4.68 | 6.6% |
| EUR/JPY | 7 | 2 | 5.84 | −3.84 | 3.3% |
| NZD/USD | 12 | 9 | 10.99 | −1.99 | 4.8% |
| EUR/USD | 11 | 9 | 10.20 | −1.20 | 4.6% |
| BTC/USD | 3 | 1 | 2.02 | −1.02 | 2.8% |
| Gold (XAU/USD) | 13 | 11 | 11.96 | −0.96 | 3.8% |
| USD/CAD | 17 | 15 | 15.84 | −0.84 | 3.9% |
| GBP/JPY | 7 | 6 | 6.62 | −0.62 | 4.1% |
| ETH/USD | 2 | 1 | 1.18 | −0.18 | 3.0% |
| USD/CHF | 15 | 14 | 13.96 | +0.04 | 3.5% |
| USD/JPY | 9 | 9 | 8.71 | +0.29 | 2.8% |
| GBP/USD | 9 | 8 | 7.50 | +0.50 | 3.1% |
| AUD/USD | 12 | 10 | 9.41 | +0.59 | 4.9% |
Where the disagreement lives, and it is not where it looked
The inter-bar gap is not spread evenly. The median market's mean signed gap stays within 0.04 of a round trip either way at every hour of the day except one: at 21:00 UTC it is −0.14 of a round trip — 3.6× the next-largest hour (23:00, +0.04) — and pointing down in 17 of 19 markets. That is the daily rollover, and this feed is bid-only — so it is the spread widening at the settlement minute, not a move anyone could have traded. Section 9 found the New York close worth about one tick of settlement spread inside a bar; this is the same artefact at the boundary.
The obvious next sentence is false, which is why it is here. If the rollover drives the churn, the flags that die should cluster there — and they do not. 34.1% of the 44 dying flags sit at 20:00 UTC or later, against 58.6% of all 169 flags, so a thin-band flag is under-represented among the casualties, not over-. Those windows carry the largest |z| this grid produces, and a large effect survives a small perturbation. What does predict a market's losses is duller and more useful: how much of its price path falls between its bars at all — rank correlation 0.459 across the 14 markets with flags. The market where that share is largest is Silver (XAG/USD) at 22.3%, 3.4× the next (EUR/GBP at 6.6%), and it is also the market that loses most beyond its control: 37 flags falling to 20 where its own control says 27.74. That is the market whose early years our own quality test already tells you not to trust.
Which convention is right — and the answer favours ours, for a reason we did not choose it for
Because the rollover artefact lands between bars, close-minus-open never sees it and close-to-close imports it wholesale. The definition this site picked without arguing for it turns out to be the one that is immune to a known bid-side artefact. We are not going to pretend that was foresight, and we are not rebuilding the grid either way: quietly restating published numbers is what the corrections log exists to prevent.
⚠ What it costs, stated plainly. Our grid is not a complete account of the price path. It describes an hour entered at its open and left at its close, flat across every boundary — and a median 3.5% of movement happens on the boundaries, attributed to nothing. A reader who holds through them gets that movement too, in whichever direction it went — and the where not to bother card on the dashboard already reports that taking every flagged window and holding it past the hour loses at every horizon we tested. ⚠ And 14 markets agreeing is not 14 observations — section 21 could not tell our 19 markets' flag counts from 19 independent ones, but that measures flags on the hour-of-week grid, not this test, and the markets' hourly returns still correlate as high as 0.94 (US30 (Dow) and SPX500). Drives /data/convention.json, rebuilt weekly.
28. What does one of our own flags actually read?
Every section above asks whether some effect is there. This one asks a smaller and more useful question that nothing on this site had answered: when we mark a window significant, what number is a reader actually looking at? We have advertised an answer for a year — 55–65%, on /about and in the FAQ — and it was typed from an early validation report and never compared against the grid we ship.
The unit here is the published one: a weekday × hour window with at least 300 candles and |z| ≥ 3 against that market's own up-rate. The grid holds 187 of them across 14 of 19 markets. Because a window that closes down 43% of the time is the same size of edge as one that closes up 57%, every reading is folded to the side it leans.
The control is the whole test, and without it the next paragraph is arithmetic rather than a finding. Windows in the thin band — the Sunday reopen, or 20:00 UTC onward — sit in smaller buckets: the rollover hour loses bars and the Sunday reopen is three hours a week. A smaller bucket cannot clear our bar unless it leans harder, so "the thin band reads stronger" is guaranteed before anyone measures anything. Each flag is therefore scored against the smallest lean its own sample size could have flagged at all, 3 × √(p(1−p)/n), and what the table reports is the excess over that floor.
| flags | median candles | median lean | floor its n imposed | excess over the floor | median reading | |
|---|---|---|---|---|---|---|
| thin band | 116 | 840 | 8.95 | 5.17 | 3.15 | 59.11% |
| ordinary hours | 71 | 1,051 | 5.49 | 4.63 | 0.96 | 55.37% |
The floor is higher in the thin band, exactly as the objection predicts — and it does not explain the gap. A thin-band flag clears its own floor by 3.15 points where an ordinary-hour flag clears it by 0.96. The thin band is genuinely stronger, not merely smaller.
The top of our own advertised range belongs to the hours we tell you not to trust
10 windows in the whole grid read past 65%, and every one of them is in the thin band — the New York close at 20:00–21:00 UTC, the rollover, or the Sunday reopen. Section 9 measured that band as worth about one tick of settlement spread on a bid-only feed, and section 8 found it carrying most of the edge that survives a holdout. ⚠ The strongest window in an ordinary trading hour, across 19 markets and 23 years, reads 59.27% — EUR/GBP Tue 18:00 UTC, on 496 candles — inside the band, and nowhere near the top of it.
| Market | Flags | In the thin band | Median reading | Median excess over floor |
|---|---|---|---|---|
| Silver (XAG/USD) | 38 | 16 | 56.73% | 2.24 |
| Gold (XAU/USD) | 20 | 14 | 56.65% | 1.96 |
| USD/CAD | 17 | 11 | 55.66% | 1.15 |
| EUR/GBP | 16 | 15 | 61.10% | 5.12 |
| USD/CHF | 16 | 15 | 59.75% | 3.80 |
| NZD/USD | 13 | 7 | 56.71% | 2.05 |
| EUR/USD | 13 | 6 | 55.59% | 1.22 |
| AUD/USD | 13 | 6 | 55.21% | 0.86 |
| USD/JPY | 11 | 6 | 56.66% | 1.25 |
| GBP/USD | 10 | 6 | 56.03% | 1.40 |
| EUR/JPY | 9 | 6 | 56.06% | 0.76 |
| GBP/JPY | 8 | 6 | 57.09% | 2.15 |
| BTC/USD | 2 | 1 | 58.66% | 1.15 |
| ETH/USD | 1 | 1 | 59.35% | 1.71 |
⚠ And "reads" is not "keeps". Everything above is measured on the same history that selected the windows, which is the most flattering test there is. Section 8 is the out-of-sample version: windows chosen before 2020 and scored only after it are worth +0.54 points in ordinary hours, z = 1.57 — less than a round trip. So the honest reading of this section is that an ordinary-hour flag reads about 55.37% on the history that found it, and what carries forward from that is a fraction of a point. The word this site used to attach to the advertised range was durable; that word has been removed from /about, and the range now says what it is — the size of the readings we flag, not a promise about the next one. Drives /data/flagsize.json, rebuilt weekly.
29. Does the golden cross pick a better moment than a coin?
The round number, the candlestick and the Fibonacci ratio have their sections above. The moving average is the fourth thing retail trading teaches most, and by some distance the most widely drawn — every charting platform puts one on the screen by default, and the golden cross, the 50-day average rising through the 200-day, is the only technical event that gets its own headlines in the financial press. Its mirror, the death cross, gets more of them.
The folklore makes two claims that need testing apart. The event: the crossing is a regime change, so buy the golden cross and sell the death cross. The state — the trend filter, and the more careful version — where the crossing is not the signal at all and the side of the line is. Measured on 18 markets and 72,540 trading days, cut at 22:00 UTC (section 19), with every move in multiples of that market's own round trip.
The event, against this market's own unconditional forward move
The control has to carry an extra weight here. This folklore was born on US equities, where the unconditional forward return is positive: a rule that is long most of the time inherits an edge that has nothing to do with any average. So the base column is the same market's own forward move over exactly the same pool of days, signed the way the events actually were — never zero, and never 50%. Then a second, harder control asks whether the cross picks a better day than a coin: the same number of events, in the same long/short proportion, dealt onto randomly chosen days 400 times, seeded so the file does not diff on every rebuild.
| Held | Markets | Crosses | Hit rate | Its own base | Net (round trips) | Base | Excess | Beat its own random-date control |
|---|---|---|---|---|---|---|---|---|
| 5 days | 16 | 404 | 49.01% | 50% | -4.863 | -0.022 | -4.841 | 0 above, 0 below (0.8 each on noise) |
| 20 days | 16 | 400 | 48% | 49.97% | -12.52 | -0.196 | -12.324 | 1 above, 2 below (0.8 each on noise) |
| 60 days | 16 | 396 | 48.99% | 49.96% | -6.842 | -0.532 | -6.31 | 0 above, 0 below (0.8 each on noise) |
Nothing. At every horizon the crossing wins about as often as its own base rate, and the markets that clear their own random-date control are no more numerous than noise produces. Pooled, the hit rate sits below its own base rate at all three horizons, each time by less than one standard error (1.97 points at most, against about 2.5); market by market it is below in 8 of 16 at every horizon — about half, which is a coin, so there is not even a direction here to make anything of.
The ladder, which is the internal control: is 50/200 special?
The claim is not "some pair of averages works". It is that these two numbers are the ones. So the same measurement runs over every (fast, slow) pair on a grid, and the question is whether the famous setting is a peak in that surface or an unremarkable point inside it — section 22's roundness ladder and section 25's placebo fractions, on the smoothing axis.
Across 108 pairs, 50/200 ranks 89th — the 17.8th percentile of its own family. The surface runs from 56.1 round trips at 30/150 down to -75.4 at 30/300, with a median of 2.7 and 58 of 108 pairs positive — about half, which is a coin. A spread that wide around a median that close to nothing is a surface with no shape, and the famous pair is not standing on a hill in it.
⚠ These are not independent draws and the page will not pretend they are. Neighbouring pairs cross within days of each other, so this is a position within a family of overlapping settings. It answers the claim that was made — that 50 and 200 are the numbers — and it is not a p-value for the family.
The event against the state, which is what the event claim actually adds
A golden cross is, by construction, the first day of a stretch in which the fast average is above the slow one. So the honest question is not "do the next 20 days pay?" but "do they pay more than the ordinary days of the same stretch?" — because that difference is the entire content of the timing instruction. In the median market the 20 days after a cross are worth -6.014 round trips against 3.35 for the state's ordinary days: a gap of -7.221, positive in 8 of 18 markets. The crossing day adds nothing to being on that side of the line.
The filter is the one arm that is not nothing — and 200 is not why
Over 68,922 market-days, the median market closes up on 52.3% of the days it spends above its 200-day average and down on 48.83% of the days below it. Stated once rather than twice: the up-rate above minus the up-rate below is 1.29 points, the same sign in 13 of 18 markets. That is a real tilt, it is small, it is measured on the history it is quoted from with no holdout, and it is the ordinary trend-following result rather than anything about averages.
Two controls say the average is not doing the work.
| Trailing window | Up-rate above minus below | Markets with the same sign |
|---|---|---|
| 50 days | -0.62 | 7 of 18 |
| 75 days | 0.02 | 9 of 18 |
| 100 days | 0.03 | 9 of 18 |
| 125 days | 0.43 | 12 of 18 |
| 150 days | 0.78 | 12 of 18 |
| 175 days | 1.02 | 13 of 18 |
| 200 days (the famous one) | 1.29 | 13 of 18 |
| 225 days | 1.14 | 12 of 18 |
| 250 days | 1.47 | 13 of 18 |
| 275 days | 1.33 | 14 of 18 |
| 300 days | 1 | 12 of 18 |
The tilt grows with the length of the window and then flattens; the best rung on this grid is 250 days, not 200. And the plainest baseline of all removes the averaging entirely: is today's close simply above the close 200 trading days ago? That question, with no moving average anywhere in it, is worth 1.31 points in the median market and carries the same sign in 14 of 18 — at least as much as the moving average itself. The average is a smoothing of a fact you can read off the chart without drawing it.
⚠ And it has to clear a cost. The rule's mean next-day move in its own direction is 0.5915 of a round trip in the median market, so it only survives by being held across many days without re-paying the spread. That is a claim about position management, not about timing, and it is not one this site sells: there is no moving-average surface anywhere here, and requests for one are answered by this section. Drives /data/ma.json, rebuilt weekly.
30. Does an oversold reading beat the fall that produced it?
The round number, the candlestick, the Fibonacci ratio and the moving average have their sections above. The relative strength index is the fifth thing retail trading teaches most, and it is the one that arrives with its numbers already chosen: 14 periods, buy under 30, sell over 70, on every charting platform's default indicator list. It is also the first oscillator on this page, and it makes the opposite claim to section 29 — the moving average says go with the move, RSI says fade the extreme. Both cannot be free money.
Measured on 19 markets and 73,456 trading days, cut at 22:00 UTC (section 19), with every move in multiples of that market's own round trip. A signal is the crossing into the zone, which is what the instruction says.
The control is the whole test, because RSI is a conjunction
"RSI below 30" is, by construction, "price has been falling for a fortnight". That term is an ordinary momentum fact with nothing to do with any oscillator, and any short-horizon behaviour in the daily unit would satisfy it on its own — which would make the indicator look predictive while contributing nothing at all. So the headline control is every day matched on the same trailing return that was never called oversold: the same size of fall, without the oscillator's verdict. That is section 24's conjunction control moved onto the momentum axis. 100% of signals found a control to be matched against, and the figure is published because a bin with no control days is a comparison that does not exist.
First, the naive arm — before any matching
| Held | Markets | Signals | Hit rate | Its own base | Net (round trips) | Base | Excess | Percentile of its own random dates |
|---|---|---|---|---|---|---|---|---|
| 1 day | 19 | 2096 | 50.14% | 49.47% | -0.181 | -0.522 | 0.341 | 58.3th |
| 5 days | 19 | 2090 | 49.43% | 49% | -0.347 | -2.611 | 2.264 | 71.5th |
| 20 days | 19 | 2081 | 49.3% | 48.48% | -7.355 | -10.385 | 3.03 | 64.5th |
The excess column is positive at every horizon, which is what a page selling this indicator would stop and quote. It is not a result. Against the same signals dealt onto randomly chosen days 400 times — all 19 markets pooled, so this is far better powered than any single market — the observed figure sits at the 71.5th percentile of its own null at 5 days. Nowhere near the edge of it.
Then the control that matters: matched on the fall itself
The mean move over 5 days is not the arm this archive can settle — the median market's interval on the matched gap is 85.37 round trips wide, and 1 of 14 markets separate above zero against 1 below. A couple of thousand signals settle a percentage; they do not settle a distance. So the up-rate is the number to read, and it is the folklore's own claim anyway: it bounces.
| At 5 days, pooled over 849 oversold signals | Closed higher |
|---|---|
| Oversold — RSI(14) crossed below 30 | 53.36% |
| A day that fell just as far and was never called oversold | 53.41% |
| The oscillator’s contribution | -0.05 points [-4.08 … 4.37] |
That interval covers zero comfortably, so the whole of the apparent bounce is the fall. The oversold day and the ordinary day that fell just as far are the same day as far as this archive can tell, and the indicator’s verdict adds nothing to the fall it is computed from.
The crossing against the state, which is what the instruction adds
"RSI dropped below 30" and "RSI is below 30" are different objects, and the whole content of the timing instruction is the difference between them. In the median market the 5 days after the crossing are worth 4.69 round trips against 15.68 for the ordinary days already in the zone: a gap of -7.576, positive in 7 of 19 markets. The crossing adds nothing to already being in the zone — if anything it is the worse of the two.
The ladder, which is the internal control and the point
The claim is not "some oscillator setting works". It is that 14, 30 and 70 are the numbers — and the folklore is explicit that more extreme is better, so the threshold ladder is a directional prediction that can grade the wrong way. Every (period, threshold) cell is therefore scored twice: raw, and matched on the fall.
| Buy below | Markets | Signals | Raw excess over drift (round trips) | Matched on the fall | Markets positive, matched |
|---|---|---|---|---|---|
| RSI(14) < 25 | 16 | 917 | 11.38 | -6.064 | 4 of 11 |
| RSI(14) < 30 (the famous one) | 19 | 2090 | 6.10 | -9.724 | 4 of 14 |
| RSI(14) < 35 | 19 | 3939 | 1.36 | 1.627 | 10 of 18 |
| RSI(14) < 40 | 19 | 6034 | -1.05 | 0.668 | 10 of 19 |
Raw, it grades exactly as the folklore predicts: tighter is better, cleanly, down the whole column. Matched on the fall, it does not — and it is at its worst on the rungs the folklore prizes most. The largest negative contribution on the ladder is -9.724 round trips, at RSI < 30. A ladder that grades only before its control is grading on the confound: a tighter threshold is simply a bigger fall, which is the exact quantity the matching removes. Section 23's coil ladder and section 26's narrowness ladder, met a third time.
⚠ And the rungs the folklore prizes most cannot be measured here at all. Of the 7 thresholds tested, 3 fire too rarely for three quarters of our markets to reach 20 signals — the tightest we can report is RSI < 25. That is stated rather than quietly dropped: showing only the rungs that had a sample would be showing only the easy half of our own ladder.
Across the whole grid of 28 cells, the famous 14/30 ranks 4 on the raw column — and that number is here rather than buried, because the raw column is the confound. A high rank in it is what the matching predicts, not evidence against it. ⚠ These are also not independent draws: neighbouring settings fire on nearly the same days, so this is a position within a family of overlapping settings and not a p-value.
And the plainest baseline of all
Remove the oscillator entirely: is today's close simply below its own close 14 trading days ago? That question, with no RSI anywhere in it, is followed by an up day 54.62% of the time in the median market at 5 days, against 54.76% for that market's oversold crossings — a little less than the indicator. Both figures are the median market; the pooled pair is in the table above.
⚠ RSI divergence is not tested, deliberately. It requires identifying swing highs and lows, which needs a lookback convention nobody agrees on — and a convention chosen by us here is how a convention becomes a finding. The same reason section 26 excludes sessions that break both sides inside one bar rather than guessing which came first.
There is no oscillator surface anywhere on this site, and requests for one are answered by this section. Drives /data/rsi.json, rebuilt weekly.
31. Which half of our own grid is doing the work?
Every number on this site is a weekday × hour bucket. Our own cube builder has cut the week that way since the first file and nobody ever argued for the weekday half of it. It is not a free choice: splitting each hour five ways multiplies the search space by five, and section 11 spends an entire specification curve defending the bar we then have to clear. If all the structure is hour of day — every market is quiet in Asia and busy over London — then "Thursday 13:00" is an hour statement dressed up at a resolution the data cannot support.
The two arms are symmetric, which is the point
Each of our publishable cells (n ≥ 300) is scored twice. Against the rest of its own hour pooled across weekdays: does the weekday add anything the hour did not already say? And against the rest of its own weekday pooled across hours: does the hour add anything the weekday did not? Neither axis gets the friendlier instrument, and a two-axis grid is justified only if neither marginal explains the other away.
| Does this axis add anything the other did not? | Windows clearing |z| ≥ 3 | A grid with no such structure | Ratio |
|---|---|---|---|
| The hour, beyond its own weekday | 192 | 6.0 | 32× |
| The weekday, beyond its own hour | 41 | 6.0 | 6.8× |
Both halves of the grid beat their own null, so the weekday split is not decoration and this section is not a retraction of the unit. But the hour axis carries 4.68× as much as the weekday axis does, on the same cells, with the same instrument. The null is simulated and seeded rather than taken from the textbook, because cell sizes here vary by two orders of magnitude — the Sunday reopen is three hours a week — and it lands where the analytic figure says it should, which is the calibration that licenses the ratios above.
And the placement is the finding
| Windows that are specific to… | In an ordinary trading hour | In the thin band | Ordinary share |
|---|---|---|---|
| their hour | 79 | 113 | 41.1% |
| their weekday | 7 | 34 | 17.1% |
The weekday half of this grid is very largely a thin-band phenomenon — the Sunday reopen, or 20:00 UTC onward, the hours this page has spent section 8 and section 9 warning about. That is the same shape as the holdout result arriving from a different direction: what survives a hard test here keeps landing in the hours where the spread is widest.
Listed in full, because there are only 7 of them — every window in 18 markets and this whole archive that is distinguishable from its own hour and sits in an ordinary trading hour:
| Market | Window (UTC) | Candles | This window | That hour, other weekdays | z |
|---|---|---|---|---|---|
| NAS100 | Thu 00:00 | 350 | 58.3% | 47.9% | 3.48 |
| USD/JPY | Fri 00:00 | 926 | 55.8% | 49.9% | 3.24 |
| GBP/USD | Fri 19:00 | 1,050 | 54.8% | 49.3% | 3.16 |
| BTC/USD | Thu 03:00 | 440 | 42.5% | 50.6% | -3.13 |
| EUR/USD | Thu 13:00 | 1,186 | 46.5% | 51.4% | -3.01 |
| BTC/USD | Sat 12:00 | 354 | 58.5% | 50% | 3 |
| ETH/USD | Fri 08:00 | 418 | 56% | 48% | 3 |
What that means for a window we publish
Of the 187 windows this site currently flags as significant, 28 are also distinguishable from their own hour. And with no test in it at all — no bar, no null, nothing that could be a power artefact — the median published window sits 6.58 points from its market's average hour and 3.02 points from that same hour on other weekdays. The hour accounts for 54% of the median published deviation.
So a reader shown "Thursday 13:00 leans up" is, most of the time, being shown something true about 13:00. The weekday is the resolution we display it at, not usually the reason it is there. That is not a reason to stop displaying it — the window a person trades has a weekday in it whether or not the weekday is what makes it unusual, and the table above shows the weekday axis does carry real structure — but it is a reason not to read the weekday as the explanation.
No two of these rows are the same window in two markets, so the list is as long as it looks.
Drives /data/weekday.json, rebuilt weekly.
32. Do yesterday's pivot points do anything?
The floor-trader pivot is the sixth object retail trading teaches most, after the round number (22), the candlestick (24), the Fibonacci ratio (25), the moving average (29) and the RSI (30) — and by one measure it is the most widely drawn price level of all: every broker platform ships a pivot indicator and many draw it on the chart by default. “Today's key levels” is a report this category sells by name. It is also the only one of the six with a genuine institutional pedigree — it is what pit traders computed by hand overnight — which is exactly the sort of provenance that keeps a claim alive without anybody testing it.
Like yesterday's high (section 6) it is sold two incompatible ways at once: the level holds, so fade it; or it breaks and runs, so trade the break. ⚠ Those two are complements of one statistic — given the level was reached, the day either finished beyond it or it did not — so at most one of them can be true, and the folklore asserts both. One measurement answers both claims.
The classic set, from the previous session's high, low and close: PP = (H+L+C)/3, R1 = 2PP−L, S1 = 2PP−H, R2 = PP+(H−L), S2 = PP−(H−L), R3 = H+2(PP−L), S3 = L−2(H−PP). Measured on 19 markets and 73,456 trading days (2003-05-04 to 2026-09-24), cut at 22:00 UTC (section 19), giving 149,082 level touches. ⚠ A level's side is taken from the geometry, never from its name: after a gap up, “R1” sits below today's open, and the folklore itself says a broken resistance becomes support.
First, does the setup select anything?
The pivot itself is reached on 71.27% of sessions in the median market, and the deepest resistance on 5.82%. So the headline level fires on most sessions, which means it selects almost nothing: an instruction that applies three days in four is not a filter. That is the same defect as the opening range (section 7, broken on 99.8% of days), the initial balance (section 20, 99.7%) and the Asian range (section 26, 93.9%) — a fourth setup in this category whose signal is almost always on.
The control encodes two things, and only one of them is the claim
| Given the level was reached, the day finished beyond it… | Rate | Gap vs the real set | 95% by year | Markets positive |
|---|---|---|---|---|
| the real pivots | 49.29% | — | — | — |
| a borrowed day’s set, range not matched | 48.7% | 0.59 | 0.381 … 0.847 | 16 of 19 |
| the same set with the donor’s range matched | 49% | 0.3 | 0.075 … 0.523 | 14 of 19 |
Against the naive control the pivots look real. Matching the donor’s range removes 49.9% of that gap — a share of two noisy gaps whose intervals overlap, so read it as “some of it” rather than to the point, and what is left is 0.3 of a percentage point — a residue whose interval only just clears zero (its nearer edge sits at 0.075). For scale, on those same days the market simply closes on the far side of its own open 77.22% of the time; a rate near 50 here is what an ordinary level looks like, not what a good one does.
Is it this level, or would any level around here have done?
The borrowed control destroys the day. It cannot say whether the price itself matters. So the whole set is slid up or down by 0.4 of yesterday's range — every level lands where nobody draws one, while the spacing, the scale and the sides all survive. That is section 22's phase-shifted lattice on the pivot axis.
| Reached | Finished beyond | Gap | Markets positive | |
|---|---|---|---|---|
| the real set | 29.19% | 49.7% | — | — |
| the same set, slid off the pivots | 29.9% | 49.47% | 0.08 | 10 of 19 |
A level a fraction of a range away from a pivot behaves the same as the pivot. Whatever small residue survives the borrowed control is not about these prices. ⚠ And this arm is a bound, not a point estimate: even with the distance floor below, the shifted levels that were reached sit at 0.779× the real ones’ distance from the open, and a nearer level is easier to finish beyond — so the comparison runs in the control’s favour.
The ladder is the internal control
The folklore has an explicit ordering: PP is the level, R1/S1 next, R3/S3 the ones even its believers call unreliable. An effect that grades with that ordering reads as order flow; a flat or scrambled surface reads as noise.
| Level | Reached | Finished beyond | Range-matched control | Gap | Touches |
|---|---|---|---|---|---|
| PP | 70.32% | 49.34% | 48.28% | 1.05 | 51,644 |
| R1/S1 | 42.72% | 49.1% | 49.28% | -0.18 | 62,746 |
| R2/S2 | 17.16% | 49.94% | 49.77% | 0.16 | 25,201 |
| R3/S3 | 6.46% | 48.6% | 48.9% | -0.29 | 9,491 |
It does not grade. The gap runs 1.05, -0.18, 0.16, -0.29 across PP, R1/S1, R2/S2, R3/S3 — a spread of 1.34 points with no order in it, and R1/S1, the second most famous pair on the chart, is negative. The levels are not ranked by anything the market can see.
What it is worth
Entering at each level in the direction it was broken and holding to the close returns 0.268 of a round trip in the median market, against 0.015 for the range-matched borrowed set — a net 0.115, positive in 12 of 19 markets. Trading it costs one round trip whatever it returns, so the gross break loses 0.732 of one per trade. ⚠ 6 markets do pay gross, and that is not a pivot result: breaking any level in a market whose daily range is many spreads wide returns more than a round trip, and only 4 of those 6 still beat their own borrowed set. A gross figure quoted alone would read as an edge in exactly the markets the control says it is worth least in.
⚠ A minimum distance of one round trip is applied to all three arms. A level sitting within a spread of today's open cannot be traded and is reached almost by definition, and it breaks the shifted control specifically — sliding a near level past the open leaves it near again on the other side.
⚠ The day is cut at 22:00 UTC rather than midnight, which is not incidental here: the cut decides what H, L and C even are. The midnight arm ships beside it and returns a gap of 0.2 points on 19 markets, agreeing in sign, so the conclusion does not rest on the boundary.
⚠ Not tested, deliberately: the alternative formulas (Camarilla, Woodie, Fibonacci pivots). They are the same object at slightly different distances, and the borrowed control already answers the question they raise — whether what matters is the formula or the day it was computed from.
There is no pivot surface anywhere on this site. Drives /data/pivot.json, rebuilt weekly.
33. What did the spread actually cost?
Every cost figure on this site divides by one assumed round trip per market — 1.0 pips for EUR/USD, 1.2 for USD/CHF — applied flat to every hour of twenty-three years. Section 12 was built around the fact that we could not do better: our hourly feed is bid only, so it said, in these words, that we cannot tell you what the spread was at 20:00 UTC on a Friday in 2011, and framed the whole thing as a sensitivity rather than a correction. Section 9 made the same admission when it inferred a settlement artefact it could not check from the other side.
⚠ That is no longer true of what we hold. Dukascopy's archive ships BID and ASK minute candles and we kept both, so for the 10 FX pairs our catalogue shares with that archive the spread is now a measurement: 1,402,796 market hours, each read at the minute it would have been entered and the minute it would have been left.
The assumed table is not too low. It is in the wrong places.
The obvious version of this finding would be dull — a spread table simply too generous everywhere. It is the opposite. Scored against each pair's own recent midday spread, which is what a modern retail figure is meant to be, our assumption sits 1.5× above it in 10 of 10 pairs, and in ordinary trading hours across the whole archive it runs 0.85× the measured figure in 9 of 10. As a flat number it is conservative: we have been over-charging the hours most people trade.
| Pair | We assume | Ordinary hours | Thin band | Thin vs its own ordinary | Recent midday |
|---|---|---|---|---|---|
| EUR/USD | 1 | 0.45 | 1.15 | 2.56× | 0.3 |
| GBP/USD | 1.2 | 1.05 | 2.25 | 2.14× | 0.8 |
| USD/CHF | 1.2 | 1.15 | 2.45 | 2.13× | 0.9 |
| USD/JPY | 1 | 0.5 | 1.3 | 2.6× | 0.45 |
| AUD/USD | 1.2 | 1.05 | 1.75 | 1.67× | 1 |
| USD/CAD | 1.5 | 1.3 | 2.3 | 1.77× | 1.2 |
| NZD/USD | 1.8 | 1.4 | 2.65 | 1.89× | 1.1 |
| EUR/JPY | 1.5 | 1 | 2.5 | 2.5× | 0.85 |
| GBP/JPY | 2 | 2.05 | 4.15 | 2.02× | 1.7 |
| EUR/GBP | 1.2 | 1 | 2 | 2× | 0.8 |
The thin band — the Sunday reopen, or 20:00 UTC onward, the hours this site already tells people not to over-trust — costs 2.08× each pair’s own ordinary hours, in 10 of 10 pairs with no exception. Measured against what we charge there, it runs 1.6× our assumption in 10 of 10. Section 12 asked what would happen if the real spread were half again what we assumed. In these hours it was.
Where the widening actually is
It is not spread across the evening. It sits at the two ends of the trading week, and it is side-asymmetric, which is why entry and exit are kept apart. Against each pair’s own quiet late afternoon, the last minute before the Friday close costs 2.71× (10 of 10 pairs) and the first minute of the Sunday reopen costs 7.39× (10 of 10). EUR/USD holds a 0.4-pip spread through the whole Friday afternoon and closes the week at 2.5.
⚠ This is section 9's inference, confirmed from the side it could not see. That section measured every market we hold closing DOWN in the named hour by about one pip, said the pattern read as settlement spread rather than direction, and had to add that a bid-only feed could not check it. The ask side says the spread in that hour is wider than the effect is.
The other end of the week runs the same way in reverse, and it is where our strongest readings live. In these ten pairs the grid flags 18 Sunday windows, and 18 of them lean up. A spread that is widest at the reopen and narrows through its first hour raises the bid by itself, so the same clean test applies. In the reopen hour (the first Sunday hour with trading, per day) the bid closes up in a median 62.6% of weeks and the ask in 42.1%: the bid above its own average past our bar in 10 of 10 pairs, the ask below its own in 9 of 10. The control is two hours later on the same Sunday, once the spread has settled: there the bid and ask up-rates sit a median 2.6 points apart, against 20.15 in the reopen hour. The mid sits a median 52.1%, up past the bar in 3 pairs and down in 0. So a small residual lean survives in a few pairs, but most of what the bid shows here is the spread closing, not the price rising. The metals, indices and crypto are not in the minute archive, so for them the Sunday reading stays unchecked.
And it is not a relic of 2003
The obvious way for this to be true for no reason is that spreads used to be wide everywhere and our archive starts in 2003. That control is the best moment in this section, because it points the other way. Between each pair’s first three usable years and 2020 onward, the midday spread fell by a factor of 2.21. Over the same span the thin band changed by a factor of 0.99.
| Pair | Midday, early | Midday, recent | Tightened by | Thin, early | Thin, recent | Tightened by |
|---|---|---|---|---|---|---|
| EUR/USD | 1.1 | 0.3 | 3.67× | 2 | 1.15 | 1.74× |
| GBP/USD | 1.65 | 0.8 | 2.06× | 2.5 | 2.85 | 0.88× |
| USD/CHF | 1.5 | 0.9 | 1.67× | 2.5 | 3.55 | 0.7× |
| USD/JPY | 1.25 | 0.45 | 2.78× | 2.25 | 1.9 | 1.18× |
| AUD/USD | 2.05 | 1 | 2.05× | 2.13 | 2.05 | 1.04× |
| USD/CAD | 2.05 | 1.2 | 1.71× | 4.5 | 3 | 1.5× |
| NZD/USD | 4 | 1.1 | 3.64× | 6 | 2.58 | 2.33× |
| EUR/JPY | 2.25 | 0.85 | 2.65× | 3 | 3.73 | 0.8× |
| GBP/JPY | 4 | 1.7 | 2.35× | 5 | 6.2 | 0.81× |
| EUR/GBP | 1.5 | 0.8 | 1.88× | 2.7 | 2.9 | 0.93× |
Twenty years of spread compression did not reach the ends of the week. Midday more than halved; the thin band is roughly where it was. In 10 of 10 pairs it tightened less than midday did, and in several it is wider now than it was. So this is not a fact about 2003 — it is a fact about the hours, and the gap between them has grown.
What it does to our own rules
A rule’s gross edge is the spread it breaks even at, which is what section 12 publishes. So each one can be re-costed at the spread its own window actually carried, on its own side. 99 of the 150 rows on the board are in a market with a minute archive; GER40 (DAX), Gold (XAU/USD), Silver (XAG/USD), US30 (Dow) are not, and keep the assumption.
| Costed at… | Windows we push | Median cushion | The whole board | Median cushion |
|---|---|---|---|---|
| our assumed spread | 12 of 12 pay | 1.27× | 99 of 99 | 1.25× |
| one flat measured figure per pair (control) | 12 of 12 pay | 1.65× | 97 of 99 | 1.61× |
| the spread its own window carried | 5 of 12 pay | 0.92× | 85 of 99 | 1.62× |
| its own window, 2020 onward only | 6 of 12 pay | 0.88× | 86 of 99 | 1.97× |
⚠ The control row is the one that decides what this means. At one flat measured number per pair, 12 of 12 windows still pay — every one that paid at the assumption. So none of what follows is “the table is too low”. Costed at the spread of its own window, 5 do. The difference between those two rows is entirely where in the week the cost sits, and 7 of the 12 windows we push are in the thin band.
⚠ And this lands on section 8, the most-quoted measurement here. The out-of-sample edge that survives is concentrated in the thin band — that section says so plainly — and the thin band is the part of the week whose cost we have been understating by about 1.6×. The surviving edge and the underpriced hours are the same hours.
What this figure is not
- It is one venue's spread. Dukascopy is an ECN and a retail broker’s markup sits on top, so every number here is a floor rather than an estimate of what you would pay. That makes the finding conservative, not generous.
- It covers 10 of our 19 markets. Metals, the indices and crypto have no minute archive here and keep the assumed figure; nothing above should be read across to them.
- The ask side of the archive is not sound everywhere, and the bad years are dropped whole rather than filtered: USD/JPY 2003, 2004, 2005; AUD/USD 2004, 2005, 2006; EUR/JPY 2003, 2004 report a non-positive spread on 13.2–89.2% of their minutes, against 0.62% at worst in everything kept. A zero spread is a missing ask candle and not a tight market — left in, they would have made the early era look cheap, which is the flattering direction to be wrong in. ⚠ The bar sits at 5%, and those two populations are why it is not load-bearing: nothing in the archive lands between them. Dropping the year whole rather than filtering its minutes is deliberate — the minutes that survive in AUD/USD 2005 are the one in nine where an ask happened to exist, which is a biased sample of that year and not a thin one.
- It is a median. Half the time you paid more, and the distribution has a long right tail.
Drives /data/spread.json, which carries the full 168-bucket grid for every pair. ⚠ Not rebuilt weekly — the minute archive is not refreshed weekly either, and the gate recomputes this section’s finding from the file rather than trusting the sentence.
34. Once a market has covered its average daily range, is the day done?
ADR exhaustion is one of the most-sold ideas in retail FX. Every platform ships an average daily range indicator, and the instruction that comes with it is the same everywhere: once today’s high–low has covered the average of the last 14 days, the room is used up — do not chase the move, look to fade it. That is two claims: the day is unlikely to extend much further, and price turns back through the ADR level.
On 17 markets and 67,530 trading days (2003-05-23 to 2026-09-25, crypto excluded because it has no session to exhaust), a day reaches its 14-day ADR on 42.15% of sessions. Having got there, it goes on to cover another 25% of an ADR on 53.63% of those days — more often than not, which is the opposite of used up, and closes back through the ADR level on 51.41%.
| multiple of ADR | days reaching it | go a further 25% ADR | same, on 1.0×’s hours | close back through it (same hours) |
|---|---|---|---|---|
| 0.6× | 58,925 | 67.39% | 53.91% | 51.4% |
| 0.7× | 51,948 | 61.32% | 52.78% | 51.6% |
| 0.8× | 43,806 | 57.68% | 52.85% | 51.58% |
| 0.9× | 35,725 | 54.9% | 52.79% | 51.28% |
| 1.0× — the ADR | 28,466 | 53.63% | 53.63% | 51.41% |
| 1.1× | 22,240 | 52.96% | 54.46% | 51.12% |
| 1.2× | 17,273 | 52.67% | 55.41% | 51.25% |
| 1.3× | 13,402 | 52.38% | 56.22% | 51.02% |
| 1.4× | 10,333 | 52.57% | 57.31% | 50.83% |
There is no ceiling at the ADR. Against the mean of its two neighbours on the same hours, 1.0× differs by 0 points [-0.37 to 0.36, resampled by calendar year across every market at once]. 10 of 17 markets sit below their neighbours at 1.0×, which is what a coin does. Nor does price turn back more at the ADR: the fade differs from its neighbours by 0.2 points [-0.1 to 0.51], and the whole ladder spans 0.77 points — a close lands back through any level the day has just made about as often.
Matched on time, going further gets more likely the further a day has already gone: from 53.91% at 0.6× to 57.31% at 1.4× (3.41 points, [1.78 to 4.83]). A day that has covered its range by a given hour is a big day, and section 16 measured that big stays big. Reaching the ADR early is evidence the day is large, not that it is spent.
The day here is cut at 22:00 UTC (section 19). The midnight arm ships beside it: 1.0× against its neighbours reads -0.15 points on 17 markets, the same answer, so it does not rest on the boundary.
⚠ Not tested, deliberately: ADR periods other than 14 and the “weekly ADR”. Each is the same claim at a different denominator, and a denominator picked after seeing the result is how a convention becomes a finding. There is no ADR surface anywhere on this site. Drives /data/adr.json, rebuilt weekly.
What we will not publish
- Any annual or six-month seasonal claim with a significance flag. A 23-year archive contains 23 observations of an annual effect. Detecting a 4pp "sell in May" effect in EUR/USD would need about 41 years of data; we hold 19 years of usable history for that question. The same archive holds tens of thousands of observations of "EUR/USD in the 14:00 hour" — same file, and one question is answerable while the other is not. The difference is entirely which unit the question is asked in.
- Any UK100 (FTSE) bucket as a signal. See above: it cannot clear our own minimum.
- A direction for month-end. We can tell you the hour gets busier. Nothing in our data tells you which way it goes.
- A streak as a reason to act. Persistence in a window does not decay with lag, so it is drift rather than memory, and it is worth under a point either way.
- Silver's early era as though it were sound data.
How to check us
The data is Dukascopy hourly bars, 2003–2026, aggregated into public cubes you can download from this site (example) — the same files the dashboard reads. The three tests on this page are scripts in the repository: test-snoop.js, test-era.js and test-monthend.js. Every table here is generated from their output, so a data refresh updates the page rather than the page being maintained by hand. Measured on bars through 2026-09-25.
The same discipline applied to other people's claims lives at /myths, and per-symbol write-ups at /blog.