Evidence

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.

187significant buckets found
6expected from pure noise
31.4×the ratio — see the correction below before reading it as a win
7markets that fail our own test

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.

MarketBuckets testedOwn up-rateFoundNoise expectsp
EUR/USD12150.1% 130.3<0.00025
GBP/USD12149.9% 100.3<0.00025
USD/CHF12049.9% 160.3<0.00025
USD/JPY12150.7% 110.3<0.00025
AUD/USD12150.1% 130.3<0.00025
USD/CAD12149.8% 170.3<0.00025
NZD/USD12150.0% 130.3<0.00025
EUR/JPY12150.9% 90.3<0.00025
GBP/JPY12051.2% 80.3<0.00025
EUR/GBP12049.2% 160.3<0.00025
Gold (XAU/USD)12051.0% 200.3<0.00025
Silver (XAG/USD)12049.5% 380.3<0.00025

All 12 FX and metals markets clear the null by a wide margin — and clear it at 0.0028, which is 0.05 divided by the 18 markets tested, so the win is not an artifact of running the test 18 times. A grid that had merely been searched hard would land near the "noise expects" column. This one is nowhere near it.

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.

MarketFoundNoise expectsp
BTC/USD20.4 0.0680fails
ETH/USD10.5 0.3673fails
US30 (Dow)00.3 1.0000fails
NAS10000.3 1.0000fails
SPX50000.3 1.0000fails
GER40 (DAX)00.3 1.0000fails
UK100 (FTSE)not one bucket reaches our 300-sample minimum — largest 201cannot be tested

sit under 0.05 alone but not under the corrected bar, which is what "marginal" means here: interesting, not established. We are not going to call them a result.

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.

What this correction cost us, stated plainly. Until this page was rebuilt on 2026-09-27, the null was drawn at each market's own rate while the observed count was scored against a flat 50% — the null was charged for drift and the observation was not. Scored the old way the same cubes return 190 buckets instead of 187, and the difference is not spread evenly: it is GBP/JPY 9→8, Gold (XAU/USD) 23→20, US30 (Dow) 1→0, NAS100 3→0, SPX500 1→0, GER40 (DAX) 1→0, BTC/USD 4→2. The equity indices lose every bucket they had. Those were the numbers on our own dashboard, and they were drift wearing a significance flag. They are gone from every surface as of today.
This is a power result, not an absence result, and the distinction is the honest part. An index would need a window at 60.2% — against its own 52.2% baseline — before our bar could call it. Real effects of three to five points could sit in the indices untouched and this test would never see them. "We cannot demonstrate hour-of-week structure in equity indices" is the correct claim. "There is none" is not.

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:

MarketMedian bucketIts average hourSmallest gap we can flag
Gold (XAU/USD)n = 1,212 51.0% 4.3pp → 55.3%
USD/CADn = 1,191 49.8% 4.3pp → 54.2%
EUR/USDn = 1,187 50.1% 4.4pp → 54.4%
AUD/USDn = 1,154 50.1% 4.4pp → 54.5%
EUR/JPYn = 1,051 50.9% 4.6pp → 55.5%
GBP/USDn = 1,047 49.9% 4.6pp → 54.6%
Silver (XAG/USD)n = 1,041 49.5% 4.6pp → 54.1%
NZD/USDn = 1,039 50.0% 4.7pp → 54.6%
USD/JPYn = 918 50.7% 5.0pp → 55.7%
GBP/JPYn = 838 51.2% 5.2pp → 56.3%
USD/CHFn = 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/GBPn = 495 49.2% 6.7pp → 56.0%
BTC/USDn = 436 50.9% 7.2pp → 58.1%
ETH/USDn = 418 49.8% 7.3pp → 57.2%
NAS100n = 348 52.3% 8.0pp → 60.3%
SPX500n = 348 52.2% 8.0pp → 60.2%
UK100 (FTSE)— 51.0% 11.0pp → 62.1%

A bucket sitting a point off its market's baseline cannot reach our board however real it is — the sample cannot carry it. That is a limitation, and it is also the reason a number that does reach the board is worth reading. Note what the middle column does to the indices: NAS100 would need a window at 60.4% before we could call it, because 52.3% is merely Tuesday.

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?

151buckets we flag today
96%still lean the same way
56%still clear |z| ≥ 3 on half the data

The second figure is stronger than it looks: halving a sample cuts z by about √2 even when the effect is perfectly stable, so a bucket at z = 3.5 pooled is expected to land near 2.5 on one half and fail this test while being entirely real.

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.

Market2003–20132014–2026ChangeSignificant, era 1Significant, era 2
EUR/USD2.83pp 2.85pp1% 89
GBP/USD2.50pp 2.88pp15% 310
USD/JPY3.11pp 2.55pp-18% 95
AUD/USD3.02pp 2.75pp-9% 148
USD/CAD2.86pp 2.76pp-3% 1310
NZD/USD3.11pp 3.25pp4% 118
EUR/JPY2.45pp 2.76pp13% 19
GBP/JPY2.61pp 2.91pp11% 29
Gold (XAU/USD)2.88pp 3.13pp9% 916
Silver (XAG/USD)5.81pp 4.02pp-31% 3318
All ten3.12pp2.98pp -4%103102
Excluding silver2.82pp2.87pp 2%7084

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.

