Reference-data study

An unpublished rate is not a data gap: the ECB calendar, 2016–2025

2560 EUR/USD publications, 49 unpublished weekdays and an independently checked TARGET calendar. Data, chart and code.

Published: Data: 2016–2025Editorial team · AI-assisted calculations

For 2016–2025, the downloaded snapshot contains 2560 EUR/USD reference publications across 2609 Monday-to-Friday dates. All 49 weekdays without an observation coincide with scheduled TARGET closures. There are 2560 observations on scheduled-open weekdays and zero unexpected gaps. This checks completeness of this snapshot, not historical website uptime or first-release timeliness.

Method and findings

We select one official XML observation of USD per EUR per publication date, from 1 January 2016 through 31 December 2025. A separate official API CSV agrees on all 2560 dates and values. Our independently constructed calendar excludes weekends and the TARGET closures: 1 January, Good Friday, Easter Monday, 1 May, 25 and 26 December. Holidays falling on weekends are not counted again as unpublished weekdays.

Annual publications, in year order, are 257, 255, 255, 255, 257, 258, 257, 255, 256 and 255. Unpublished weekdays are 4, 5, 6, 6, 5, 3, 3, 5, 6 and 6. Annual and daily calendar CSVs expose every classification.

Each year has a maximum interval of five calendar days between consecutive publication dates. In 2025, one such interval is 17–22 April. Four calendar dates intervene: two TARGET closure days and a weekend. This does not mean five missing observations.

What a daily reference rate cannot show

A single reference observation supplies no open, high, low, close, spread, volume or tick path. It cannot establish whether an intraday stop-loss was touched or reproduce trade execution. Forward filling a holiday creates an imputed value, not an observed market quote; keep that distinction explicit.

Publication time was not uniform throughout the period: from 1 July 2016 ECB moved it from around 14:30 to 16:00 CET. This study reconstructs neither intraday prices nor historical first-release times.

Source: ECB statistics. Snapshots downloaded 7 October 2026; results and classifications are our calculations. source and SHA manifest records source hashes; research.py and finalize.py use the Python standard library. Reuse conditions are included in the reproduction package. Future exports may be revised.

ECB EUR/USD: unpublished weekdays, 2016–2025Every unpublished weekday matches a scheduled TARGET closure; unexpected gaps zero.ECB EUR/USD: unpublished weekdays, 2016–202501234564.0020165.0020176.0020186.0020195.0020203.0020213.0020225.0020236.0020246.002025Weekdays. Sources: ECB statistics; Our calculations; snapshot 7 Oct 2026.
Every unpublished weekday in this snapshot matches a scheduled TARGET closure. This is not a test of historical publication timeliness. Source: ECB statistics; classifications and chart are our calculations.
Open the full chart ↗

Results table

Our calendar calculations on ECB data
YearMon–Fri datesPublicationsTARGET closuresUnexpected gaps
201626125740
201726025550
201826125560
201926125560
202026225750
202126125830
202226025730
202326025550
202426225660
202526125560

Reproduce the calculations

The NBP/ECB package uses only the Python standard library. It fetches NBP originals locally from the official API; no NBP raw database is included. Pinned SHA checks stop the calculation if inputs change.

Source data: ECB statistics; study A also uses NBP. Calculations, classifications and charts are ours. The underlying ECB information is freely available; no ECB endorsement is implied. Source-use conditions are included in the code packages. AI tools assisted calculations and publication; code and data checks are not an independent expert review.

← Research: data, results and methods