Блог им. empenoso

Поиск ликвидных облигаций на питоне

На Московской бирже торгуется более 2500 облигаций, но большая часть из них неликвидна — в стакане почти нет предложений и сделок совершается крайне мало. Это затрудняет покупку и продажу таких бумаг. При этом известные мне публичные сервисы не суммируют объемы торгов за период, поэтому сложно быстро найти облигации с высокой ликвидностью.

Пять лет назад написал Node.js-скрипт, затем адаптировал его для Google Таблиц, а теперь разрабатываю Python версию. При помощи сообщества на GitHub эта Python версия идёт к созданию полноценной библиотеки с расширенными возможностями: автоматический поиск ликвидных облигаций, расчет денежных потоков, сбор новостей по эмитентам и вычисление оптимального объема покупки. Все это направлено на помощь простым инвесторам, вроде нас с вами, чтобы оперативно находить выгодные инвестиционные инструменты и принимать решения на основе актуальной информации.
Поиск ликвидных облигаций на питоне

Критерии выбора ликвидных облигаций на Московской Бирже

Ликвидность это один из ключевых параметров, поскольку даже высокодоходная бумага бесполезна, если её невозможно купить. В моём скрипте для поиска облигаций используются несколько основных критериев:

Доходность

Эффективная доходность облигации — один из главных параметров. В фильтре задаётся диапазон, например, от 15% до 30%. Важно учитывать, что этот показатель не включает налог с купонов и комиссии брокера.

Текущая цена

Облигации торгуются по разным ценам относительно номинала, все цены облигаций указаны в процентах, и этот параметр позволяет фактически выбрать стратегию получения дохода:

  • Если облигация торгуется сильно ниже номинала, основная доходность будет сформирована к моменту погашения (за счёт разницы между ценой покупки и номиналом).
  • Если облигация торгуется близко к номиналу, основная доходность складывается из купонных выплат в течение срока жизни.

Поиск ликвидных облигаций на питоне


Пример: облигация ЕвроТранс БО-001Р-03 на 10 марта 2025 года (код RU000A1061K1, ссылка):

  • Текущая цена: 86% от номинала
  • Купонная доходность: 13,6% годовых
  • Доходность к погашению: 26,78% годовых. Доходность к погашению предполагает, что вы держите облигацию до погашения и что все купонные выплаты будут произведены в срок.

Откуда такая разница? Дело в том, что облигация сейчас торгуется ниже номинала, а при погашении инвестор получит 100% номинальной стоимости. То есть, кроме купонов, инвестор дополнительно зарабатывает на разнице в цене. Именно поэтому параметр текущей цены помогает выбрать, когда получать основную доходность — постепенно в течение срока или разово в момент погашения.

Дюрация

Показатель дюрации позволяет выбрать облигации с нужным сроком жизни. Например, если мне нужна бумага на ближайшие 3–18 месяцев, фильтр исключает слишком краткосрочные или долгосрочные варианты.

Прозрачность выплат

Наличие полной информации о будущих купонных выплатах или наличие оферты.

Также я исключаю флоатеры, поскольку Московская биржа не передаёт по ним данные о будущих платежах.

Ликвидность

Ликвидность — основной критерий, ради которого создавался этот инструмент. В скрипте анализируются:

  • Минимальное число сделок за каждый из последних 15 дней — чтобы исключить облигации, которые могут внезапно «замереть».
  • Общий объём сделок за 15 дней — параметр, который позволяет выявлять бумаги с устойчивым спросом. Этот скрипт позволяет гибко подстраивать фильтры и находить действительно ликвидные облигации, подходящие под конкретно Вашу стратегию инвестирования.
Поиск ликвидных облигаций на питоне

Как работает скрипт

Скрипт использует API Московской биржи для получения актуальных данных об облигациях. Данные скачиваются для ознакомительных целей и это позволяет оперативно находить ликвидные облигации.
Поиск ликвидных облигаций на питоне


Ограничение запросов. С сентября 2024 года API Московской биржи начало периодически разрывать соединение без объяснения причин. Это продолжалось около полугода, поэтому в коде был установлен лимит — не более 50 запросов в минуту. Сейчас, в марте 2025, эта проблема больше не наблюдается, но ограничение оставлено для стабильности.

Московская биржа периодически меняет формат данных, что требует оперативного обновления скрипта.

Пошаговое руководство по запуску

