Как я ищу ликвидные облигации на Московской бирже в 2022 году
С учетом налоговых изменений
Я уже рассказывал о том, как написал скрипт для поиска ликвидных облигаций. Но в 2021 году ситуация поменялась.
С 1 января 2021 года в России удерживается НДФЛ с купонов по всем облигациям.
Раньше действовал п. 25 ст. 217 налогового кодекса — по нему проценты по государственным и муниципальным облигациям РФ освобождались от НДФЛ. А сейчас этот пункт прекратил свое действие. Теперь и ОФЗ, и муниципальные, и корпоративные облигации оказались на одном уровне в плане налогов.
Я понял, что пора обновлять мою таблицу со скриптом. Заодно я задумался о том, чтобы учитывать в таблице не только ликвидность, но и месяцы выплат. Это важно для прогнозирования денежного потока поступлений по месяцам, чтобы разнести выплаты по как можно большему числу месяцев.
В итоге я собрал новую версию гугл-таблицы. В статье расскажу об изменениях и о том, как ею пользоваться 2022 году.

Что изменилось по сравнению с предыдущей версией
Исчез неактуальный столбец о налоговых льготах. Раньше в таблице была отметка, если облигацию выпустили после 1 января 2017 года, — на такие облигации действовали налоговые льготы. Сейчас льгот нет, отметки, соответственно, тоже.
Изменился алгоритм фильтрации неликвидных вариантов. Я переработал алгоритм, отсеивающий бумаги, по которым нет торговых оборотов. Гугл-скрипт отсчитывает 15 дней назад от текущей даты, а затем проверяет обороты за каждый из торговых дней. И если сумма оборота в каждый из дней не соответствует указанному пороговому значению, то эта бумага в выборку не попадает.
Добавились данные о месяцах выплат купонов. На сайте Мосбиржи для каждой облигации опубликован график выплаты купонов — там есть информация о месяцах выплат.
Гугл-скрипт обрабатывает все выплаты и вычленяет только месяцы предстоящих выплат, а затем сводит в текстовый вид. В результате во всей подборке бумаг теперь проще найти те, купоны по которым приходят в нужный вам месяц.

Какие параметры для меня важны
Мне было важно иметь возможность указать определенные параметры. Какие-то — диапазоном, какие-то — минимальным порогом.
Диапазон текущей доходности. В Т—Ж уже есть хорошая статья про доходность облигаций. При поиске для себя я указываю диапазон доходности 7—13%.
Диапазон текущих цен. Обычно я ищу варианты именно для парковки денег до полутора лет и держу облигации до погашения. Для этого случая слишком высокая цена скорее отпугивает: ведь эмитент при погашении заплатит только 100% номинала. Поэтому при поиске указываю диапазон: 97—102% от номинала.
Диапазон дюрации. Дюрация — это эффективный срок до погашения облигации. Учитываю диапазон так, чтобы видеть только те облигации, погашение по которым будет в нужные мне сроки. Обычно указываю диапазон 3—18 месяцев.
Условие минимального количества сделок в каждый из 15 последних дней. Это самый важный параметр, из-за которого я и писал скрипт. Неприятно, когда ты выбираешь облигацию, а только потом понимаешь, что торгов по ней нет. Поэтому я хотел иметь возможность указать пороговый объем сделок в каждый из последних 15 дней, чтобы фильтр показывал только те бумаги, которые подходят по условиям — и которые я точно смогу купить.
Все эти критерии я учел в своей таблице со встроенным поиском.
Как работает таблица
Если посложнее: таблица работает за счет программного интерфейса к информационно-статистическому серверу Московской биржи (ИСС, ISS). По ссылке есть описание работы сервиса.
Если попроще: я уже во всем разобрался. Вникать в открытый программный код, чтобы воспользоваться таблицей, вам не придется.