MarketMonth-end fix vs ordinary fixtDirection (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.730.03
GBP/JPY 113% 1.440.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.620.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.

Busier is not the same as up. On direction, only 2 of 14 markets reach |z| ≥ 2 and they point opposite ways — about what 14 tests produce by chance. Month-end tells you the hour will be busier. It does not tell you which way. The dashboard flags it as activity, and says so.

Two parts of the folklore do not survive. "GBP/USD is the preferred expression" is not supported — GBP/USD and EUR/USD are 132% and 132%, and the largest effect is USD/CHF. And the documented flow concentrates in a five-minute window while we measure a whole hour, so what we see is a diluted shadow of the real thing.

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.

MarketRelease hour vs other FridaystDirection (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.

And not one market reaches |z| ≥ 2 on direction. Not one of 18. The most-watched scheduled number in this market moves everything, violently, and our 23 years say nothing whatsoever about which way. If a single figure on this page is worth remembering, it is that one: busier and tradeable are different words.

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.

Groupmean zwindows
FX Majors0.29483
FX Minors0.341724
Metals0.923240
Indices0.01443
Crypto0.009331

The indices and crypto sit at zero, which is consistent with everything else on this page: those are the markets where we cannot demonstrate hour-of-week structure at all.

So there is no streak feature here, and there will not be one. The strongest single window in the whole test — NZD/USD on a Friday, 21:00 UTC — goes 56.9% after an up week against 28.1% after a down one. That looks like a product. With 2221 windows tested, it is also exactly what the tail of chance looks like, and we would be selling you the tail.

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.

Withinweekend gap fillsordinary move of the same size fills
4 hours75%70%
24 hours89%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.

The indices do something different, and it is the opposite of the folklore. Across 5 index markets the weekend gap fills 55% of the time within four hours against 69% for a size-matched ordinary move — the gap is less likely to close than a normal move that size. An index that gaps tends to keep going. We are not building a feature on that either: these are the same markets where section 1 cannot demonstrate hour-of-week structure at all.

So there is no gap-fill report here. The measurement is published instead, which is the only thing this page is for.

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 low50.4%
A matched ordinary level50.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.

15 of 19 markets point the same way, and that is weaker evidence than it looks. A sign test on nineteen independent markets would be conclusive. These are not independent: /data/correlation.json puts US30 (Dow) and SPX500 at r = 0.94, NAS100 and SPX500 at 0.93 in hourly returns, and the FX majors in clusters of their own. Nineteen correlated markets agreeing is closer to a handful of observations agreeing, and we would rather say so than count them as nineteen.

The instructive part was the first attempt, which is recorded because it is the more useful half. Its "matched ordinary level" was placed at the open plus the distance to yesterday's extreme — arithmetic that reproduces the extreme itself. It reported a difference of exactly 0.0 points in all nineteen markets. Perfect agreement everywhere is never a finding; it means the two things being compared are one thing.

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.

A span is not a coverage, and ours has holes in it. Between 2015-01-01 and 2026-07-22 those four markets have 12,056 weekdays between them and our archive holds 65.2% of them — 4,195 are simply not here. The cause is our own download rather than the feed or the market: it was built on defaults under which a throttled request returns an empty answer and no error, and the feed serves minute data one day per file, so every refusal lost a whole day. The control is the hourly archive, a different download of the same ticks: it shows trading on 99.3% of EUR/USD's missing days against 97.6% of the days we do hold, so these are lost files and not quiet sessions. ⚠ They are not spread evenly — we hold 52.9% of the weekdays before 2020 against 74.6% from 2020 on — so the sessions below are weighted toward the recent half of that span. What they are not is a selection: which days we lost was decided by the order we asked in, not by anything that happened in the market that day, which is what the control tests.

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 edge51.4%
A matched ordinary level51%

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.

The cost decides what is left of it. The median opening range is about 0.12% of price — roughly 14 pips on EUR/USD — so entering at the edge means paying the spread for a move that has already happened. Whatever the remaining fraction of a point is worth, it is smaller than the round trip needed to collect it.

Three reports tested now — the weekend gap, yesterday's high, the opening range — with the same instrument each time: compare the famous level against an ordinary one the same distance away. None of the three survives it. That is not a claim that markets are random; the rest of this page is a claim that they are not. It is a narrower and more useful finding: these particular lines carry no information beyond where they sit.

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.

WindowsHoldout candlesEdge
picked · thin band6516,396+9.75 ptsz = 24.96
picked · ordinary hours6720,993+0.54 ptsz = 1.57
not picked · thin band13440,226+2.85 ptsz = 11.43
not picked · ordinary hours933283,5950 ptsz = 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.

And here is the uncomfortable half. Nearly all of that surviving edge sits in the hours this site already tells you not to over-trust. In ordinary hours — the ones with normal spreads, which is to say the ones anybody would actually trade — what survives out of sample is 0.54 points on 20,993 candles, z = 1.57. That is not significant, and half a point of up-rate does not pay a round trip. The large, repeatable, out-of-sample effects are concentrated exactly where the spread is widest.
Hour (UTC)WindowsOut-of-sample edge
Sun 223+19.0 pts
Sun 215+18.5 pts
2027+13.4 pts
234+9.2 pts
2115+8.4 pts
014+5.6 pts
085-1.3 pts
125-2.1 pts

This is the same conclusion the validation report reached from a completely different direction — the strongest signals cluster at the rollover, where liquidity is thin — but it is stronger, because nothing here was fitted to the data it is measured on. It is also why this site flags those hours rather than selling them, why the strategy board separates schedule from drift, and why every window carries its spread. A seasonality grid is a real thing. It is a much smaller real thing than this category implies.

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.

MarketUp-rate in that hourzMedian moveRound tripLean ÷ cost
EUR/JPY47.3%-4.92-0.41.50.21×
EUR/USD45.9%-6.22-0.510.24×
GBP/JPY45.6%-6.97-120.39×
Silver (XAG/USD)37.9%-16.27-1.230.42×
Gold (XAU/USD)44.5%-9.86-1.1630.45×
USD/JPY46.6%-5.27-0.410.52×
GBP/USD43.6%-8.96-11.20.66×
NZD/USD39.5%-14.91-1.31.80.69×
AUD/USD41.3%-13.11-11.20.82×
EUR/GBP36.5%-12.43-11.20.83×
USD/CAD40.7%-13.85-1.51.50.99×
USD/CHF33.3%-18.56-1.81.21.72×
The median bar in the New York close hour is about one pip down. Not one pip of trend — one tick, and in five of the twelve markets it is exactly −1.00. A move that lands on the same round number in instruments with nothing else in common is the signature of a quoting effect at the daily settlement, not of anyone's view on the euro. In 11 of 12 markets the lean is smaller than the round trip that would be needed to collect it.

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.

The dashboard names the hour now rather than leaving it as a number, on both UTC hours it lands on, with the share of days for each. The other three named hours were measured at the same time and none of them behaves like this: the London 4pm fix leans in 3 of 12 markets, the two opens in 1 and 1. They are the biggest hours of the day for size — the London open moves 2.23× the typical hour, the New York open 2.53× — and they say nothing at all about direction, which is exactly what section 7 of this page found about the opening range.

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.

MarketMonthsSlots testedClear |z| ≥ 3Null expectsStrongest slot
EUR/USD2742600.06day 5, z = -2.61
GBP/USD2422600.05-5 from end, z = 2.93
USD/CHF1512500.04-5 from end, z = -2.45
USD/JPY2122600.06day 12, z = 2.29
AUD/USD2672600.1-5 from end, z = 2.78
USD/CAD2752600.07-4 from end, z = -2.11
NZD/USD2402600.09day 10, z = -1.87
EUR/JPY2432600.04day 17, z = -2.53
GBP/JPY1942600.04day 12, z = 2.92
Gold (XAU/USD)2812600.07day 16, z = -1.66
Silver (XAG/USD)2432600.07day 19, z = -2.09
Not one slot in 285 clears the bar, against 0.7 the shuffled labels produce — which clear it at least once in 49.5% of runs, so one or two here would be the null behaving rather than an axis appearing. Not a weak result — nothing at all, from the same instrument, on the same markets, at the same significance bar that finds 187 buckets against 5.9 expected on the hour-of-week grid at the top of this page. The strongest single slot anywhere is z = 2.93, which on 285 tests is what luck looks like.

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.

MarketTurn of monthvs restzThird Fridayvs other Fridaysz
EUR/USD49.36%50.4%-0.6249.08%49.46%-0.11
GBP/USD50.21%49.54%0.3747.28%48.83%-0.42
USD/CHF51.99%50.79%0.5352.03%46.53%1.18
USD/JPY51.18%52.22%-0.5544.55%46.71%-0.55
AUD/USD52.72%51.12%0.9448.48%50.11%-0.46
USD/CAD50.45%49.88%0.3554.78%49.02%1.67
NZD/USD52.5%51.73%0.4350.21%51.93%-0.46
EUR/JPY51.44%51.81%-0.2147.3%48.78%-0.4
GBP/JPY52.45%51.78%0.3446.35%48.68%-0.57
Gold (XAU/USD)54.27%53.13%0.6955.6%57.28%-0.49
Silver (XAG/USD)54.63%52.87%0.9952.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.

So there is no day-of-month page here, and there will not be one. That is not a claim that the calendar is meaningless everywhere — equity markets have documented turn-of-month effects that FX may simply not share, and our archive is FX, metals and a few indices. It is the narrower statement this site is built to make: we can measure it, we did, and there is nothing here to sell you. The hour-of-week grid earns its place on this site by clearing a bar the day-of-month grid cannot get near — and the only way to know which is which is to run both.

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| barFoundNoise expectsRatioOut-of-sample windowsOOS edgeOOS z
1502.0414107.563.8×23100
1502.526929.369.2×128+0.491.94
1503.01906.3829.8×68+0.551.61
1503.51461.1132.7×42+0.390.89
1504.01030.15687.5×23-0.01-0.01
2002.0404103.013.9×23100
2002.526528.129.4×128+0.491.94
2003.01896.1130.9×68+0.551.61
2003.51461.05138.6×42+0.390.89
2004.01030.14717.9×23-0.01-0.01
3002.0400101.064×224+0.050.28
3002.526227.589.5×127+0.491.92
3003.0187631.2×68+0.551.61
3003.51441.03139.3×42+0.390.89
3004.01020.14724.7×23-0.01-0.01
5002.032866.384.9×202-0.02-0.1
5002.521918.1212.1×117+0.451.74
5003.01613.9440.9×66+0.541.55
5003.51200.68176.7×41+0.340.76
5004.0840.09908.5×23-0.01-0.01
8002.028053.785.2×77+0.391.28
8002.518614.6812.7×45+1.032.56
8003.01323.1941.4×24+0.731.32
8003.5940.55170.9×16+1.041.53
8004.0620.07827.7×7+1.081.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×.

The ratio column is not a score, and the highest number in it is the least interesting. Raising the bar shrinks the noise expectation far faster than it shrinks the count, so "908.5× at 500/4" is arithmetic, not a better product. Any specification curve invites exactly this misreading and it is worth saying out loud on the page that publishes one.

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.

The point of publishing this is not that our settings win. They do not win anything — they are mid-table on the column that matters and far from the top of the column that does not. The point is that you can see the whole surface and check that nobody went looking for the peak.

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.

MarketWindowGrossAssumed spreadBreaks even atCushion
EUR/USD11:00 · Mon–Fri111 pips1×
AUD/USDFri 09:001.211.21.21 pips1.01×
EUR/GBP20:00 · Mon–Fri1.251.21.25 pips1.04×
EUR/GBPMon 20:001.31.21.3 pips1.09×
EUR/USDMon 20:001.1611.16 pips1.16×
USD/CHFThu 20:001.441.21.44 pips1.2×
EUR/GBPTue 20:001.491.21.49 pips1.24×
AUD/USDWed 00:001.51.21.5 pips1.25×
EUR/USDTue 02:001.2811.28 pips1.28×
EUR/GBPWed 20:001.661.21.66 pips1.38×
EUR/USDWed 11:001.411.4 pips1.4×
GBP/USDFri 19:001.81.21.8 pips1.5×
USD/CADFri 20:002.321.52.32 pips1.55×
EUR/JPYThu 13:002.881.52.88 pips1.92×
USD/CHFFri 20:002.711.22.71 pips2.26×
The median rule we push as an alert clears its assumed cost by 1.25×. If the real spread were half again what we assume — an ordinary retail account rather than an institutional one — 12 of the 15 stop paying. At double the assumption, 14 of 15 do. The one rule with real margin is USD/CHF Fri 20:00 at 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.

The practical reading: these rules were chosen on the first 70% of their history and are still net-positive on the 30% held back — a filter we applied, not evidence that survived — and every gross edge and cushion above is measured on the history that chose them, which is the most flattering place to measure it (the board states the same method). Even there they are thin. A rule clearing its cost by a quarter is one commission change, one widened session or one bad fill away from nothing. That is why this site sells a description of when a market moves rather than a signal service — and why the strategy board now prints the break-even beside every net figure instead of leaving it to be inferred.

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.

MarketRank correlationFit era's top 10Every other hourStill in the top 20Inside the busy band
EUR/USD0.9731.82×0.99×9 of 100.774
GBP/USD0.9641.81×1×9 of 100.881
USD/CHF0.9621.82×0.99×9 of 100.835
GBP/JPY0.9391.58×0.96×10 of 100.892
US30 (Dow)0.932.64×1.1×10 of 100.89
USD/JPY0.9291.7×1.03×9 of 100.875
GER40 (DAX)0.9291.83×0.99×10 of 100.788
EUR/JPY0.9271.57×0.98×9 of 100.823
USD/CAD0.9251.98×0.99×10 of 100.956
AUD/USD0.921.59×0.98×9 of 100.836
EUR/GBP0.8931.72×1.07×5 of 100.711
NZD/USD0.8851.52×0.97×9 of 100.839
Gold (XAU/USD)0.8762.12×0.99×10 of 100.956
Silver (XAG/USD)0.812.08×0.99×10 of 100.923
BTC/USD0.4341.18×1.05×3 of 10-0.364
ETH/USD0.2871.18×1.04×4 of 10-0.278
It holds, and by a distance direction never approaches. The median rank correlation between the two eras is 0.927. The ten biggest hours picked using the fit era alone were worth 1.81× the holdout's median hour, against 0.99× for every other hour — and 9 of 10 were still in the holdout's own top twenty. Nothing about which way an hour closes comes close to that.

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.

Crypto is the exception, and it is the useful kind. BTC and ETH come back at 0.434 and 0.287 across the week, and negative inside the busy band. Their movement structure is as unstable as their direction structure — so the picker's warning about those two markets is not only about which way they close.

Read this against section 12 before treating it as a green light. Knowing which hours move is not the same as being paid for it: the rules built on this archive still clear their assumed cost by about a quarter. What section 13 establishes is narrower and it is the thing this product sells — the timetable is real and it stays put. Which way the market goes when it arrives is a different question, and this page has already answered it.

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.

PeriodMarketsShape (rank correlation)Worst marketLevel vs its own year
Jan–Mar180.9120.7951.071×
Apr–Jun180.9490.8091.005×
Jul–Sep180.9530.8110.945×
Oct–Dec180.9440.8080.977×
August only150.9150.6090.946×
The shape holds all year. The weakest median rank correlation in any period is 0.912, against each market's own all-year ranking. Which hours a market travels in is not a seasonal property — so a pooled timetable is the right object to publish, and the hours-ahead strip is as true in August as in November.

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.

And it is not universal, which is the more interesting half. 3 of the 18 markets are busier in August than in their own average month — GER40 (DAX) runs 1.313×. A claim about "the summer" that does not name a market is a claim about the wrong thing.

Our myths page tests the summer claim for direction and finds nothing, which is the usual answer on that axis. This is the same folklore measured on the axis it was always really about — how much the market moves — and there the answer is a small, uneven, and genuinely present effect.

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.

ClockWindows clearing the barIn the blockEverywhere elsez-mass in the blockTop three hours holdBlock sits at
UTC1871157258764.2%20:00 21:00 22:00
New York1671224568378.7%16:00 17:00 18:00
London1661264068377.2%21:00 22:00 23:00
Sydney133924141561.9%06:00 07:00 08:00
an arbitrary moving clock134.798.536.1———

Each market nominates its own three strongest hours, so "the block" is self-calibrating rather than a band named in one clock — naming it in UTC would hand the UTC row its own answer. The arbitrary clock is a null: 200 random calendars per market that shift a contiguous stretch of each year by one hour, matched to the real share of shifted days, so only the changeover dates are arbitrary. The denominators match — UTC 2221, New York 2227, London 2225, Sydney 2222 windows tested — so nothing above is a difference in how much was looked at.

No wall clock finds more than UTC. 187 windows clear the bar in UTC against 167 in New York and 166 in London. We are not hiding an effect that a trading-floor clock would reveal, which is the answer this section was written to be able to give either way.

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.

Sydney is the control, and it is the reason this is a finding. New York and London change their clocks within a fortnight of each other, so they are not two independent tests — their near-identical numbers are a consistency check, not corroboration. Sydney shifts in the opposite season. It finds 133 windows, against 134.7 from an arbitrary clock — indistinguishable — and its block holds 415 of z-mass, below UTC's 587. So the sharpening is not what any moving clock does. It is specifically the calendar the northern desks keep.

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.

Why we are keeping UTC. It clears the most windows on our own published bar; it is the only one of the four that does not move, so a bucket means the same thing across all 24 years rather than two things per year; and the block where a wall clock genuinely wins is already the band this site warns about on every surface — section 9 resolves the New York close through New York's own clock precisely because of this, and finds it worth about one tick of settlement spread. What would change our mind is a wall-clock arm beating UTC outside the block. None does. The UTC arm above reproduces the cubes this site ships exactly, in 19 of 19 markets, which is what makes the other three worth reading.

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.

MarketWindowsAfter a big hourAfter a quiet hourGapp
EUR/USD1354.66%56.61%-1.950.025
GBP/USD1055.8%56.31%-0.510.652
USD/CHF1658.36%61.12%-2.760.007
USD/JPY1155.93%57.87%-1.940.098
AUD/USD1355.01%56.82%-1.810.015
USD/CAD1755.75%57%-1.250.087
NZD/USD1355.74%59.62%-3.880
EUR/JPY955.47%56.13%-0.660.568
GBP/JPY855.7%58.42%-2.720.03
EUR/GBP1661.61%64.07%-2.460.02
Gold (XAU/USD)2055.29%56.17%-0.880.245
Silver (XAG/USD)3855.14%58.14%-30
BTC/USD258.65%58.38%0.270.963
ETH/USD159.34%59.12%0.221
The answer is the opposite of the intuition, and it is small. A flagged window is less reliable after a big hour, not more: 55.85% against 57.89% after a quiet one, 12 of the 12 markets carrying five or more windows leaning the same way. The same split applied to windows we did not flag moves 0.21 of a point, so the split itself is not doing it.

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.

And it does not pay in either state. Measured as a multiple of each market's own round trip — never pooled pips — the edge is 0.7888× after a big hour and 0.6907× after a quiet one. Both are under 1. There is no setting of this filter that turns a flagged window into a trade, which is the same answer section 8 and the holding-period test give from two other directions.

⚠ Two cautions on the table above. The markets are not independent — several are dollar pairs and the metals move together — so 12 of 14 agreeing is not 14 observations, and the per-market p is measured against that market's own shuffled labels rather than corrected across the set. And the two axes genuinely disagree: direction is better after a quiet hour, size is better after a busy one. Neither "trade the busy hours" nor "trade the quiet ones" survives both.

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.

MarketFlagged windowsSurvive the correctionMedian inflation
EUR/USD13111.0508
GBP/USD1091.0478
USD/CHF16141.0407
USD/JPY11101.0432
AUD/USD1391.0806
USD/CAD17161.0333
NZD/USD13121.0813
EUR/JPY971.0401
GBP/JPY871.0361
EUR/GBP16161.0577
Gold (XAU/USD)20191.067
Silver (XAG/USD)38331.3077
BTC/USD221.033
ETH/USD111.0205
They are not quite independent, and the correction is small but real. The median window carries an inflation of 1.0401 — which is the same thing as saying our published bar of |z| ≥ 3 is really about |z| ≥ 3.06. Of 187 flagged windows, 166 survive it.

⚠ 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.

The part that matters for reading the site: we mostly already told you. 13 of the 21 windows this kills are already marked on the line on the dashboard — their |z| sits within 0.3 of the bar, and that warning has been there since we started keeping a revision record. 8 are not, and those are the only ones this measurement is news about: windows that look comfortable and are held up by weeks that repeat each other.

⚠ Scope. This is dependence within a window, which is what the per-window z assumes. It says nothing about dependence between windows — adjacent hours of the same day are different buckets — and that is handled where it matters by the permutation test, whose null preserves each market's own structure rather than assuming the windows are independent of each other. ⚠ Silver (XAG/USD) is the outlier at 1.3077, and it is also the market whose early years our own quality test tells you not to trust — the two warnings are about the same feed. ⚠ We have not moved the bar. Choosing a threshold after seeing which windows it kills is the error section 11 exists to refuse; the correction is published so you can apply it, not applied quietly so the numbers look better.

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.

The visible half of this was a plain falsehood, and it is fixed. The hours-ahead strip mapped "no size figure" straight onto "closed", so every weekend it told a Bitcoin reader the market was shut for the next eight hours. Our own rule — a closed hour is drawn as closed, never as zero — exists to stop us printing a number where there is no market. Printing "closed" where there is one is the same mistake pointing the other way. The strip now asks the cube which of the two it is looking at.

So before publishing weekend figures we measured what is in them. 69,315 real hourly BTC bars and 67,394 ETH, from 2017 on.

MarketWeekend share of barsWeekend vs weekday hourWeekend hour vs round tripHour-shape ρ, weekday vs weekendControl ρ, weekday vs weekdayBiggest hour, weekday → weekend
BTC/USD24.8%0.84×2.76×0.6470.89714:00 → 00:00
ETH/USD26.0%0.80×2.60×0.6890.91314: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.

But the timetable itself does not carry across it, and that is the finding. Correlating the 24-hour movement profile of the weekday half against the weekend half gives 0.647 for BTC and 0.689 for ETH. ⚠ The control is what makes those numbers mean anything. Split the weekdays into two halves by alternating weeks — same days, same estimator, no weekend involved — and the same measurement returns 0.897 and 0.913. In the FX and metals markets, which have no weekend at all, it returns a median of 0.991. The weekend profile is a genuinely different shape, not a noisier copy of the same one.

⚠ 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.

⚠ What this changed, and what it cost. The movement file now carries Saturday and Sunday for the two markets that trade them — 48 of 48 weekend cells in BTC/USD and 48 of 48 weekend cells in ETH/USD — and every surface that reads it followed: the hours-ahead strip, the biggest-windows list, the screener's size ranking, the cross-market card and the extension. ⚠ It moved published numbers, which is why it is a correction and not a silent edit. A market's "own typical hour" is the median of its own cells, and the weekend hours it had been ignoring are smaller than its weekday ones, so that denominator fell — BTC/USD from 64.7 to 61.1 pts, ETH/USD from 48 to 45 pts — and every multiple quoted against it rose by about 5.9% and 6.7%. ⚠ Not one weekday cell moved: this is a wider week, not a re-measured one. And the pooled hour-of-day curve is still Monday to Friday in all nineteen markets, including these two, because the finding above is that their weekend shape is a different shape — averaging the two into one curve would produce a third that describes neither. Drives /data/crypto.json and /data/range.json.

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.

The naive answer: the day's high forms in the first hour. Cut the day at midnight UTC and the opening hour holds more of the day's highs than any other hour in 14 of 19 markets. It is a real count, it would make a confident chart, and it is an artefact of two things that have nothing to do with the market.

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.

Not one market keeps midnight. Of the 19 markets, zero still shows 00:00 as its busiest hour for the day's high. 7 simply follow the cut to 22:00 — the edge effect, moving with the edge exactly as predicted. And the rest land somewhere far more interesting: with the arbitrary boundary gone, 6 of 19 markets put the day's high inside the London–New York overlap. The honest version of this report only appears once the artefact is removed.
MarketDaysBusiest hour (midnight cut)ShareControlBusiest hour (22:00 cut)Hours beyond the control
EUR/USD5,93200:009.5%10.4%14:005
GBP/USD5,23900:009.0%9.6%14:006
USD/CHF3,26000:009.6%9.5%14:003
USD/JPY4,59400:0019.4%16.3%22:0011
AUD/USD5,67000:0014.3%14.2%22:006
USD/CAD5,95014:009.3%7.8%14:009
NZD/USD5,18800:0014.0%13.4%22:008
EUR/JPY5,25800:0016.3%14.8%22:005
GBP/JPY4,19000:0014.5%13.5%22:005
EUR/GBP2,47100:008.3%9.4%07:009
Gold (XAU/USD)6,05400:009.6%11.2%13:009
Silver (XAG/USD)5,21600:0010.8%10.1%13:0012
US30 (Dow)2,20919:0010.5%8.8%19:001
NAS1001,72919:0011.3%8.3%19:005
SPX5001,72819:0013.4%9.3%19:001
GER40 (DAX)2,05100:0010.4%11.4%07:003
UK100 (FTSE)91507:008.7%8.9%19:000
BTC/USD2,87600:0015.3%14.3%22:004
ETH/USD2,80800:0016.1%14.9%22:004

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.

The one clean positive: all three lean the same way, and 2 of 3 clear our bar. The last hour of the US cash session — 19:00 UTC, 3pm in New York — holds the day's high more often than direction alone implies: US30 (Dow) 10.5% against a control of 8.8% (z 2.82), NAS100 11.3% against a control of 8.3% (z 4.5), SPX500 13.4% against a control of 9.3% (z 5.74) — US30 (Dow) leans the same way and is short of our bar of 3. ⚠ And it is not an artefact of where we cut the day: under the 22:00 boundary it gets stronger in NAS100 and SPX500 and is essentially unchanged in US30 (Dow) (2.82 to 2.79), and 2 of 3 clear the bar (z 2.79, 5.5, 6.73). This is the closing auction, and it is the one place in this whole test where a named session hour earns its reputation.

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.

⚠ What this is for. Knowing that the day's high tends to form in the overlap tells you when, never where — it says nothing about the level, and a session that produces the high on 13% of days produces it on 87% of days somewhere else. Treat it as a statement about when a market is finished moving, not as an instruction. Drives /data/hilo.json, rebuilt weekly. ⚠ Days need 18 real hourly bars to count, which drops holiday half-sessions and the Sunday reopen.

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.

The open is resolved through each market's own clock, every day. There is no "first hour" of a currency day in UTC — section 19 is an account of what happens when you pretend there is — so FX and metals use the London open and the index markets use their own cash open, both resolved with Intl so daylight saving cannot shift them. ⚠ Crypto is excluded: it has no open, and inventing one is the mistake this note exists to avoid.

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.

There is no effect. Across 17 markets the median gap over the control is -0.11 percentage points, the median z is -0.11, and not one market reaches even |z| ≥ 2 — the strongest anywhere is Gold (XAU/USD) at 1.44. This is the flattest result on this page. A green first hour tells you what a green first hour tells you: that the first hour was green.
MarketSessionsGreen first hour → green sessionControlΔzOne side of the IB breaksControlNeither side breaks
EUR/USD5,92948.3%48.4%-0.1-0.1447.2%45.0%0.27%
GBP/USD5,23650.4%49.6%+0.80.8147.1%44.4%0.32%
USD/CHF3,25851.1%51.4%-0.2-0.1946.2%44.5%0.37%
USD/JPY4,59252.5%52.1%+0.30.3346.7%43.4%0.41%
AUD/USD5,73948.8%49.2%-0.4-0.4745.1%43.9%0.14%
USD/CAD5,94949.2%50.1%-0.8-0.934.9%35.6%0.05%
NZD/USD5,18750.2%50.3%-0.1-0.1144.5%43.6%0.10%
EUR/JPY5,25650.6%50.3%+0.30.2951.5%48.5%0.51%
GBP/JPY4,18852.9%52.1%+0.80.7150.7%47.4%0.26%
EUR/GBP2,47147.5%47.7%-0.2-0.1447.9%47.1%0.20%
Gold (XAU/USD)6,05851.8%50.5%+1.31.4437.2%35.4%0.13%
Silver (XAG/USD)5,20452.6%53.1%-0.5-0.4732.4%35.6%0.04%
US30 (Dow)2,82751.9%53.3%-1.4-1.168.1%68.1%1.87%
NAS1001,67957.0%56.4%+0.60.3570.3%70.0%2.50%
SPX5001,67955.3%53.9%+1.40.8266.0%65.8%1.67%
GER40 (DAX)2,72852.8%52.9%-0.1-0.0463.0%61.9%1.25%
UK100 (FTSE)98649.9%51.9%-2.0-0.9263.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.

⚠ What we take from it. Two points of tilt toward a one-sided session is real and is not a trade — it is smaller than every spread on our board. The honest use of the first hour is as a range, not as a signal: it tells you roughly how far this session is likely to travel, which is the axis that survives out of sample, and it tells you nothing about which way. Drives /data/firsthour.json, rebuilt weekly. ⚠ Index sessions are five hours after the first full hour, not eight — the US cash session closes at 16:00 New York, and asking for eight silently dropped all three index markets from the first version of this test.

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.

The null, and the only thing that changes between the two arms. Every bar keeps its own instant. What gets permuted is the map from instants to clock labels: the bar that really happened at Monday 09:00 is scored into whatever weekday × hour some other randomly chosen instant carries. In the first arm one permutation is shared by every market, so two markets that moved together on a Tuesday afternoon still land in the same pseudo-bucket and their flags stay correlated. In the second, each market gets its own — which is exactly what adding up nineteen separate nulls assumes. Same estimator, same code, same 1,500 draws, same seed. Any gap between the arms is the cross-market dependence and nothing else.

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.

meansd95thmaxP(≥ what we see)
total flags — one null per market5.782.421016< 1 in 1,500
total flags — one null shared5.682.411017< 1 in 1,500
markets with ≥ 1 flag — per market4.91.87811< 1 in 1,500
markets with ≥ 1 flag — shared4.851.9813< 1 in 1,500
The correction is too small to tell from none. Sharing the permutation moves the variance of the total by 0.996×, with a bootstrapped 95% interval of 0.891–1.116. That is a mean pairwise correlation between markets' flag counts of -0.0002, and it makes our 19 markets worth 19.1 effective independent ones (17–21.3). ⚠ The interval runs from 0.891 to 1.116 and contains 1.00, so we cannot rule out that the inflation is zero — which is the honest way to state a small effect rather than rounding it up into a finding.

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.

The control, and why this one can be made unusually clean. A round number is not just any price: it is a price on a regular lattice whose spacing is one big figure (100 pips). So the null is the same lattice, phase-shifted onto prices nobody calls round — 1.1037, 1.1137, 1.1237. Same spacing, same number of levels, the same bars, and near enough the same distribution of distances from an hour's open to the next level up. Every property of the geometry survives the shift; the one thing that dies is roundness. ⚠ The 80 control offsets are the whole-pip offsets that are not multiples of five, so no semi-round level is ever inside the null — those are measured separately, below, because whether the effect grades with roundness is what separates order flow from an accident at one offset.

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.

marketcrossingsclosed beyondcontrolmove pastcontroldistance-matcheddifferencezvs spread
EUR/USD25,83548.77%46.99%0.60-0.02-0.03+0.6255.80.63×
USD/JPY18,55848.42%47.12%0.740.150.14+0.5904.20.59×
GBP/USD27,99649.64%48.28%0.760.290.29+0.4703.40.39×
AUD/USD23,02747.36%46.27%0.03-0.27-0.28+0.3033.00.25×
EUR/JPY30,20548.12%47.36%0.410.050.05+0.3632.70.24×
USD/CAD24,57348.70%47.94%0.330.070.07+0.2582.40.17×
NZD/USD18,78647.17%46.21%-0.17-0.36-0.37+0.1891.90.10×
Gold (XAU/USD)52,86248.85%47.82%1.320.740.76+0.5821.80.19×
EUR/GBP5,72144.92%43.96%-0.17-0.42-0.42+0.2441.80.20×
GBP/JPY32,47047.36%47.00%-0.03-0.24-0.24+0.2151.40.11×
GER40 (DAX)23,28349.24%49.20%0.650.340.35+0.3021.10.20×
SPX5004,89650.94%49.99%0.400.210.21+0.1900.90.27×
USD/CHF10,54748.53%47.60%0.260.100.10+0.1590.80.13×
US30 (Dow)37,47349.72%49.55%1.050.830.82+0.2260.50.11×
BTC/USD82,95549.35%49.46%3.042.922.90+0.1270.10.01×
NAS10021,01749.93%49.67%0.580.570.57+0.0150.00.01×
Silver (XAG/USD)24,84936.24%36.46%-2.66-2.66-2.71−0.002-0.0-0.00×
ETH/USD71,21148.76%49.08%2.712.852.85−0.148-0.2-0.01×
UK100 (FTSE)4,03849.75%50.01%0.170.270.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.

The internal control: how round does the level have to be? Median over 12 FX and metals markets, in pips over the shifted-lattice null.
levelpips 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 pips0.000
every 5 pips+0.001
Only the two levels the folklore actually names show anything, and the half figure sits between the big figure and nothing. The levels people also draw — every ten pips, every five — are worth 0.000 and +0.001 pips, which is to say they are indistinguishable from an arbitrary price. A gradient that follows how round a number is, rather than a spike at one offset, is what makes this look like order flow rather than noise.

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.

The control, and there are three, because there are three ways this can be true for no reason.

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.

marketNR7 daysthe day itselfnext daynext ÷ itselfsize-matched controlgapalso neighbourhood-matchedbreakout gapz
Gold (XAU/USD)9170.6171.0471.66×0.917+0.130+0.118-1.51-1.00
Silver (XAG/USD)7750.6601.0061.47×0.899+0.107+0.068-0.82-0.50
GBP/USD7500.6221.0041.62×0.842+0.162+0.0840.790.47
EUR/USD8780.6180.9891.57×0.950+0.039+0.043-1.06-0.69
NZD/USD7490.6300.9881.52×0.899+0.088+0.0941.670.99
AUD/USD8230.6310.9711.52×0.895+0.076+0.083-2.18-1.35
USD/CAD8620.6160.9671.60×0.878+0.089+0.0510.200.13
EUR/JPY7440.6130.9511.57×0.849+0.102+0.059-0.12-0.07
USD/CHF4740.6100.9451.53×0.892+0.053+0.0960.950.46
GBP/JPY6670.6240.9431.47×0.801+0.143+0.0910.270.15
NAS1002590.6120.9411.59×0.775+0.166+0.0740.060.02
EUR/GBP3520.6490.9341.47×0.889+0.045−0.0440.450.18
USD/JPY7110.5920.9191.54×0.840+0.079+0.001-1.76-1.00
US30 (Dow)3410.5870.9001.51×0.787+0.113+0.037-0.73-0.29
UK100 (FTSE)1340.6570.8931.42×0.751+0.201+0.861-3.56-0.88
GER40 (DAX)3120.6110.8871.46×0.811+0.076−0.0220.220.08
SPX5002600.6130.8831.46×0.790+0.093+0.0351.750.60
ETH/USD4340.5180.8541.56×0.746+0.108+0.066-0.27-0.12
BTC/USD4290.5120.8341.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.

The internal control: the tighter the coil, the bigger the spring? The folklore is explicit that tighter is better, so the same claim is run at three tightnesses.
rungthe selected daythe next dayabove that market's normal
NR40.6910.9704 of 19
NR70.6160.9433 of 19
NR200.5130.8950 of 19
It grades, cleanly and monotonically, the wrong way. The tightest rung — the narrowest day in 20 — is followed by the smallest day of the three, and 0 of 19 markets have it above normal. A tighter coil buys a quieter tomorrow. That is what the second control predicts and what a released spring does not.

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.

The control is the whole test, because a pattern is a conjunction and only one term is the pattern. A bullish engulfing day is three things at once: yesterday closed down, today closed up, and today's body covers yesterday's. The first two are an ordinary two-day sequence with nothing to do with candlesticks — any short-horizon behaviour in the data satisfies them on its own, and would make the pattern look predictive while the shape contributed nothing. So the control is every day that satisfies the first two terms and not the third: same sequence, no geometry. It is matched again on size, because an engulfing candle is by construction a big candle and big days are not ordinary days. And the base rate is always that market's own, never 50%.

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.

marketengulfing daysfollowed throughthis market’s basezvs the controlheld one day (round trips)
AUD/USD80744.86%51.61%-2.91−3.23-3.42
Silver (XAG/USD)60744.81%53.22%-2.40−2.25-1.07
Gold (XAU/USD)76146.39%53.03%-2.14−1.78-3.19
BTC/USD43746.91%51.93%-1.45−0.33-1.16
USD/CHF45346.80%51.79%-1.39−2.92-1.67
SPX50019345.08%55.27%-1.28−5.07-5.55
UK100 (FTSE)9443.62%52.93%-1.28−0.44-6.90
GER40 (DAX)21045.71%53.71%-1.21−1.53-13.83
USD/JPY66848.35%51.75%-0.86−1.21-2.55
ETH/USD40448.76%51.12%-0.63+1.11-0.20
EUR/USD85949.01%50.36%-0.57+0.11-0.60
NZD/USD72148.96%51.98%-0.45−2.62-0.61
USD/CAD87049.43%50.37%-0.32+1.69-0.43
US30 (Dow)23949.37%54.30%-0.27+0.29-0.78
GBP/JPY57749.74%51.48%-0.15+0.14-1.40
NAS10020450.00%55.48%-0.08+0.45-0.56
GBP/USD75850.79%49.93%0.44−0.390.92
EUR/GBP34651.45%49.52%0.56+1.721.67
EUR/JPY73653.26%51.41%1.66+4.663.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.

The internal control: is a bigger engulfing a stronger signal? The folklore says so explicitly, so the same claim runs at three strengths — how many times yesterday's body today's must cover. It does not grade, and the two ways of reading it disagree with each other, which is what nothing looks like.
rungthe sequence alonewith the geometrymedian market’s gapmarkets it helps
1× the prior body48.90%48.41%−0.398 of 19
1.5× the prior body48.87%48.91%−0.498 of 19
2× the prior body48.91%49.05%−0.898 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.

The control is the whole test, and here it can be made unusually clean. A retracement level is a fraction of a leg. So the null is the same leg, the same bars, the same forward window, at a fraction nobody draws — 41.5%, 57.0%, 64.5%. It is still a level inside the same swing, reached by the same retracement, at nearly the same distance from the same price. The one thing that dies is the ratio's fame. That is section 22's phase-shifted lattice moved onto the retracement axis. The fractions people do draw without Fibonacci — the halves, thirds, quarters and tenths — are kept out of the null and reported separately, because an effect on both sides of a comparison is not a comparison.

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.

leveltimes reachedpenetration (% of leg)bouncedvs its own fitted curve95% (leg bootstrap)where that sits in the placebo
23.6%1,55424.3318.7%−0.241[-0.46, -0.02]50%
38.2%1,28516.0225.8%−0.803[-1.28, -0.34]18%
50% (not Fibonacci)1,0059.4931.1%−0.555[-1.01, -0.13]29%
61.8%6583.5539.7%+0.018[-0.63, 0.72]75%
78.6%255-4.9657.6%+1.491[-0.78, 3.67]93%
⚠ The obvious version of this test manufactures a finding, and the first cut of ours did. Penetration falls by about half a point for every point of ratio — a level near the leg's origin has less room left to run past before the leg is dead — and the drawn ratios that must be excluded from the null are not evenly spaced, so the usable neighbourhoods are lopsided: 61.8%'s average 59.1 and 78.6%'s average 81.7. Averaging them reported 61.8% holding 2.9 points better than its surroundings, interval excluding zero, in every market that could be measured. That was the slope restated, not a level. The null here is fitted — a local quadratic in the distance from the ratio, read at zero — and what the fit still leaves behind is measured rather than assumed.

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.

50% is the discriminator, and it is the reason this was worth running. 50% is not a Fibonacci ratio. It is in every Fibonacci tool by convention, inherited from Dow's half-retracement, and it is also the roundest fraction there is. So the stories make different predictions and can be told apart: if the mathematics is real, 38.2 and 61.8 beat 50; if it is chartists moving the price, then 50 — the most drawn and the roundest — is at least as strong. What comes back is the four true Fibonacci ratios averaging +0.116 and 50% at −0.555, neither distinguishable from a ratio nobody draws. Neither story gets support.

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.

The control is the whole test, and it has two halves. A bigger London session breaks any level more often, so the control keeps this day's London session bar for bar — same path, same size, same everything — and hands it a different day's Asian range as an offset from the London open. Both marginals survive exactly: the same ranges, the same sessions, and only the link between the two dies. ⚠ And the pairing is local, drawn from within 60 trading days, because volatility regimes move over 23 years and a 2008 range dropped onto a 2019 session would go unbroken for reasons that have nothing to do with the Asian session. ⚠ The Asian window is the one session that needs no clock resolved: Japan keeps no daylight saving, so Tokyo 09:00–15:00 is 00:00–06:00 UTC every day of the year. London is not fixed and is resolved through its own clock per day.

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.

marketsessionsbrokenclosed beyondcontrolgapzbreak→closecontrol
USD/CAD5,94996.1%50.67%52.86%−2.18-3.310.47×2.20×
GBP/JPY4,18894.6%54.07%56.04%−1.98-2.513.47×5.00×
Silver (XAG/USD)5,16694.9%45.26%47.03%−1.77-2.48-0.80×-0.50×
EUR/USD5,92893.0%54.19%55.58%−1.39-2.083.70×4.90×
GBP/USD5,23592.5%55.29%56.45%−1.17-1.645.75×7.92×
USD/CHF3,25891.2%54.37%55.74%−1.37-1.502.33×3.25×
NZD/USD5,18595.3%52.74%53.61%−0.86-1.221.00×1.50×
EUR/GBP2,47192.4%55.02%55.90%−0.89-0.862.42×2.58×
Gold (XAU/USD)6,05496.3%52.58%52.96%−0.38-0.591.09×1.34×
AUD/USD5,75594.0%52.40%52.57%−0.17-0.251.33×1.21×
EUR/JPY5,25693.8%54.92%55.05%−0.14-0.193.80×4.47×
USD/JPY4,59293.3%55.02%54.47%+0.560.733.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.

The internal control, and it is where the run got interesting. The folklore is explicit that a tight Asian range makes the better break, so days are split into terciles by range width against that market's own trailing 60 sessions. It grades in the folklore's direction — narrow days give the biggest post-break move. And so does the control, by more. A narrow range sits closer to the London open, is broken earlier, and has more session left to drift beyond it; a borrowed narrow range does the same thing. The gap is negative at every rung.
Asian rangeclosed beyondcontrolgapbreak→closecontrolgap
narrow54.09%55.45%−1.392.96×3.45×−1.25
middle53.84%54.58%−0.702.67×3.19×−1.04
wide52.98%54.06%−0.641.88×2.06×−0.53
That is the same confound section 6 and section 23 had to control for, arriving a third time: a nearer level is crossed earlier, and earlier leaves more room. Measured against distance, the compression story contributes nothing.

⚠ 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.

125 of 169 flagged windows (74%) survive the swap — same cell, still clearing the bar, still leaning the same way. The control keeps 146.7 (86.8%), and the size-matched control 146.2 — so the two agree and the size pairing explains none of it. 21.7 flags beyond noise depend on where the gaps actually land, z = -6.98, below every one of 100 draws. 10 of 14 markets lose more than their own control.
marketflagssurvivecontrolbeyond noisepath between bars
Silver (XAG/USD)372027.74−7.7422.3%
EUR/GBP151014.68−4.686.6%
EUR/JPY725.84−3.843.3%
NZD/USD12910.99−1.994.8%
EUR/USD11910.20−1.204.6%
BTC/USD312.02−1.022.8%
Gold (XAU/USD)131111.96−0.963.8%
USD/CAD171515.84−0.843.9%
GBP/JPY766.62−0.624.1%
ETH/USD211.18−0.183.0%
USD/CHF151413.96+0.043.5%
USD/JPY998.71+0.292.8%
GBP/USD987.50+0.503.1%
AUD/USD12109.41+0.594.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 median flagged window reads 56.76% in its own direction, with a quartile range of 55.48% to 59.51%. Against the advertised band: 145 of 187 flags fall inside it, 32 below and 10 above. The range is a fair description of what we flag — which is the part of this we got right, and the reason to keep reading is the part we did not.

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.

flagsmedian candlesmedian leanfloor its n imposedexcess over the floormedian reading
thin band1168408.955.173.1559.11%
ordinary hours711,0515.494.630.9655.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.

MarketFlagsIn the thin bandMedian readingMedian excess over floor
Silver (XAG/USD)381656.73%2.24
Gold (XAU/USD)201456.65%1.96
USD/CAD171155.66%1.15
EUR/GBP161561.10%5.12
USD/CHF161559.75%3.80
NZD/USD13756.71%2.05
EUR/USD13655.59%1.22
AUD/USD13655.21%0.86
USD/JPY11656.66%1.25
GBP/USD10656.03%1.40
EUR/JPY9656.06%0.76
GBP/JPY8657.09%2.15
BTC/USD2158.66%1.15
ETH/USD1159.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.

HeldMarketsCrossesHit rateIts own baseNet (round trips)BaseExcessBeat its own random-date control
5 days1640449.01%50%-4.863-0.022-4.8410 above, 0 below (0.8 each on noise)
20 days1640048%49.97%-12.52-0.196-12.3241 above, 2 below (0.8 each on noise)
60 days1639648.99%49.96%-6.842-0.532-6.310 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.

⚠ What this archive could not have seen. Crosses are rare — 400 of them at 20 days across 16 markets, because a 50/200 pair turns a handful of times per decade — and a 20-day move is enormous next to a spread. The smallest mean edge that would have cleared the median market's own control is 92 round trips. A large golden-cross edge is ruled out here; a modest one is not, and no amount of history we hold would settle it, because the crossings are the unit and there are only 400 of them. That is /coverage's minimum detectable lean on a different axis.

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 windowUp-rate above minus belowMarkets with the same sign
50 days-0.627 of 18
75 days0.029 of 18
100 days0.039 of 18
125 days0.4312 of 18
150 days0.7812 of 18
175 days1.0213 of 18
200 days (the famous one)1.2913 of 18
225 days1.1412 of 18
250 days1.4713 of 18
275 days1.3314 of 18
300 days112 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

HeldMarketsSignalsHit rateIts own baseNet (round trips)BaseExcessPercentile of its own random dates
1 day19209650.14%49.47%-0.181-0.5220.34158.3th
5 days19209049.43%49%-0.347-2.6112.26471.5th
20 days19208149.3%48.48%-7.355-10.3853.0364.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 signalsClosed higher
Oversold — RSI(14) crossed below 3053.36%
A day that fell just as far and was never called oversold53.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 interval is resampled by calendar year, not by signal. An oversold spell throws several crossings within weeks of each other and their 5-day forward windows overlap, so these are not 849 independent tries — the same error we found in our own forward record and corrected there. Whole years are resampled instead (24 of them), and the year is drawn once for every market at a time rather than per market: resampling market-years independently would treat 19 markets as 19 experiments, which assumes more than this archive can show: 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).

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 belowMarketsSignalsRaw excess over drift (round trips)Matched on the fallMarkets positive, matched
RSI(14) < 251691711.38-6.0644 of 11
RSI(14) < 30 (the famous one)1920906.10-9.7244 of 14
RSI(14) < 351939391.361.62710 of 18
RSI(14) < 40196034-1.050.66810 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.

⚠ What this archive could not have seen. Pooled over all 19 markets, the smallest mean edge that would have cleared the random-date control at 5 days is 6.264 round trips per signal; for the median market alone it is 22. A large oversold edge is ruled out here. A small one is not, and the up-rate interval above is the honest width of what remains. That is /coverage's minimum detectable lean on the oscillator axis.

⚠ 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.

⚠ The comparison is leave-one-out, and that is not a detail — it moved the answer, in the direction that flattered us. The first cut scored each cell against its group's pooled rate including the cell. That estimate is dragged toward the very cell being tested, and deviations inside a group are constrained to sum near zero, so the naive z is deflated by √(1 − n/ngroup): about 11% in the weekday arm, where five weekdays share an hour, and about 2% in the hour arm, where twenty-four hours share a weekday. The bias sat on the arm the conclusion wanted to find weak. Measured both ways, the weekday arm read 28 flags with the cell inside its own denominator and 41 with it left out, and the ordinary-hour count went from 1 to 7. Scoring a cell against a pool it is inside is a denominator that quietly changed — this project's oldest standing rule, met on its own grid. What is published below is a plain two-sample proportion test against an independent sample.
Does this axis add anything the other did not?Windows clearing |z| ≥ 3A grid with no such structureRatio
The hour, beyond its own weekday1926.032×
The weekday, beyond its own hour416.06.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 hourIn the thin bandOrdinary share
their hour7911341.1%
their weekday73417.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:

MarketWindow (UTC)CandlesThis windowThat hour, other weekdaysz
NAS100Thu 00:0035058.3%47.9%3.48
USD/JPYFri 00:0092655.8%49.9%3.24
GBP/USDFri 19:001,05054.8%49.3%3.16
BTC/USDThu 03:0044042.5%50.6%-3.13
EUR/USDThu 13:001,18646.5%51.4%-3.01
BTC/USDSat 12:0035458.5%50%3
ETH/USDFri 08:0041856%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

⚠ A pivot set says where the levels sit — and also how wide they are. Every level is scaled by yesterday's range, and yesterday's range predicts today's (section 16, one unit up). So a set borrowed from another day arrives mis-scaled, is reached at the wrong moments, and when it is reached the day that reached it is not an ordinary day. A naive borrowed control therefore credits pivots with volatility clustering. Both arms are below: the same construction, differing only in whether the donor day's own previous range is required to match yesterday's.
Given the level was reached, the day finished beyond it…RateGap vs the real set95% by yearMarkets positive
the real pivots49.29%———
a borrowed day’s set, range not matched48.7%0.590.381 … 0.84716 of 19
the same set with the donor’s range matched49%0.30.075 … 0.52314 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.

 ReachedFinished beyondGapMarkets positive
the real set29.19%49.7%——
the same set, slid off the pivots29.9%49.47%0.0810 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 obvious version of this control is degenerate, and two cuts of it were before this one. “A synthetic level the same distance from the same open”, drawn from the market's own pool of distances, lands — once its band is made symmetric — at 0.997× the real distance on the same side, which is the real level. It returned a gap of −0.20 points and could not have returned anything else: it was one break measured twice. A perfect agreement everywhere is never a finding; it means the two things being compared are one thing. Escaping that by widening the band asymmetrically — letting the control sit 35% further out but only 15% nearer — buys separation by making the control systematically further from the open than the thing it stands in for. Both halves of that trade are wrong, which is why the control above is a shift.

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.

LevelReachedFinished beyondRange-matched controlGapTouches
PP70.32%49.34%48.28%1.0551,644
R1/S142.72%49.1%49.28%-0.1862,746
R2/S217.16%49.94%49.77%0.1625,201
R3/S36.46%48.6%48.9%-0.299,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.

⚠ A window's cost is paid at two instants, and which one depends on the side. Our gross figures are bid-to-bid, so a long pays the spread at its entry (bid(close) − ask(open)) and a short pays it at its exit. Every rule here carries a direction, so each is costed on its own side rather than on an average of the two. Medians throughout, never means: one New Year's rollover minute runs twenty times the midday figure.

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.

PairWe assumeOrdinary hoursThin bandThin vs its own ordinaryRecent midday
EUR/USD10.451.152.56×0.3
GBP/USD1.21.052.252.14×0.8
USD/CHF1.21.152.452.13×0.9
USD/JPY10.51.32.6×0.45
AUD/USD1.21.051.751.67×1
USD/CAD1.51.32.31.77×1.2
NZD/USD1.81.42.651.89×1.1
EUR/JPY1.512.52.5×0.85
GBP/JPY22.054.152.02×1.7
EUR/GBP1.2122×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.

⚠ The comparison is against each pair’s own ordinary hours and never in absolute pips. GBP/JPY is dearer than EUR/USD everywhere, and pooling the two would have reported that fact as a finding about the clock.

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.

PairMidday, earlyMidday, recentTightened byThin, earlyThin, recentTightened by
EUR/USD1.10.33.67×21.151.74×
GBP/USD1.650.82.06×2.52.850.88×
USD/CHF1.50.91.67×2.53.550.7×
USD/JPY1.250.452.78×2.251.91.18×
AUD/USD2.0512.05×2.132.051.04×
USD/CAD2.051.21.71×4.531.5×
NZD/USD41.13.64×62.582.33×
EUR/JPY2.250.852.65×33.730.8×
GBP/JPY41.72.35×56.20.81×
EUR/GBP1.50.81.88×2.72.90.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 pushMedian cushionThe whole boardMedian cushion
our assumed spread12 of 12 pay1.27×99 of 991.25×
one flat measured figure per pair (control)12 of 12 pay1.65×97 of 991.61×
the spread its own window carried5 of 12 pay0.92×85 of 991.62×
its own window, 2020 onward only6 of 12 pay0.88×86 of 991.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

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%.

⚠ A falling curve proves nothing here, and that is the whole test. Daily ranges are heavy-tailed, so the further a day has already gone the less likely it is to go a quarter-ADR further — at every multiple, not only at one. The claim is that 1.0× is special: a ceiling. So the same measurement runs at multiples nobody draws, from 0.6× to 1.4×, and asks whether 1.0× sits below its neighbours. And because a day reaches 1.0× later than it reaches 0.9×, with less session left to extend in, every rung is also reweighted to the hours at which days actually reach 1.0×. Section 25’s placebo fractions and section 23’s ladder, on the range axis.
multiple of ADRdays reaching itgo a further 25% ADRsame, on 1.0×’s hoursclose back through it (same hours)
0.6×58,92567.39%53.91%51.4%
0.7×51,94861.32%52.78%51.6%
0.8×43,80657.68%52.85%51.58%
0.9×35,72554.9%52.79%51.28%
1.0× — the ADR28,46653.63%53.63%51.41%
1.1×22,24052.96%54.46%51.12%
1.2×17,27352.67%55.41%51.25%
1.3×13,40252.38%56.22%51.02%
1.4×10,33352.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

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.

See the numbers that survived →

Free on the four major pairs, full 23 years, with the sample size and a significance flag on every figure.