The data
The basis are futures on the overnight rate of the respective currency. Banks and funds use them to hedge against rate changes, so their price is a real-money bet on where that rate will average over a given period. What matters is how that period is cut — and it is cut differently on either side of the Atlantic.
For the ECB these are ECB-dated €STR futures: their term covers exactly the stretch between two Governing Council meetings. We use the daily settlement prices plus the latest available price, delayed by at least 15 minutes.
For the Fed they are 30-Day Fed Funds futures, ticker ZQ. These follow the calendar rather than the meeting schedule: each contract covers one calendar month and settles on the average effective federal funds rate, EFFR, over that month. We use the last traded daily price per contract, likewise delayed.
From price to priced-in step count
A rate future is quoted as 100 − expected rate. What we are after is the same figure in both cases: the step count J, meaning how many rate moves the market has priced in for a given meeting. The route there differs, because the contracts are cut differently.
ECB: one contract per meeting period
The gap between the contract before and the contract after a meeting measures how much of a rate change the market has priced in for that decision. Divided by the usual step size of 25 basis points, this yields the priced-in step count J:
J = (price before − price after) / 0.25
Fed: one contract per calendar month
A ZQ contract states no rate for a single day, only a monthly average. If a rate decision falls into that month, the price blends two levels: the old one up to and including the meeting day, the new one from the day after. The weighting is by days. For a month of N days and a decision effective from day d+1:
r(month) = (d/N) · r(before) + ((N−d)/N) · r(after)
That equation has two unknowns; one price alone will not solve it. The meeting rhythm supplies the answer. The FOMC meets eight times a year, so in a regular year four months carry no decision. In those months the rate is fixed, which makes their average both the closing level of the previous month and the opening level of the next. They are the anchors of the calculation, and every meeting month borders one.
Which anchor is used depends on where in the month the meeting sits. If the FOMC meets mid-month, the anchor before it supplies the level ahead of the decision, and the equation only needs solving for the level after. If the meeting sits at the end of the month, that very step becomes treacherous: only a few days then carry the new level, and the calculation magnifies any price error accordingly — for the meeting of 29 April 2026 by a factor of 30. In such cases we work the other way round, take the level after the decision from the following month's anchor and solve for the level before. The large share is then in the denominator, and the error stays in the order of magnitude in which it arose.
One rule governs the direction of travel, and we take it from CME. Backwards, the resolution runs from an anchor until it reaches a month whose opening level is itself anchored. Forwards it runs exactly one month, and the closing level obtained that way is deliberately not passed on to the next month. This leaves a small discontinuity in the implied rate path. It is intentional: it keeps the noise in a single price from propagating along the whole chain. Where one part of a month accounts for less than a tenth of it, we do not compute at all rather than publish a figure governed by noise.
From the two levels, J follows as in the European case, divided by the 25 basis point step. One thing drops out without our having to assume it: EFFR trades inside the target range, not at its upper bound. Because J comes from a difference, and the gap between EFFR and the range shifts along with a decision, that gap cancels. For displaying the level itself we therefore use the official target range rather than EFFR, and compute on its upper bound.
From step count to probability
From here on the calculation is the same for both central banks. J becomes a distribution across the two adjacent whole steps: a J of 0.84 means 84% for one step and 16% for none.
This part is not our invention but the disclosed method of CME's FedWatch tool. We have reproduced it: the FOMC meeting of 21 September 2022, worked through in CME's own methodology article, comes out here at 8.14%, 75.14% and 16.71% against the published 8.1%, 75.1% and 16.7%. The same figures, one decimal further. Our values can still differ from FedWatch, but not because of the method: they depend on the price snapshot of each run, and in the cases beyond the regular meeting rhythm we deliberately do not compute.
Chaining across meetings
For meetings further out, the rate level depends on every decision before it. We therefore work through every path leading there and add up those that end at the same rate level (mathematically, a convolution). What comes out is the probability of each possible level after that meeting, regardless of the intermediate steps taken to get there. The expected rate is the weighted average of that distribution.
For the Fed, that average sits between two possible target ranges. It is therefore given as an upper bound and not as a range: a band lying between two decidable bands is one nobody could decide on.
What the model cannot do
The distribution per meeting knows only two adjacent scenarios. A J of 0.5 can mean “50% for 25 basis points”, but equally “25% for 50 basis points”; the price alone cannot tell them apart. Distant contracts also barely trade, so individual prices there can be stale or distorted. On the European route, the spread between €STR and the deposit facility rate enters the calculation as a constant; if it shifts, the probabilities shift with it.
On the American route, the limits of the monthly decomposition come on top. If two decisions fall into one month — as in March 2020, when the FOMC met unscheduled — a single monthly contract can no longer be resolved unambiguously. We block such months rather than show a figure resting on an arbitrary assumption. The known EFFR spikes at month end we deliberately leave aside: they sit below the accuracy this site claims for itself.
How accurate the market has been in the past is shown under “Forecast vs. reality”. For the Fed that record starts later than for the ECB, because the price history there is shorter; it grows with the lifetime of this site instead of showing empty stretches.