Methodology
How these numbers are produced, what the sample sizes mean, and what this site refuses to publish.
What this is
Priors publishes measured base rates for the FX majors: how often a thing has actually happened, over a stated window, with the sample size attached. A prior is a measured base rate you update with evidence, which is where the name comes from.
Every number here is arithmetic over collected market data. Nothing on this site is a forecast, a recommendation, or a model output.
Sample sizes, and when we refuse to publish
The most common way a statistics page misleads is not a wrong number — it is a right number computed over too little data. So the sample size is not a footnote here; it decides whether the number is shown at all.
| Samples | What we publish | Why |
|---|---|---|
| under 30 | No number at all, plus the sample size and the label insufficient | Below 30 observations a percentage is noise wearing a decimal point. Greying it out or footnoting it still shows it, and a number on a screen gets believed. |
| 30 to 99 | The number, labelled provisional, with n | Enough to be worth seeing, not enough to act on. |
| 100 or more | The number, labelled actionable, with n | Enough that the figure is stable under resampling. |
This is enforced in code at the publishing chokepoint, not by convention: a page that tries to print a thin statistic fails to publish, and the site keeps its previous version. You can see the consequence on the spreads page, where the hourly breakdown is currently withheld in full — the underlying bid/ask history is only about 19 samples deep per hour. That page is thin because the data is thin, and saying so is the point.
Two layers, and why it matters to you
The systems that collect and compute are strictly separate from anything that interprets. Collectors measure, derive and publish; they hold no opinion and never label a move good or bad. That separation is why a number here can be checked: it came from arithmetic over an archive, and the arithmetic is the whole story.
Freshness is per page, never site-wide
The engines run on unrelated schedules — levels every five minutes, yields hourly, base rates once a day. A single "last updated" stamp would be wrong on most of the site most of the time, so each page carries its own, and a page whose data has aged past its own ceiling says so rather than looking current.
| Page | What it answers | Measured by | Cadence |
|---|---|---|---|
| Base Rates | Conditional odds per pair and signal | stats-engine | daily 07:20 UTC |
| Central Banks | G8 policy rates, moves and vote splits | macro-events | every 10 minutes |
| Levels | Price ladder and broken levels per pair | ta-engine | every 5 minutes |
| Macro | Upcoming releases and measured reactions | macro-events | every 10 minutes |
| Yields | G8 2Y/10Y yields and the 10y-2y spread | yields-pull | hourly at :20 |
| Spreads | What each cross costs to trade | stats-engine | daily 07:20 UTC |
What we deliberately do not publish
- Raw price bars. The archive is licensed market data. Statistics derived from it are ours to publish; the series itself is not, and republishing it would be redistribution.
- Unfiltered horizon sweeps. Testing many horizons and showing the best one is how a backtest flatters itself. Where a best horizon is reported it comes with its out-of-sample half.
- Anything measured on too few samples, per the rule above.
When we get it wrong
Corrections are made in place and the reason is stated. Operational failures — an engine down, an archive gap — show up as staleness or as a withheld section rather than as a silently stale number. A page that cannot be built honestly is not published at all, which is why you may occasionally find a section missing rather than empty.