Если вы не разбираетесь в программировании, но хотите воспользоваться этим Python-скриптом, следуйте инструкции:

Шаг 1. Скачайте скрипт

  • Откройте ссылку: GitHub проекта.
  • Нажмите «Code» → «Download ZIP».
  • Разархивируйте ZIP в удобную папку.

Поиск ликвидных облигаций на питоне


Шаг 2. Установите Python

Если Python не установлен:

Шаг 3. Установите зависимости проекта

  • Откройте папку с проектом.
  • Дважды кликните файл install_requirements.bat (Windows) или install_requirements.command (MacOS).

Шаг 4. Запустите скрипт

Дважды кликните файл 1_bonds_search by criteria.py.

Во время выполнения отображается лог выполнения.

Поиск ликвидных облигаций на питоне


Шаг 5. Наслаждайтесь результатом

Будет создан файл с текущей датой: bond_search_2025-03-25.xlsx

Поиск ликвидных облигаций на питоне

Преимущества open source и шаги к Python-библиотеке

Идея — набор из четырёх скриптов для личного использования. Разработал их как частный инвестор, понимая какие задачи стоят передо мной:

  • Поиск ликвидных облигаций
  • Автоматический расчёт денежных потоков
  • Сбор новостей по эмитентам
  • Расчёт оптимального объёма покупки

От одиночного скрипта к полноценной библиотеке

Так как проект открыт, к нему подключилось сообщество. Одним из первых с pull request пришёл lmasikl, который заинтересовался темой облигаций и предложил преобразовать набор скриптов в полноценную Python-библиотеку. Уже было внесено множество улучшений:

Март 2025

  • #12 – Добавлен простой тест как пример (автор: lmasikl, одобрено 19 марта)
  • #11 – Добавлена диаграмма взаимодействия пользователя со скриптом (автор: lmasikl, одобрено 17 марта)
  • #7 – Отформатирован код с дефолтными настройками Ruff (автор: lmasikl, одобрено 14 марта)
  • #6 – Внесен в приложение скрипт расчета оптимального объема покупки облигаций (автор: lmasikl, одобрено 13 марта)
  • #5 – Перенесен в приложение скрипт поиска новостей (автор: lmasikl, одобрено 12 марта)
  • #4 – Перенесен в приложение скрипт поиска облигаций (автор: lmasikl, одобрено 10 марта)
  • #3 – Начат переход к полноценной библиотеке (автор: lmasikl, одобрено 6 марта)

Февраль 2025

  • #2 – Исправлены некорректные значения в рублях (автор: gogbajbobo, одобрено 21 февраля)
  • #1 – Выполнен рефакторинг кода (автор: lmasikl, одобрено 20 февраля)

Добавлен план схемы работы:
Поиск ликвидных облигаций на питоне


Почему open source — это важно?

Открытый код даёт возможность сообществу вносить улучшения, исправлять ошибки и расширять функциональность. Гибкость библиотеки позволяет каждому настроить поиск облигаций под собственные нужды, создавая индивидуальные стратегии отбора.

Как практически использовать эту библиотеку

Допустим, у нас есть 300 000 рублей, которые мы хотим вложить в облигации. Чтобы минимизировать риски, разделим сумму на 10 разных облигаций.

  • Поиск ликвидных облигаций

    Первая часть скрипта анализирует рынок и отбирает бумаги с хорошей ликвидностью, подходящие под заданные критерии (доходность, дюрация, цена и т. д.).

  • Проверка эмитента

    Запускаем вторую часть скрипта — он собирает последние новости по эмитентам. Если обнаружены негативные публикации (например, судебные иски или финансовые проблемы компании), такие облигации исключаем из списка.

  • Расчёт денежных потоков

    Далее, используя третью часть скрипта, можно заранее рассчитать будущие выплаты по купонам и спрогнозировать точную доходность портфеля.

  • Расчёт объёма покупки

    Последний скрипт поможет рассчитать, сколько именно облигаций можно приобрести с учётом доступного капитала и НКД. Это позволяет эффективно распределить средства и избежать недостатка ликвидности.

Раз в месяц достаточно просматривать портфель, анализировать новые облигации через первый скрипт и при необходимости докупать бумаги. Такой алгоритм можно повторять бесконечно, постепенно увеличивая капитал.

Заключение

Использование этого скрипта позволяет частному инвестору систематизировать процесс подбора облигаций, минимизировать риски и упростить управление портфелем.

