What the numbers mean — and what they don't.
Every figure on this site is a historical frequency measured from real price bars. This page explains how to read those figures, and is equally clear about the things the data cannot tell you.
The data
5 questionsWhere does the data come from?
Institutional bank-feed price history, aggregated into hourly (H1) bars. 1,742,350 hourly bars across 19 symbols sit behind the dashboard.
Coverage isn't uniform, because the instruments themselves aren't:
| Group | Symbols | History |
|---|---|---|
| FX majors | 4 | 2003 → 2026 |
| FX minors | 6 | 2003 → 2026 |
| Metals | 2 | 2003 → 2026 |
| Indices | 5 | 2011 / 2013 / 2020 → 2026 |
| Crypto | 2 | 2017 → 2026 |
Each symbol's real span is shown in the dashboard's "History depth" tile — never assume 23 years for an index or a coin.
What exactly is an "up-rate"?
The share of hourly candles in that bucket that closed above their open. Nothing more.
A 58% up-rate for "Wednesday 14:00" means: of every Wednesday 14:00 hourly candle in the history, 58% finished higher than they started. 50% is a coin flip.
It says nothing about how far price moved — that's the separate average-move figure, and the two often disagree.
Why is everything in UTC? What about my timezone and DST?
The bars are bucketed in UTC because it has no daylight-saving jumps — an hour bucket always means the same hour.
The dashboard's timezone selector shifts every view to your zone. It applies a fixed offset, not full DST rules, so during the weeks when your local clock has changed and the reference zone hasn't, a bucket can be an hour off from your wall clock.
Tue 06:00 anywhere east of UTC+7 — Bangkok, Singapore, Manila, Perth — and you are actually looking at Mon 22:00 UTC — a different day, and one that lands in the rollover. The dashboard now spells this out under every filter result, but it catches everyone once.Is this live data? How often does it update?
No — this is a history tool, not a quote feed. The dashboard's "as of now" panel simply looks up what this weekday-and-hour bucket has historically done; it isn't reading a live price.
The archive is refreshed weekly, each Saturday after the trading week closes, and the aggregates are rebuilt from it. One more week of bars moves a 5,000-sample bucket by a rounding error, which is exactly the point of a large sample.
Can I see the underlying calculation?
Yes. Every bucket carries its sample size n and its z-score, and the aggregates are plain JSON served from this site — the browser does the summing, so nothing is hidden server-side.
The z-score is the standard proportion test against a fair coin: z = (2·ups − n) / √n.
Reading the numbers
4 questionsWhat is n, and how big is big enough?
n is how many real hourly bars went into that percentage. It is the single most important number on the screen, and the one most people skip.
The noise floor shrinks with the square root of n, so:
| Sample size | Move needed to beat chance |
|---|---|
| n = 25 | ±20 pp |
| n = 300 | ±5.7 pp |
| n = 1,000 | ±3.1 pp |
| n = 5,000 | ±1.4 pp |
A 70% up-rate on n = 25 is noise. A 54% up-rate on n = 5,000 is real. Stacking filters (month and weekday and hour) shrinks n fast — the dashboard warns you when it drops too low.
What does the brass dot / "significant" flag mean?
It marks buckets where |z| ≥ 3 — the deviation from 50% is large enough, for that sample size, to be unlikely to come from chance alone.
That's a deliberately strict bar. It answers exactly one question: "is this pattern probably real?" It does not answer "is it big enough to trade?" — see below.
Why only 55–65%? I've seen tools claiming 80%+.
Because 80% was what our own early sample said too — before we tested it properly.
On a 20-month sample, EUR/USD Thursday 01:00 read 80.4% up on n = 56. Re-measured over a decade it fell to 67.7% on n = 446. On the whole 23-year archive it reads 52.3% on n = 1,185 — it never stopped regressing. Every extreme reading shrank toward 50% the same way.
That's regression to the mean, and it is the normal fate of small-sample extremes. Anyone still advertising 80% is either using a tiny sample or not showing you one.
⚠ We measured our own range rather than leaving it as a claim: section 28 is the distribution of what every window we flag actually reads, with the sample-size control beside it. Two things in it are worth knowing before you take the range at face value — every window in the grid that reads past the top of it sits in the thin hours we warn about above, and what survives out of sample is a fraction of a point.
What's the rollover warning about?
The strongest raw signals in the whole dataset cluster around the daily rollover (roughly 21:00–22:00 UTC). They're genuine price behaviour — but they sit in the thinnest liquidity of the day, where spreads widen sharply and swap is charged.
What it can't do
7 questionsDoes a 58% up-rate mean I'll make money?
No — and this is the most important answer on the page.
The up-rate counts direction. Your broker charges you the spread. We checked every liquid weekday×hour bucket across the FX majors against a typical 1.0-pip spread:
The up-rate also says nothing about the size of the winners versus the losers, which is what actually decides an outcome. A 58% bucket whose losers are twice the size of its winners loses money.
Can I use this for 1-minute or other very short-term trades?
No. Two separate reasons, either of which is fatal:
- Wrong resolution. The data is hourly. A 58% up-rate for an hour says nothing about minute 3 of that hour.
- The edge shrinks faster than the bar. Drift grows with time while noise grows with its square root, so the percentage edge falls roughly with √time. A 5 pp edge on H1 becomes about 0.65 pp at 1 minute — unmeasurable, let alone tradeable.
We also tested our 5-minute data directly: across 288 slots per symbol, the average absolute drift is 0.08–0.11 pips — a fraction of the spread — and 0–1% of slots beat a 1.0-pip cost. If a pattern can't pay for its own spread at 5 minutes, it can't at 1.
Is this useful for swing or long-term trading?
Not really, and we'd rather say so.
Everything here is built from hourly bars. The "seasonal by month" view therefore shows the up-rate of hourly bars within each calendar month — it does not tell you whether the month itself closed up.
Measured across the whole year, that spread is tiny: 2.6 percentage points for EUR/USD, 1.8 for gold. And 23 years gives only 23 samples of each calendar month, however large the hourly n looks.
A swing trader asking "does September usually close lower?" needs daily or monthly bars. That's a different dataset, and it isn't this one yet.
Which hours does a market actually move in?
This is the question the archive answers best, and it is not the same question as which way it goes.
Every market has a timetable. The London/New York overlap moves about 2.4× a typical hour; the hour when no major desk is open moves less than one. The payrolls hour is bigger than an ordinary Friday hour in 18 of 18 markets we hold — and silent on direction in all eighteen, which is the pattern in miniature.
The dashboard lists a market's biggest windows under How far does it move?, in your own clock, with the spread beside each one so you can see when the movement is smaller than the cost of reaching it.
Does that timetable stay put, or do I have to keep re-checking it?
It stays put — and that is measured, not assumed.
We took the biggest windows using only candles from before 2020, then scored them on data from 2020 onward that the selection had never seen. They were still 1.82× the typical hour. The rank order of the whole week came back at 0.925.
The obvious objection is that everything correlates because every market is quiet in Asia and busy over London — so the same figure was computed inside the London/New York overlap alone, where every hour is already busy. It holds there too, at 0.859.
And it does not shift with the season either. Comparing each quarter against a market's own all-year ranking, the same hours stay the big ones — the weakest correlation in any quarter is 0.914. What does move slightly is the level: August runs about 0.943× a market's typical hour, so the summer lull is real and it is about 5.7%, not a collapse — and 3 of 18 markets are actually busier in August. Section 14.
Two exceptions worth knowing. BTC and ETH do not hold: their movement structure is as unstable as their direction, and the dashboard says so on those markets rather than quoting the average. And a stable timetable is not a profit — see the next answer. The full test is section 13.
If direction is weak, what am I actually paying for?
A fair question, and this site has published the case against itself first.
We walked our own direction signals forward into data they had never seen. In ordinary hours they kept 0.56 points of up-rate — not significant, and less than a round trip. Nearly all of the direction edge that does survive sits in the thin hours around the daily settlement, where the spread is widest, and the largest single piece of it turns out to be about one pip at the New York close.
So what is left, and what you are paying for, is the timetable and the sizes: which hours a market moves in, how far it typically travels, how that compares to what your broker charges, and which markets cannot support the claim at all. That is a smaller product than this category usually advertises. It is also the part that survives being tested.
Section 8 is the forward test on direction, section 12 is what the rules cost, and section 13 is the timetable holding.
So what is it actually good for?
Deciding when to be at the screen, and what a move of that size is worth.
- Knowing which hours of the week a market actually travels in, and by how much — the part that holds up out of sample.
- Sizing an expectation: a typical move of 3 pips against a 1.2-pip spread is a different proposition from 12 pips against the same spread.
- Sanity-checking a strategy's entry times against decades of base rates, including the markets where we can demonstrate nothing at all.
- Avoiding trades that fight a strong, well-sampled hourly bias — the weakest of these uses, and the page above says why.
It is a decision-support layer for a strategy you already have. It is not a strategy.
Account & pricing
3 questionsDo I need an account?
Not to look around — the dashboard is currently open. An account saves your timezone, symbols and watchlist so they follow you between your phone and desktop.
What's the difference between Free and Pro?
Free covers the hour-of-day and weekday heatmaps on the FX majors, with the full history and the sample size and significance on every cell. Pro adds all 19 symbols, timezone-aware monthly and session views, the top-signals ranking with average move, alerts, CSV export and a saved watchlist. Current amounts are on the pricing section.
Pro checkout isn't switched on yet — while it's being set up, the full dashboard is open to everyone.
Is this financial advice? Do you sell signals?
No to both. Perfect Indicators reports historical frequencies from past price data. It does not know the future, does not issue entries or exits, and is not licensed to advise you.
We don't sell signals, and we don't publish a number without the sample size sitting next to it.
Still deciding?
The five-minute guide walks you through reading a real heatmap cell, start to finish.
Read the guide →