Сам код скрипта можно посмотреть через панель «Инструменты» → «Редактор скриптов». Расскажу вкратце, что делает скрипт:
- Подключается к внешнему сервису Московской биржи, перебирая укрупненные группы разных режимов торгов облигациями. Их три: «Т0: основной режим — безадрес», «Т+: основной режим — безадрес», «Т+: основной режим (USD) — безадрес».
- Далее скрипт ищет внутри этих ответов с сервера Мосбиржи бумаги, удовлетворяющие заданному диапазону текущей доходности и диапазону текущих цен.
- Когда такие бумаги найдены, это сразу уменьшает выборку с полутора тысяч всех доступных на Мосбирже облигаций до нескольких десятков максимум.
- Среди найденных вариантов происходит дальнейшая фильтрация по оборотам в каждый из 15 последних торговых дней.
- После этого массив найденных бумаг записывается в таблицу на вкладку «Результат», а перед этим вся вкладка очищается от любых записей.
- Разрешение на отображение и выполнение внешнего веб-контента требуется только для того, чтобы через дополнительный пункт меню отобразить ссылку на статьи в Т—Ж.
Работа скрипта полностью зависит от сервера Московской биржи
Это означает, что если Мосбиржа поменяет формат выдачи, или организует другие режимы торгов, или изменит что-то в существующей системе, то для корректной работы скрипта потребуется его доработка.
Пошаговое руководство по использованию
По ссылке откроется сразу ваша копия таблицы — можно редактировать данные прямо в ней.
После корректировки параметров скрипту необходимо авторизоваться для работы. Для этого перейдите на вкладку меню «Инструменты» → «Макросы» и выберите любой из двух пунктов: «1. Открыть описание работы таблицы» или «2. Искать по параметрам».
Далее скрипту потребуется дать разрешение для того, чтобы он смог работать в вашем аккаунте.



После выбора аккаунта Гугл сообщит, что эксперты компании не проверяли это приложение, но если нажать на ссылку «Дополнительные настройки», то появится еще одна ссылка — переход на страницу. Жмем на нее.

Далее потребуется разрешить такие действия:
- Просмотр, создание, изменение и удаление таблиц на «Гугл-диске».
- Подключение к внешнему сервису.
- Отображение и выполнение внешнего веб-контента в уведомлениях и на боковых панелях приложений Гугла.

Вы можете посмотреть список всех приложений, которые уже имеют доступ к вашему аккаунту. При необходимости можно закрыть доступ или изменить его настройки в любое время.
В меню этой гугл-таблицы появится новый пункт «Поиск облигаций v. 5», а в нем кнопка «Искать по параметрам». Она запустит работу скрипта, который закончит свою работу примерно за минуту, вставив результаты работы на лист «Результат».

