Measured base rates, updated with evidence.

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.

The sample-size rule, applied to every aggregate statistic on this site -- rates, means and medians alike.
SamplesWhat we publishWhy
under 30No number at all, plus the sample size and the label insufficientBelow 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 99The number, labelled provisional, with nEnough to be worth seeing, not enough to act on.
100 or moreThe number, labelled actionable, with nEnough 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.

Every page, the engine that measures it, and how often. Each page states its own freshness; there is no single site-wide timestamp because the engines run on unrelated schedules.
PageWhat it answersMeasured byCadence
Base RatesConditional odds per pair and signalstats-enginedaily 07:20 UTC
Central BanksG8 policy rates, moves and vote splitsmacro-eventsevery 10 minutes
LevelsPrice ladder and broken levels per pairta-engineevery 5 minutes
MacroUpcoming releases and measured reactionsmacro-eventsevery 10 minutes
YieldsG8 2Y/10Y yields and the 10y-2y spreadyields-pullhourly at :20
SpreadsWhat each cross costs to tradestats-enginedaily 07:20 UTC

What we deliberately do not publish

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.