Справочные курсы USD/PLN: NBP и ЕЦБ, 2025 год

Python 3.10 или новее, только стандартная библиотека. Источники: NBP и
ECB statistics. Классификация и расчеты — работа редакции. Исходные
времена загрузки 7 октября 2026 года сохранены в provenance.json.

NBP raw и дневное объединение в ZIP НЕ включены. Распакуйте пакет
в отдельную папку. Для получения четырех исходников непосредственно
из официального API NBP и пересчета выполните:
    python reproduce.py --download-nbp
Это четыре HTTPS GET-запроса по адресам из provenance.json, каждый
с диапазоном до 93 дней. Локальные файлы сохраняются в private-nbp/.
Если у вас уже есть соответствующие исходники для локального анализа,
поместите их туда под именами из provenance.json и выполните без сети:
    python reproduce.py
Источники и результаты проверяются также при python -O.

Ожидается PASS: 251 дата NBP, 255 дат ЕЦБ, 250 общих дат, 12 месячных строк,
среднее со знаком -0.931 б.п., среднее по модулю 16.815 б.п. Программа
использует точные рациональные числа для формулы и агрегирования.
Проверка сохраненных 50-значных десятичных агрегатов допускает только
абсолютную разность менее 1e-43 б.п.; это не финансовый порог ошибки.

XML ЕЦБ в sources/ — неизмененный исходный файл целиком. Сначала
проверяются размер и SHA-256 всех пяти источников. Изменившийся ответ
NBP НЕ заменяет старый снимок автоматически: проверка останавливается.
Для нового снимка потребуется отдельно документировать хеши и пересчет.
Само наличие API не означает разрешения повторно размещать его базу.
Условия источников: https://api.nbp.pl/ и https://nbp.pl/regulaminy
Статистика ЕЦБ: источник ECB statistics; сохраняйте исходную статистику
с метаданными без изменения, учитывайте условия:
https://www.ecb.europa.eu/stats/ecb_statistics/governance_and_quality_framework/html/usage_policy.en.html
Ни NBP, ни ЕЦБ не проверяли и не одобряли эту редакционную публикацию.

monthly-aggregates.csv — наша производная таблица, английские имена
полей сохранены для машинного сравнения. month — месяц;
n_common_dates — общие даты; mean_signed_bps — среднее со знаком;
median_signed_bps — медиана со знаком; mean_absolute_bps — среднее
модулей; median_absolute_bps — медиана модулей; minimum_signed_bps и
maximum_signed_bps — минимум и максимум со знаком; maximum_absolute_bps
— максимум модуля; соседние поля date указывают даты экстремумов.
positive_days/negative_days/zero_days — количество результатов по знаку.
Положительное значение означает, что NBP выше производного курса ЕЦБ.

Формула: 10000*(NBP_PLN_per_USD*ECB_USD_per_EUR/ECB_PLN_per_EUR-1).
Базисный пункт — 0.01 процентного пункта относительной разности, не пипс.
Объединение идет только по одинаковой дате, без заполнения пропусков
и сопоставления строк по порядковому номеру. Дневной справочный курс
не является одновременной исполнимой двусторонней котировкой.

hypothetical_case в results.json — явно условные две записи:
при 1.25 USD за EUR и 5.00 PLN за EUR производный курс равен 4.00 PLN за USD.
Условные NBP 4.0080 и 3.9920 дают +20 и -20 б.п.; среднее со знаком 0,
среднее по модулю 20. Это не реальные даты/курсы/торговые результаты.

Расписания публикации не дают точного времени каждого наблюдения
2025 года. Не приписывайте всю разность прошедшему времени: методы и
округления тоже могут различаться. Нет реконструкции первого выпуска,
внутридневного пути цен, исполнения сделки или исторической доступности
сайтов. ИИ помогал подготовить текст и код; тесты не заменяют отдельную
экспертизу методологии. Исследование B в этот пакет не включено.
