Blog/The weekend-staleness beat
Blog

What the ECB-based FX APIs missed last weekend

ECB-sourced APIs freeze at Friday's reference fix. Here's how much EUR/USD moved Saturday through Sunday — and what that meant for anyone relying on a "latest" endpoint that wasn't.

MMexchangerate.dev·Jun 16, 2026·4 min read

Point-in-time data returns the value that was actually published as of a given timestamp, with no later revisions folded in. It is the difference between a backtest you can trust and one quietly contaminated by information the market did not yet have.

Key points
EUR/USD moved +0.38% from Friday close to Sunday 22:00 UTC.
Every API sourced solely from the ECB fix showed Friday's stale rate through the full weekend.
Live spot continues through Saturday and Sunday — labeled "live" with market_session: weekend.

What "point-in-time" means

Most data providers serve you the current best estimate of a historical value. When a figure is revised — a GDP print restated, a settlement corrected — the old number silently disappears. Query last March today and you get March as it is understood now, not as it was understood in March.

A point-in-time store keeps every vintage. Ask for the value as_of=2026-03-14 and you receive exactly what a subscriber would have seen on that date, revisions excluded.

Why look-ahead bias ruins backtests

If your historical series contains values that were only knowable later, your strategy is implicitly trading on the future. Returns look spectacular in simulation and collapse in production. The bias is subtle precisely because the numbers are real — just not real yet.

The tell
A backtest that beats live trading by a wide, consistent margin almost always has a look-ahead leak. Point-in-time data closes the most common one.

How Console stamps every value

Every observation we store carries the timestamp it became public. Add an as_of parameter and the API replays the series as it stood on that date — no special endpoint, same envelope.

replay · point-in-timecopy
$ curl https://api.console.dev/v1/fx/eurusd?as_of=2026-03-14
# → the rate as published on 2026-03-14, not today's restatement

Naive vs point-in-time

QueryNaive storePoint-in-time
Saturday 10:00 UTCFriday ECB fix (stale)Live weekend spot
Sunday 14:00 UTCFriday ECB fix (stale)Live weekend spot
Monday 08:00 UTCMonday ECB fix (delayed)Continuous live

“If you cannot reproduce the number you traded on, you do not have a backtest — you have a story.”

Putting it together

Point-in-time is the default on every Console series — fx, metals, and power alike. You do not opt in; you opt out by omitting as_of to get the latest. Either way, every value names the feed and timestamp it came from, so the number is auditable end to end.

MM
exchangerate.dev
Weekly data beat — the weekend move the ECB field missed, from our own data.

Keep reading

GuideHow to backfill FX rates without look-ahead biasRead MethodologyHow we reconcile live spot and daily reference ratesRead BlogReading market_session in your FX pipelineRead