Работа скрипта по поиску облигаций на Московской бирже
Так как сервисов по поиску российских облигаций много, но ни один из них не имеет достаточной гибкости и простоты и поэтому на работу с ними тратится достаточно много времени. Исходя из этого и решил разработать собственный скрипт для поиска облигаций.
Сделал это на Node.js с выводом полученных результатов в локальный html файл с интерактивной таблицей от Google Charts (а в случае, если JavaScript отключен в браузере, что например происходит при открытии этого html файла из мессенджера на iPhone, то отображается статическая версия таблицы, также сгенерированная скриптом).
Существующие сервисы и мои параметры для поиска
Существующих сервисов довольно много:
- sMart-lab.ru — блоги трейдеров и инвесторов.
- Cbonds. Рынок внутренних и международных облигаций.
- Облигации в России — Rusbonds.
- Bonds.Finam.RU — информация о российском рынке облигаций.
- Сервис поиска от Московской Биржи.
- Анализ облигаций. Beta. УК ДОХОДЪ.
В разное время я пользовался всеми из них, причем некоторые из них были платные. Что мне не нравилось в этих сервисах — так это обилие параметров, в которых легко погрязнуть и которые не ведут к желаемому результату.
Мой желаемый результат — актуальная выборка из всех российских облигаций по следующим параметрам:
- Заданный диапазон текущей доходности.
- Заданный диапазон текущих цен.
- Заданный диапазон дюрации.
- Объем сделок за последние n дней больше порогового.
- Ответ на вопрос — есть ли налоговая льгота для корпоративных облигаций, выпущенных после 1 января 2017 года?
Конкретные цифры диапазонов могут быть любыми, например:
- 5% < Доходность < 11%
- 98% < Цена < 101%
- 4 мес. < Дюрация < 15 мес.
- Объем сделок за n дней > 15 000 шт.
А на выходе я бы хотел получать не больше 2-х десятков вариантов, которые точно попадали бы под моим критерии. Если вариантов находится больше, то лучше ужесточить свои критерии для получения меньшей по размеру выборки, которая бы точно соответствовала моим ожиданиям.
Облигации на Московской бирже доступны внутри основных режимов торгов:
- Т0: Основной режим — безадрес. (до 22.05.2020: 1443 бумаг, в июне — 131 шт.).
- Т+: Основной режим — безадрес. (до 22.05.2020: 295 бумаг, в июне — 1638 шт.).
- Т+: Основной режим (USD) — безадрес. (до 22.05.2020: 125 бумаг, в июне — 128 шт.).
Облигаций много, именно потому автоматизированное решение поиска мне кажется правильным шагом.
Мой скрипт поиска облигаций на Московской бирже
Я понимаю, что человек, которому необходим поиск облигации может и не разбираться в программировании, а тому, кто легко разберется в коде этого скрипта облигации могут быть неинтересны. И разбирающихся в программировании на Хабре явно больше, чем тех, кто разбирается облигациях.
Я хотел найти некий баланс — чтобы минимально подкованный человек мог воспользоваться результатами работы этого скрипта.
Ещё одно очень важное отступление — в скрипте всё напрямую зависит от работы API Московской биржи, которое имеет свои особенности.
Если говорить про поиск облигаций, то сразу после открытия торгов значения доходности по средневзвешенной цене (
YIELDATWAPRICE
) обнуляются. Схема определения средневзвешенной цены (
WAPRICE
)Значение
YIELDATWAPRICE
на мой взгляд выглядело лучше для целей поиска, но пришлось использовать YIELD
, иначе сразу после открытия биржи работа скрипта была невозможна.Ещё я использую цену предыдущего закрытия (
PREVLEGALCLOSEPRICE
), из-за того что по некоторым облигациям торгов может не быть несколько дней.Схема определения цены закрытия (
LEGALCLOSEPRICE
)Чтобы уменьшить количество обращений к API Московской биржи я использую значение дюрации (
DURATION
), а не беру готовое значение количества дней до погашения (DAYSTOREDEMPTION
), ведь я пользуюсь собственным скриптом только в личных целях.Распишу подробно все шаги которые нужны для работы моего скрипта.
Самое главное что понадобится для работы скрипта — Node.js. Это — среда выполнения JavaScript. Если раньше JavaScript можно было запустить только в браузере, но однажды разработчики расширили его, и теперь можно запускать JS на своем компьютере в качестве отдельного приложения.
Исходный код моего скрипта размещен на GitHub, и любой может свободно просматривать, проверять и может быть даже посоветует правки.
Поиск облигаций под Windows
Это будет самый подробный раздел, потому что большинство пользователей, которым это интересно, скорее всего, работают под Windows.
Для Windows доступен установщик Node.js в разделе загрузить официального сайта.
Раздел загрузки сайта проекта Node.js
Далее скачиваем установщик для Windows и запускаем его.
Выбор компонентов для установки Node.js
Кроме компонентов, находящихся на этом экране, больше ничего устанавливать не надо.
Скачиваем код скрипта с гитхаба.
Ссылка на скачивание с GitHub
После этого переходим каталог «
/SilverFir-Investment-Report-master/Node.js Release/bond_search_v2/
», где находятся скачанные файлы:Каталог с необходимыми для запуска проекта файлами
И запускаем файл
first start.bat
, который содержит указание показать установленную текущую версию Node.js и установить необходимую для запуска проекта зависимость node-fetch:node -v
pause
npm install node-fetch
Несмотря на такое короткое содержание Защитник Windows проявляет бдительность, но если нажать подробнее, то можно увидеть кнопку
Выполнить в любом случае:
Первоначальная настройка запуска проекта
Во время выполнения bat файла
После нажатия любой клавиши зависимость будет установлена в эту же папку:
Каталог вместе с добавленными файлами
После этого всё готово для запуска скрипта поиска облигаций. Для этого запускаем файл
start.bat:
Выполнение скрипты поиска облигаций. После запуска файла start.bat
Менее чем за минуту будет создан HTML файлов с текущей датой и временем в имени — он и содержит в себе найденные результаты.
Поиск облигаций под macOS
Для macOS доступен установщик Node.js в разделе загрузить официального сайта.
Сам процесс похож на установку под Windows и Linux.
Поиск облигаций под Linux
Если на вашем компьютере установлен Linux, скорее всего вы и сами знаете как лучше сделать. Код скрипта доступен на гитхабе. Перейдите в каталог «
/SilverFir-Investment-Report-master/Node.js Release/bond_search_v2/
».Проверьте что Node.js установлена:
$ node -v
Проверьте что пакетный менеджер npm для Node.js установлен:
$ npm -v
Установите зависимости (в данном случае это только node-fetch):
$ npm install
Запустите файл скрипта:
$ npm start
Примерно за минуту html файл под именем файл
bond_search_${new Date().toLocaleString().replace(/\:/g, '-')}.html
будет создан.Выполнение работы скрипта под Linux
Выборка облигаций
Я не сразу пришел именно к такой форме отчета, потому что я хотел чтобы этот файл отображался на любом устройстве и был удобен для просмотра. Больше всего проблем доставили айфоны — JS на них отключен и при пересылке этого отчета через любой мессенджер вместо интерактивной таблицы открывалось просто пустое место. Так что я дописал генератор обычных html таблиц.
Получились следующие виды:
На компьютере
На Android
На iPhone
Редактирование параметров выборки
Самое важное — настроить именно те параметры, которые важны именно вам, а не те, которые указал я для примера. Сделать это можно в файле
index.js
, со строки 42.Задаваемые параметры поиска
Указываете нужные вам цифры, запускаете скрипт заново и примерно за минуту выборка готова.
Docker support
Пользователь @supaflyster сделал форк с Docker версией:
- Скрипт запускается в докере (не нужно ставить nodejs и модули, обновление версии nodejs в Dockerfile) — проверял только на маке (linux тоже должен работать).
- HTML сохраняется в ./out/ (пришлось изменить, так как нужно примонтировать локальную папку в контейнер, куда будет сохранятся HTML).
- Изменил формирование имени файла, toLocaleString().replace(/:/g, '-')} — зависит от локали, и если делиметр не ":" то replace не отработает (в англ пытается создать bond_search_2020/5/22/11-00-00.html — что есть путь а не имя).
- docker-compose запускает контейнер (и соберет образ если он еще не собран) и передает параметры как environment variables, node читает их и если их нет то использует дефолтные из index.js — чтобы можно было запускать скрипт локально без докера.
Итог
Надеюсь что скрипт поможет экономить время и находить подходящие результаты, которые устраивают именно вас. Выборка «не является индивидуальной инвестиционной рекомендацией и может не соответствовать вашему инвестиционному профилю» — эту фразу я скопипастил, но она абсолютно верна, ведь сам скрипт это просто инструмент — решение о дальнейшей покупке конкретных найденных бумаг должен принимать уже человек после знакомства с эмитентом.
Скрипт работает только за счет API Московской биржи, которое предоставляет широкие возможности. Также хочу отметить, что я никак не связан с Московской биржей и использую ИСС Мосбиржи только в личных интересах.
Автор: Михаил Шардин,
22 июня 2020 г.
w3ga
удивительно, но подобные скрипты есть на всех сайтах «обозревателей»
единственное время, что там тратится, это в ручную забить параметры в фильтр, как и вашем скрипте.
и да самые доходные облигации в вашей выборке — строительные компании, лизинговые и микрофинансовые организации. первые две категории сейчас простаивают, микрофинансы начнут сыпаться когда население, что брало займы в период карантина, не будет расплачиваться. а доходность облигаций тех же крупных банков на уровне депозитов в них +\-. всё таки иногда лучше погуглить пол часика, чем писать «велосипеды», которые уже написаны до вас
empenoso Автор
Ну например, где конкретно? Я искал.
anonymous
Здесь есть кредитный рейтинг и индекс ликвидности — www.dohod.ru/analytic/bonds. Но это, конечно, не гарантирует возможности купить по хорошей цене. Большой плюс своего скрипта в том, что точно знаешь механику расчета и всегда можно скорректировать по необходимости.
empenoso Автор
Да, но индекс ликвидности — достаточно общее понятие.
empenoso Автор
Нет смысла обсуждать конкретные результаты поиска — тут каждый решает сам.
Сегодня результаты одни, завтра другие — рынок все таки.
empenoso Автор
Основная "фишка" скрипта — учёт ликвидности — вот с этим реально проблемы во всех сервисах, которые перечисляю в статье.
Belking
>> и да самые доходные облигации в вашей выборке — строительные компании,…
Вы даже не представляете, насколько это обидно, когда проведя ресёрч и составив план по покупкам, идёшь на биржу и сталкиваешься с тем, что посчитанная доходность определялась сделкой месячной давности. Так что обозначенное empenoso решение, наверное очень круто:
>> Основная «фишка» скрипта — учёт ликвидности — вот с этим реально проблемы во всех сервисах, которые перечисляю в статье.
Для себя же навострился параллельно с ресёрчем проверять эту ликвидность ручками на бирже.
empenoso Автор
Да, вот с этим и боролся для себя: чтобы исключить дополнительный ручной поиск.
progman_rus
альфа-банк евровые облигации 6,93 %
при этом депозит EUR в альфе на уровне ноля процентов
empenoso Автор
Можно ли их купить только человеку? Какой минимальный лот?
progman_rus
минимальный лот одна штука. Номинал 1000 евро. Я умудрился купить дешевле номинала.
Облигации бессрочные.
Альфа-Банк XS1760786340
Размер купона 6.95%
Период выплаты купона 90 дней
Я покупал через личный кабинет альфа-банка.
empenoso Автор
С Альфа-директом я прыгал в своё время с еврооблигациями. Можно было купить только через менеджера и ограниченное число, а фактический выбор на бирже был больше.
guestl
с бессрочными есть нюанс, что это суборды. то есть банк их может, например, списать со словами «не шмогла».
empenoso Автор
В текущей ситуации я обычно смотрю только самые короткие.
progman_rus
Насколько мне известно «обнулить» их может только крах банка. Что в случае с альфой сильно проблематично.
empenoso Автор
Я боюсь что возможно всё, насколько вероятно только.
progman_rus
Знаете — если рухнет альфа, то деньги уже не будут иметь значение.
АК-47 и ящик патронов. Сугубо мое личное мнение
empenoso Автор
Слишком апокалиптически, но «вечные» бонды я бы не стал покупать, но каждый решает сам. ?\_(?)_/?
progman_rus
Я решил что риски дефолта по этим облигациям около нулевые. А доходность слишком вкусная ?\_(?)_/?
aaabramenko
Случай, который был с Открытием, покоя не даёт в таких ситуациях.
progman_rus
«Открытие» входил в ТОП-10 банков и был признан системообразующим?
И потом его же не утопили. Дефолта по обязательствам не делали.
Свалиться Промсвязьбанку не дали а он на 11м месте стоял. Спасли.
aaabramenko
Да
Я подробностей не знаю, по облигациям Открытия всё выплатили?
progman_rus
Я не знаю. Дефолта банка точно не было. Полагаю что и по облигациям тоже не было дефолта.
empenoso Автор
Но с облигациями вроде не всё гладко было.
progman_rus
Облигаций этого банка у меня не было. В гугле нет никакой информации по дефолту по облигациям.
PS bcs-express.ru/novosti-i-analitika/stoit-li-investirovat-v-bumagi-otkrytiia-posle-natsionalizatsii-tsb
вот тут пишут что все хорошо кончилось. Дефолта не было.
aaabramenko
Проблемы были у Открытие Холдинг (не банк Открытие) rusbonds
maar
Только эти «бессрочные» облигации могут быть никогда не погашены.
progman_rus
Ну и что? Их всегда можно продать на рынке. Вопрос лишь в том — какая их цена будет в момент продажи.
PS А за 10 лет при таком проценте прибыль +100%
Как по мне так риск оправданный.
maar
Всегда можно продать по цене рынка (если ключевая ставка повысится, то цена пойдет вниз).
Это доп риски, обычные облиги можно до погашения держать, тут такой опции нет.
Цена бессрочных облигаций ниже, чем облигаций с датой погашения не на пустом месте.
Кому-то этот риск приемлем, кому-то — нет.
empenoso Автор
Когда реально всё плохо — покупателей может просто не быть. Одни продавцы.
guestl
это как-раз было не так давно с фьючерсами на нефть :)
mrShadow
Они вроде долларовые, а не евровые:
www.rusbonds.ru/ank_obl.asp?tool=138425
www.boerse-berlin.com/index.php/Bonds?isin=XS1760786340
progman_rus
Да, вы правы. Прошу прощения за ошибку.
maremman
«выборке — строительные компании»
Строительные компании сейчас в интересном положении. С одной стороны они получили «бронь» от правительства.
С другой, покупательная способность населения настолько упала, что притока новых средств (кредитов от банков под строительство) стоит ожидать не скоро.
Застройщики защитились от простых людей постановлением правительства №423 от 2 апреля. Теперь они никому не должны. Мало того, это постановление защищает ещё и не пострадавших от введённого карантина застройщиков. Теперь и они защищены буквой закона, от назойливых покупателей недостроенного жилья.
youtu.be/_jg6SQEoHN0