Присоединяйтесь к сообществу!

Этот проект развивается благодаря усилиям энтузиастов и разработчиков, заинтересованных в автоматизации инвестирования. Если у вас есть идеи по улучшению функциональности или вы хотите протестировать новые возможности, присоединяйтесь к обсуждению на GitHub!

Любые предложения, правки и новые модули помогут сделать библиотеку ещё более мощным инструментом для инвесторов.

Автор: Михаил Шардин
🔗 Моя онлайн-визитка
📢 Telegram «Умный Дом Инвестора»

★23
20 комментариев
Интересная тема! Еще бы каким-то образом добавить рейтинги к компаниям, чтобы можно было топов или ВДО выделять быстро
avatar
zam, я беру всю информацию с Московской биржи а она эти рейтинги не передаёт.

Рейтинги можно на сайте ЦБ РФ искать. Но там нет API, а в публичный скрипт парсинг сайта ЦБ РФ я бы не хотел добавлять:
ratings.cbr.ru/?formSearh=advanced&ratingName=&inn=7709971326&isin=&koNumber=&dateFrom=&dateTo=&disclaimer=1

Ну а для себя там пожалуйста как угодно можно
Михаил Шардин, Мосбиржа передает уровень листинга от 1 до 3. Можно его добавить, честно говоря примерно такую же приблуду для себя написал только без ликвидности (она особо мне не нужна). Задача выбрать из массового списка (по доходности — купонам — срокам и тп)  и дальше уже решение принимать самостоятельно.  У меня это выглядит вот так.
avatar
Илья Нечаев, у вас это для частного использования только?
Михаил Шардин, да но я могу предоставить код если это поможет вашему проекту. Куда отправлять?
avatar
Илья Нечаев, можете мне в телеграм empenoso.t.me/
Михаил Шардин, кстати вопрос вот эту диаграмму взаимодействия в чем рисовали?
avatar
Илья Нечаев, это нарисовал человек который пришёл на гитхабе с пул реквестами через
plantuml.com/plantuml/uml/SyfFKj2rKt3CoKnELR1Io4ZDoSa700003
Зачем вообще искать ликвидные облигации и вообще саму ликвидность у облигаций? Ликвидность нужна у инструмента спекуляций для которых облигации плохо подходят, облигации покупаются для того чтобы получить по ним гарантированные выплаты после чего и сама облигация погашается, выкупается, и все это независимо от её ликвидности, ну в редком случае облигация может подрасти так что её действительно может оказаться выгоднее продать, т.е. облигация это инструмент вложения и накопления а не спекуляций, для спекуляций же больше подходят акции и фьючерсы вот у них и нужна ликвидность, или я чего то не понимаю?
Алексей Иванов, ищу ликвидность чтобы купить здесь и сейчас
Алексей Иванов, у корпоратов объём всего выпуска может быть на 100 млн, и в стакане купить на 100 тыс может быть уже проблемой, корпораты — это не ОФЗ, ликвидность у них нужно учитывать
avatar
посмотрел ваш код, лучше хотя бы в sqlite  сначала скачивать, иначе по функционалу, если планируете развивать, вы скоро упрётесь в ограничения. у меня похожий скрипт есть, прошёл от скана на лету до postgres и потом шаг назад на sqlite, postgres показалось уже слишком, хотя отборы в нём sql запросами делать очень удобно
avatar
amberfoxman, понял, спасибо
Андрей Мельников, у вас macos. У меня нет мака чтобы протестировать
 ошибка. как исправить?
Андрей Мельников, у вас macos. перейдите просто в командную строку и выполните установку зависимостей вручную
Андрей Мельников, вы по инструкции делали?
Соглашусь с комментариями, что ликвидность не самая важная составляющая. Важнее доходность, но к сожалению она к погашению. И сравнивать доходность у облигаций, у которых до погашения 1 месяц и 10 лет — математически не верно. Я пошёл по другому пути. Рассчитываю доходность по периодами инвестирования, показывают рейтинг, отдельно делаю отчёт по ВДО и по ВВВ- и выше. Готовые ответы присылаю в ТГ, поэтому пользователям не нужно устанавливать библиотеки и запускать скрипты. Также предупреждаю о резком падении облигаций: t.me/+64L6MiT14oRiNDky
avatar
_blesk, как будто оформление сбилось у вас, все цифры в кучу

теги блога Михаил Шардин

....все тэги



UPDONW
Новый дизайн