Полгода назад, летом 2020 года я написал скрипт поиска ликвидных облигаций на Мосбирже. Скрипт нужен для поиска облигаций, которые можно купить прямо сейчас с доходностью гораздо выше банковского вклада. Проценты по вкладам так и остаются на очень низких уровнях, а тут ещё и изменения в налоговом кодексе РФ подоспели. 

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

Работа скрипта по поиску облигаций в Visual Studio Code
Работа скрипта по поиску облигаций в Visual Studio Code

Изменения в работе скрипта

1. Убраны неактуальные данные о налоговых льготах.

В 2020 году и ранее в налоговом кодексе РФ действовал п. 25 ст. 217, в соответствии с которым от НДФЛ освобождались проценты по государственным и муниципальным облигациям РФ. В результате чего при получении на брокерский счет, например, процентов по государственным облигациям ОФЗ со стороны брокера не удерживался никакой налог.

Однако с 1 января 2021 г. этот пункт прекратил своё действие. Поэтому с процентов по всем облигациям будет удерживаться НДФЛ. Кроме того, будет удерживаться НДФЛ и с процентов по любым корпоративным облигациям.

Ведь в 2020 году и ранее при соблюдении ряда условий можно было избежать уплаты НДФЛ с процентов по облигациям российских компаний. Для этого облигация должна была быть эмитирована уже после 1 января 2017 г. в рублях. Если по этой облигации проценты выплачивались в пределах порогового значения «ставка рефинансирования ЦБ РФ + 5%», то с этих выплат НДФЛ не удерживался. Однако с 01 января 2021 г. все эти нормы были убраны из Налогового кодекса.

В результате чего с начала 2021 года брокеры будут удерживать НДФЛ по ставке 13% с купонов по любым облигациям.

2. Изменен механизм фильтрации неликвидных вариантов.

Под неликвидными вариантами подразумеваются облигации, которые выглядят привлекательными по доходности, но по ним нет покупок и продаж на бирже. Невозможно купить безадресно - если никто на бирже не подал заявку на продажу облигаций, то купить эту облигацию вы не сможете. И в облигациях такое случается часто. Все удерживают и никто не продаёт. Сейчас скрипт отсчитывает 15 дней от текущей даты moment().subtract(15, 'days') и затем проверяет обороты за каждый торговый день - соответствует ли цифра оборота указанному пороговому значению. Если оборотов нет, то бумага в выборку не попадает.

3. Добавлены сводные данные о месяцах, когда происходят выплаты.

График выплаты купонов ВсеИнструменты.ру ООО БО-01 (RU000A0ZZXT0) с сайта Мосбиржи
График выплаты купонов ВсеИнструменты.ру ООО БО-01 (RU000A0ZZXT0) с сайта Мосбиржи

Сводные данные о месяцах, в которых производятся выплаты, берутся из Графика выплаты купонов. Прошлые даты выплат в результаты не попадают:

coupondate = json.coupons.data[i][3]
inFuture = new Date(coupondate) > new Date()
if (inFuture == true) {
    couponDates.push(+coupondate
        .split("-")[1]
    )
    console.log(`${getFunctionName()}. Купон для ${ID} выплачивается в месяц ${JSON.stringify(couponDates[couponDates.length - 1])} (строка ${couponDates.length}).`)
}

И получается массив с цифрами будущих месяцев выплат. Далее эти цифры приводятся в текстовый вид и получается что-то вроде такой строки с месяцами:

–––-–––-мар-–––-–––-июн-–––-–––-сен-–––-–––-дек

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

–––-–––-мар-–––-май-–––-–––-авг-–––-–––-–––-дек
–––-фев-–––-апр-–––-июн-–––-–––-сен-–––-–––-дек

Как пользоваться?

Поиск ликвидных облигаций Мосбиржи под Windows

Для Windows доступен установщик Node.js в разделе загрузить официального сайта.

Скриншот с сайта загрузки Node.js
Скриншот с сайта загрузки Node.js

Скачиваем установщик для Windows и запускаем его. Кроме базовых компонентов, дополнительно ничего устанавливать не надо.

Далее скачиваем код скрипта с гитхаба. После этого переходим в каталог /SilverFir-Investment-Report-master/Node.js Release/bond_search_v2/, где находятся скачанные файлы:

Каталог с необходимыми для запуска проекта файлами
Каталог с необходимыми для запуска проекта файлами

И запускаем файл first start.bat, который содержит указание показать установленную текущую версию Node.js и установить необходимые для запуска проекта зависимости node-fetch и moment:

node -v
pause
npm install node-fetch moment

После этого всё готово для запуска скрипта поиска облигаций. Для этого запускаем файл start.bat:

Выполнение скрипты поиска облигаций. После запуска файла start.bat
Выполнение скрипты поиска облигаций. После запуска файла start.bat

Менее чем за минуту будет создан HTML файл с подпапке searching_results с текущей датой в имени — он и содержит в себе найденные результаты.

Результат работы скрипта в виде html файла
Результат работы скрипта в виде html файла

Поиск ликвидных облигаций Мосбиржи под Linux

Если на вашем компьютере установлен Linux, скорее всего вы и сами знаете как лучше сделать. Код скрипта доступен на гитхабе. Перейдите в каталог /SilverFir-Investment-Report-master/Node.js Release/bond_search_v2/.

Проверьте что Node.js установлена:

$ node -v

Проверьте что пакетный менеджер npm для Node.js установлен:

$ npm -v

Установите зависимости (в данном случае это только node-fetch и moment):

$ npm install node-fetch moment

Запустите файл скрипта:

$ npm start

Примерно за минуту html файл будет создан:

fs.writeFileSync(path.resolve(__dirname, `./searching_results/bond_search_${moment().format('YYYY-MM-DD')}.html`), hmtl)
Выполнение работы скрипта под Linux
Выполнение работы скрипта под Linux

Поиск ликвидных облигаций Мосбиржи под macOS

Для macOS доступен установщик Node.js в разделе загрузить официального сайта.

Сам процесс похож на установку под Windows и Linux.

Настройка параметров поиска

Теперь пришла пора настроить именно те параметры которые актуальны для вас, а не те, которые указаны для примера в самом скрипте. Сделать это можно в файле index.js, со строки 45.

Задаваемые параметры поиска
Задаваемые параметры поиска

Редактируем цифры, запускаем скрипт заново и примерно за минуту выборка готова.

Предыдущие версии

Предыдущие версии скрипта, без изменений 2021 года, доступны в следующих видах:

  1. Node.js версия.

  2. Docker версия (форк).

  3. Версия поиска в Гугл таблице.

Итоги

Скрипт помогает экономить время и находить облигации, которые устраивают по доходности и временному горизонту. 

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

Скрипт работает только за счет API Московской биржи, с которой я никак не связан. Я использую ИСС Мосбиржи только в личных информационных интересах.

Автор: Михаил Шардин,

4 января 2021 г.