Михаил Шардин
Михаил Шардин личный блог
25 марта 2025, 03:59

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

На Московской бирже торгуется более 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 «Умный Дом Инвестора»

20 Комментариев
  • zam
    25 марта 2025, 09:19
    Интересная тема! Еще бы каким-то образом добавить рейтинги к компаниям, чтобы можно было топов или ВДО выделять быстро
      • Илья Нечаев
        25 марта 2025, 11:22
        Михаил Шардин, Мосбиржа передает уровень листинга от 1 до 3. Можно его добавить, честно говоря примерно такую же приблуду для себя написал только без ликвидности (она особо мне не нужна). Задача выбрать из массового списка (по доходности — купонам — срокам и тп)  и дальше уже решение принимать самостоятельно.  У меня это выглядит вот так.
  • Алексей Иванов
    25 марта 2025, 17:41
    Зачем вообще искать ликвидные облигации и вообще саму ликвидность у облигаций? Ликвидность нужна у инструмента спекуляций для которых облигации плохо подходят, облигации покупаются для того чтобы получить по ним гарантированные выплаты после чего и сама облигация погашается, выкупается, и все это независимо от её ликвидности, ну в редком случае облигация может подрасти так что её действительно может оказаться выгоднее продать, т.е. облигация это инструмент вложения и накопления а не спекуляций, для спекуляций же больше подходят акции и фьючерсы вот у них и нужна ликвидность, или я чего то не понимаю?
    • amberfoxman
      25 марта 2025, 19:40
      Алексей Иванов, у корпоратов объём всего выпуска может быть на 100 млн, и в стакане купить на 100 тыс может быть уже проблемой, корпораты — это не ОФЗ, ликвидность у них нужно учитывать
  • amberfoxman
    25 марта 2025, 19:50
    посмотрел ваш код, лучше хотя бы в sqlite  сначала скачивать, иначе по функционалу, если планируете развивать, вы скоро упрётесь в ограничения. у меня похожий скрипт есть, прошёл от скана на лету до postgres и потом шаг назад на sqlite, postgres показалось уже слишком, хотя отборы в нём sql запросами делать очень удобно
  • Андрей Мельников
    26 марта 2025, 13:08


  • Андрей Мельников
    26 марта 2025, 13:08
     ошибка. как исправить?

Активные форумы
Что сейчас обсуждают

Старый дизайн
Старый
дизайн