Привет, Хабр!
Хочу рассказать о нашем новом проекте cbrapi, который может здорово помочь всем, кто работает с финансовыми данными Центробанка России.
cbrapi - бесплатная библиотека с открытым исходным кодом на Python, которая превращает сложное взаимодействие с SOAP API ЦБ в простой и понятный инструмент.
Если вы когда-нибудь пытались работать напрямую с API Центробанка, то наверняка сталкивались с неудобностью SOAP-сервисов, XML-разборок и прочими неудобными стандартами.
Наша библиотека берет всю эту сложность на себя, оставляя вам чистый и удобный Python-интерфейс.
Вместо запутанных запросов вроде:
POST /DailyInfoWebServ/DailyInfo.asmx HTTP/1.1
Host: www.cbr.ru
Content-Type: text/xml; charset=utf-8
Content-Length: 356
SOAPAction: "http://web.cbr.ru/DragMetDynamic"
<?xml version="1.0" encoding="utf-8"?>
<soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
<soap:Body>
<DragMetDynamic xmlns="http://web.cbr.ru/">
<fromDate>2024-01-01</fromDate>
<ToDate>2024-12-31</ToDate>
</DragMetDynamic>
</soap:Body>
</soap:Envelope>
Теперь достаточно писать:
import cbrapi
cbrapi.get_metals_prices('2024-01-01', '2024-12-31')
Что такое SOAP API?
Банк России для доступа к данным использует SOAP API. Этот протокол немного устарел (появился в 1998 году). В современных проектах его почти полностью вытеснили REST и современные подходы вроде GraphQL и gRPC. Но в банковской среде SOAP всё еще встречается часто.
В отличие от REST в SOAP используется XML для форматирования данных и присутствуют строгие стандарты, которые делают его достаточно надежным и безопасным для передачи данных.
Установка cbrapi
Установка библиотеки делается просто.
pip install cbrapi
После этого можно импортировать и пользоваться библиотекой.
Курсы валют и цены золота
Импортируем библиотеку:
import cbrapi as cbr
Самая популярная часть базы данных ЦБ - это официальные курсы валют к рублю.
# Ознакомиться со списком доступных валют (более 150 наименований):
cbr.get_currencies_list()
После выбора конкретной валюты можно посмотреть ее историю и построить график.
df = cbr.get_time_series(symbol='USDRUB', first_date='2019-01-01', last_date='2020-12-31', period='M')
df.plot(title='График курса USDRUB')

Данные ЦБ для удобства дополнены нами в праздничные и выходные дни (курс в выходные - это курс предыдущего дня).
Полезными будут и данные по ценам драгметаллов, например, золота.
df = cbr.get_metals_prices(first_date='2020-10-15', last_date='2025-10-15', period='M')
df['GOLD'].plot(title='Цена на золото')

Другие полезные функции cbrapi
Кроме курсов валют в базе данных Цетнального банка есть еще много полезного.
История ключевой ставки:
cbr.get_key_rate('2005-01-01', '2025-10-01', period='M')
# можно указать периодичность данных: месяц 'M' или день 'D'
Международные резервы Российской Федерации:
cbr.get_mrrf('2020-10-01', '2025-10-01')
Ставка RUONIA overnight:
cbr.get_ruonia_overnight('2024-10-01', '2025-10-01')
В cbrapi есть и другие виды ставки RUONIA, ставки ROISfix и еще много чего. Полный перечень функций доступен в README.
Где мы используем cbrapi?
Библиотека cbrapi применяется в наших собственных проектах. Поэтому будет активно поддерживаться. Мы используем данные ЦБ в базе данных okama для получения истории официальных курсов валют ЦБ (например EURRUB.CBR), ключевой ставки (RUS_CBR.RATE), ставок RUONIA (RUONIA.RATE) и др. Все эти данные вместе с историей торгов бирж мира, криптовалют, драгметаллов, коммодитиз и недвижимости доступны бесплатно на API okama.
Кроме того cbrapi активно используется в нашем проекте подготовки налоговых деклараций по зарубежным инвестициям (рабочее место налогового консультанта инвестора).
Проблемы с открытыми API
В России формально существует множество открытых финансовых данных, но их использование на практике сопряжено с серьезными трудностями. Большая часть государственных источников предоставляет информацию в устаревших форматах. Например, Росстат по-прежнему распространяет данные в виде Excel-файлов. Крупный проект ЕМИСС, являющийся интегратором статистической информации, не имеет открытого API. Сайт работает медленно и нестабильно. У Минфина тоже нет API.
На этом фоне положительно выделяются проекты Московской биржи и Центрального банка, которые развивают открытые API, позволяющие интегрировать данные в финансовые приложения и аналитические сервисы.
Отдельного внимания заслуживает инициатива Ассоциации Финтех Концепция открытых API — попытка создать единый технологический стандарт для финансового сектора. Но этот проект на первых стадиях затрагивает только банковскую среду. Только на поздних этапах планируется сделать единый стандарт и для сектора финансовых данных в учреждениях.
Другие библиотеки для финансовых API
cbrapi - это не единственный проект, который мы поддерживаем для доступа к открытым финансовым данным по API.
nbsc - Бюро статистики Китая (National Bureau of Statistics of China – NBSC)
cfets - Валютная торговая система Китая (China Foreign Exchange Trade System - CFETS)
ecb - Европейский центральный банк (European Central Bank - ECB)
ons - Управление национальной статистики Великобритании (UK Office for National Statistics - ONS)
boi - Банк Израиля (Bank of Israel - BOI)
Возникает справедливый вопрос: "Зачем всё это, если финансовые данные можно взять в одном месте, например, в IMF?". Да, там действительноесть есть много финансовых данных. Но публикуются они часто с задержкой 1 месяц и более, кроме того, специфические виды финансовой информации отсутствуют. Есть отличные библиотеки - интеграторы типа pandas-datareader. Мы ими, конечно, пользуемся. Например, для получения макро-финансовых данных по США. Тем не менее, эти инструменты не охватывают весь спектр необходимых данных.
Приглашаем всех желающих поучаствовать в развитии проекта
Вы можете:
Предлагать новые идеи
Участвовать в разработке кода
Сообщать об ошибках
Репозиторий библиотеки находится на GitHub.
ne555
Если нужен карманный анализ, то либа пашет и на телефоне.
Пруф