Запомнить надо две вещи
- Скрипт делает предварительную механическую работу по подбору подходящих облигаций.
- Решение о дальнейшей покупке конкретных найденных бумаг должен принимать сам человек после знакомства с эмитентом.
18.05.21, 08:56
Ого, монументальная работа, спасибо за таблицу!
18.05.21, 09:53
Алексей, 🙏
19.06.21, 06:17
Михаил, добавите столбцы «Рейтинг эмитента» и «Дата выпуска»?
19.06.21, 06:24
Vladimir, автор не может править уже вышедшую статью. Рейтинг эмитента биржа НЕ транслирует.
18.05.21, 08:13
Касательно налога с купонов встречал мнение, что теперь можно быть наказанным при покупке облигации прямо перед выплатой. Мы отдаём НКД продавцу, а наш купон облагается налогом в полной мере. При этом излишне уплаченный налог не вернуть.
Может есть смысл ещё дату ближайшего купона в таблицу добавить или отношение НКД к купону на текущий момент?
18.05.21, 11:02
Sergey, по брокерским счетам в конце года (по ИИС - при закрытии) осуществляется подсчет прибыли/убытков и сумм уплаченных/неоплаченных налогов. Поэтому уплата НДФЛ за весь купон будет учтена
01.06.21, 08:50
Karl, имеете в виду, НКД будет учтен до продажи/погашения? Вот тут https://journal.tinkoff.ru/ofz-nalog/ речь о том, что все не так однозначно, но интересна конкретика насчет того, как сейчас на самом деле дела обстоят.
18.05.21, 08:34
Sergey, в этой статье я больше сосредоточился на технических аспектах поиска.
19.05.21, 08:21
Ничего не понял, но в закладки добавил!
Спасибо!
19.05.21, 08:22
Игорь, 🙏
19.05.21, 08:22
Спасибо большое за приложение. Неплохо бы еще показывать кредитный ретинг ато так можно накупить мусорных облигаций, имхо
25.05.21, 13:29
Денис, уж это можно самому посмотреть перед покупкой)
имхо, это меньшая из проблем, которая остаётся после работы скрипта)
19.05.21, 08:23
Денис, биржа не передает этих данных, их нет в API.
24.05.21, 09:34
Михаил, спасибо за таблицу, возможно дополнительную информацию получится (кредитный рейтинг и прочее полезные данные) взять например у сервиса Доход облигации или ему подобного
24.05.21, 09:34
Виктор, есть ли у них открытое API?
20.05.21, 15:48
спасибо большое, какое облегчение в поиске))))
20.05.21, 15:58
Игорь, 🙏
04.06.21, 16:40
Позвольте парочку пожеланий по полугодичному опыту использования вашей первой версии скрипта (во 2й как я погляжу до сих пор актуально):
1. Добавить в критерий отбора и отображать в таблице ИНТЕРВАЛ выплат купонов и вовсе не текстом как ту описано, а натуральными числами (в месяцах) пригодными для сортировки.
2. Добавить в итоговую таблицу текущий НКД по каждой бумажке.
PS Спасибо за ваш труд!
08.06.21, 11:55
Denis, 🙏
18.05.21, 12:21
Главное обходить Дядю Донера :)
18.05.21, 12:27
тьфунатебя, ¯\_(ツ)_/¯
19.05.21, 07:31
Когда уже Т–Ж выкатит виджет на основе вашей таблицы?
19.05.21, 07:37
Egor, Когда вы пользуетесь сами для себя это один подход, а когда организация - мне кажется могут возникнуть юридические вопросы.
20.05.21, 03:08
Спасибо, интересно. Я тоже самое (поиск) делаю в квике. Фильтры +- те же самые выставляются.
20.05.21, 03:10
Aleksey, разве суммарные обороты через Квик можно посчитать на периоде?
20.05.21, 03:53
Михаил, думаю нет, но это особо не имеет смысла, если мне налили на проколе какого- нибудь неликвидного безрискового субфедерала с купоном 14% годовых типа Оренбурга (есть у меня такая) мне не важно ничего. Купилась - будет до погашения лежать, хоть там 1 сделка в месяц на рубль будет и в стакане никого , я не продаю такое. Часть высокодоходного облигационного портфеля неприкосновенна и генерирует денежный поток и не продается.
А для всего остального есть короткие 26е офз, короткие корпоративы типа Сбера , альфы, итд. Там мне важно чтобы когда мамба будет 2000 чтобы я мог продать их пусть с небольшим даже убытком, или чтобы на тот момент погашение подошло каких нибудь выпусков. У меня довольно широкий портфель облигационный около 40 эмитентов(выпусков) , сейчас большая часть это короткие 1-2.5 летки ликвидные крупных эмитентов.
В общем суть какая, если я лезу куда-то за доходностью, ну допустим: самолёт, брусника, русаква все это будет 2-3 года лежать до погашения и мне не важен оборот по ним за период, взял , забыл, на замесе процентов на 10 сходят вниз и ладно )
Все остальное в фильтрах Квик есть
20.05.21, 03:57
Aleksey, весь скрипт направлен на то, чтобы выбрать бумаги с оборотом и купить их прямо сейчас. Если нет оборота или он минимален даже на 50 т.р. войти не получится.
20.05.21, 06:28
Михаил, каждый день у меня выставлено(через карман на автомате по сути) в покупку около 70 заявок по бондам (на плечи) на небольшие объёмы (сколько позволяет статус КПУРа, УДС, портфель)итд. Все заявки стоят ниже рыночной цены (в зависимости от движения ставки, время приближения к погашению итд) уровни на которых я стою мной корректируются (обычно раз в 3-4мес). Там где неделями нет объёма, а вы стоите условно говоря на 5% ниже текущей среди заявок-ботов, в один прекрасный момент кому-то все равно нужно будет выйти, или за него это сделает брокер (типа маржина по какой-то другой бумаге). Именно там то и могут налить со скидками хорошую доходность. Так пару раз мне наливали РДЖ какие-то выпуски полу мертвые. Все зависит от стратегии. НО! если говорить просто про стандартные подходы и людей кому нужно что-то подкупить и он выбрал одну облигу среди высокодоходного неликвида, то да, ваш скрипт очень хороший. Я вообще не спорю ни как и отмечу еще раз что вы сделали классную штуку. Просто почти все в квике это делается) ну почти все
20.05.21, 06:30
Aleksey, хорошая стратегия и спасибо за отзыв!
20.05.21, 06:41
Михаил, спасибо и вам! кстати, если кто не сталкивался то в неликвидных облигах очень классно работают боты-алгоритмы, такая интересная "околорыночная-полууголовщина". Стоишь ты на 5% ниже текущей в стакане допустим на покупку 100 бумаг перед тобой выставлено еще 10 заявок по разным ценам с объёмами в разы превышающими твой, то есть прям на миллионы рублей куча заявок стоит 1000шт 300шт итд и тут в какой-то момент происходит прокол вниз и у тебя исполняется покупка 1шт из 100шт) при этом все заявки стоящие перед тобой убираются на доли секунду, далее ползунком "жирные" (маркет мейкеры или хозяева - не знаю кто) видимо прощупывают стакан (не знаю зачем это в облигах делается) и при встрече с реальным встречным объёмом заявка на продажу в момент исполнения убирается. Ты смотришь в стакан, заявки перед тобой как стояли так и стоят, смотришь на график видишь соплю вниз до твоей цены, смотришь объём а там реально 1шт или типа того) То есть ты понимаешь что ты сидишь там где нет людей)))
20.05.21, 06:43
Aleksey, спасибо что делитесь опытом - это отлично, когда приходят люди по теме статьи и она обрастает новыми подробностями, про которых в статье нет ни слова.
02.06.21, 09:16
Спасибо автору за обновления скрипта. Для удобства развернул скрипт на своем веб-сервере, чтобы можно было оперативно сформировать выборку с телефона и добавил пару фильтров - https://bonds.olegen.ru/
02.06.21, 16:41
Олег, это хорошо, но я не поддерживаю идею сделать из этого публичный сервис с закрытым исходным кодом.
В первую очередь из-за того, что Мосбиржа берет плату за предоставление данных с публичных сервисов и это может привести к судебным разбирательствам.
А когда каждый использует сам лично для себя он волен делать что хочет.
30.10.21, 16:21
Михаил, доброе время благодарю вас за прекрасную работу очень помогает для начинающих инвесторов
30.10.21, 16:20
Олег, благодарю вас за сервис я как начинающий инвестор очень помогли.
19.05.21, 09:05
Большое спасибо. В основном ориентировался на звездочки рейтинга и узнаваемость крупной компании, теперь станет интереснее и доходнее.
Добавьте, пожалуйста, ссылку на эту статью в вашу таблицу. Пройдет время, и уже не вспомнить, откуда эта таблица, как ее обновить
19.05.21, 09:37
Доходность просто берется с биржи или как-то рассчитывается? Много раз сталкивался, что на бирже и в квике доходность отображается некорректно.
22.05.21, 08:02
Спасибо! Вы большой молодец 👍🏻
24.05.21, 11:00
Спасибо за таблицу. А как можно Еврооблигации только найти ?
24.05.21, 11:06
Andrew, это как раз обычные лимитные заявки, когда в случае прокола исполняется сразу если объёма хватает, а не выбрасывается с задержкой как это бывает с тейк профитами которые могут проскальзывать на этих полоуголовных кратковременных (0.0001сек) манипуляциях с проколами (толстые пальцы )
24.05.21, 14:28
Надо как-то учитывать близость выплаты купона к покупке облигаций. Чем ближе эти даты, тем меньше доходность (теряете на НДФЛ, т.к. увеличивается НКД)
26.05.21, 07:38
Sergei, Гугл блокирует неавторизованные им самим скрипты, когда число пользователей одного скрипта переходит определенный порог. Как можно выйти из ситуации?
Без копирования моего файла создайте файл с таблицей, скопируйте туда условия и зайдите в редактор скриптов. В редакторе скриптов скопируйте мой код в ваш файл. Все. Теперь ко мне скрипт не будет иметь отношения. И будет работать.
01.10.21, 20:15
Как добавить в скрипт дату до погашения?Очень нужно
30.07.22, 19:35
Почему-то скрипт перестал выдавать результат, выводит только заголовок таблицы и дату обновления внизу
16.09.22, 14:52
Михаил, Спасибо! Нашел теперь.
28.09.22, 11:04
Александр, просто замените путь в bat файле на папку где лежит ваша папка со скриптом
pushd C:\Portable\SilverFir-Investment-Report-master\Node.js Release\bond_search_v2
cmd /q /k node index.js > C:\Portable\SilverFir-Investment-Report-master\Node.js Release\bond_search_v2\log\log_%ldt%.txt
17.12.22, 11:56
Здравствуйте Михаил!
Ваш скрипт, действительно, очень удобен и реализован отлично! Вот, что заметил - проблема с дюрацией, в параметрах поставил от 6 до 18 мес, в результате пишет 8, а когда просматриваю на rusbonds свойства облигации, у нее погашение через 2 года. И ещё, есть ли фильтр внутри, который отбрасывает облигации с офертой? У меня проскочила одна, ТатнхимР01, даже купил, а потом смотрю, у них оферта безотзывная в 2023 г., надо их продать от греха подальше...
Вот бы фильтр, чтобы весь этот шлак отбрасывал.
19.12.22, 15:54
Михаил, только я отчаялся и... получилось!
Вот, что надо делать - архив bond_search_v2 распаковывается в папку, где установлен Node, в 64й версии это c:\Program Files\nodejs\, в файле bond_search_v2_start_windows.bat изменить директории для команд pushd и cmd на данную папку. Тогда результата появился, лога нет, но он мне и не нужен. Все, спасибо.
26.02, 16:49
Доработка скрипта дает еще больше возможностей. Михаил, удачи Вам в совершенствовании скрипта, он действительно полезен и удобен. Супер!
08.07, 12:39
Добрый день, спасибо за работу. Когда и где ждать продолжение?