Я уже рассказывал о том, как написал скрипт для поиска ликвидных облигаций. Но в 2021 году ситуация поменялась.

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

Я понял, что пора обновлять мою таблицу со скриптом. Заодно я задумался о том, чтобы учитывать в таблице не только ликвидность, но и месяцы выплат. Это важно для прогнозирования денежного потока поступлений по месяцам, чтобы разнести выплаты по как можно большему числу месяцев.

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

Моя таблица в «Гугл-документах»
Моя таблица в «Гугл-документах»

Что изменилось по сравнению с предыдущей версией

Исчез неактуальный столбец о налоговых льготах. Раньше в таблице была отметка, если облигацию выпустили после 1 января 2017 года, — на такие облигации действовали налоговые льготы. Сейчас льгот нет, отметки, соответственно, тоже.

Изменился алгоритм фильтрации неликвидных вариантов. Я переработал алгоритм, отсеивающий бумаги, по которым нет торговых оборотов. Гугл-скрипт отсчитывает 15 дней назад от текущей даты, а затем проверяет обороты за каждый из торговых дней. И если сумма оборота в каждый из дней не соответствует указанному пороговому значению, то эта бумага в выборку не попадает.

Добавились данные о месяцах выплат купонов. На сайте Мосбиржи для каждой облигации опубликован график выплаты купонов — там есть информация о месяцах выплат.

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

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

Какие параметры для меня важны

Мне было важно иметь возможность указать определенные параметры. Какие-то — диапазоном, какие-то — минимальным порогом.

Диапазон текущей доходности. В Т⁠—⁠Ж уже есть хорошая статья про доходность облигаций. При поиске для себя я указываю диапазон доходности 7—13%.

Диапазон текущих цен. Обычно я ищу варианты именно для парковки денег до полутора лет и держу облигации до погашения. Для этого случая слишком высокая цена скорее отпугивает: ведь эмитент при погашении заплатит только 100% номинала. Поэтому при поиске указываю диапазон: 97—102% от номинала.

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

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

Все эти критерии я учел в своей таблице со встроенным поиском.

Как работает таблица

Если посложнее: таблица работает за счет программного интерфейса к информационно-статистическому серверу Московской биржи (ИСС, ISS). По ссылке есть описание работы сервиса.

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

Открытый исходный код работы скрипта
Открытый исходный код работы скрипта

Сам код скрипта можно посмотреть через панель «Инструменты» → «Редактор скриптов». Расскажу вкратце, что делает скрипт:

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

Работа скрипта полностью зависит от сервера Московской биржи

Это означает, что если Мосбиржа поменяет формат выдачи, или организует другие режимы торгов, или изменит что-то в существующей системе, то для корректной работы скрипта потребуется его доработка.

Пошаговое руководство по использованию

По ссылке откроется сразу ваша копия таблицы — можно редактировать данные прямо в ней.

После корректировки параметров скрипту необходимо авторизоваться для работы. Для этого перейдите на вкладку меню «Инструменты» → «Макросы» и выберите любой из двух пунктов: «1. Открыть описание работы таблицы» или «2. Искать по параметрам».

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

Выбор пункта работы скрипта
Выбор пункта работы скрипта
Диалоговое окно авторизации
Диалоговое окно авторизации
Выбор учетной записи для запуска скрипта
Выбор учетной записи для запуска скрипта

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

Предупреждение о конфиденциальности
Предупреждение о конфиденциальности

Далее потребуется разрешить такие действия:

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

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

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

Результат работы скрипта
Результат работы скрипта

Запомнить надо две вещи

  1. Скрипт делает предварительную механическую работу по подбору подходящих облигаций.
  2. Решение о дальнейшей покупке конкретных найденных бумаг должен принимать сам человек после знакомства с эмитентом.
Иллюстратор — Егор Шатохин
Михаил Шардин
А как вы ищете российские облигации?
Комментарии проходят модерацию по правилам журнала
Загрузка
0
Алексей Малахов 🔥
Ведущий подкаста «Схема»

Ого, монументальная работа, спасибо за таблицу!

57
Михаил Шардин

Алексей, 🙏

15
Vladimir Vidavskiy

Михаил, добавите столбцы «Рейтинг эмитента» и «Дата выпуска»?

1
Михаил Шардин

Vladimir, автор не может править уже вышедшую статью. Рейтинг эмитента биржа НЕ транслирует.

3
0
Sergey Arzumanov

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

Может есть смысл ещё дату ближайшего купона в таблицу добавить или отношение НКД к купону на текущий момент?

14
Karl Hungus

Sergey, по брокерским счетам в конце года (по ИИС - при закрытии) осуществляется подсчет прибыли/убытков и сумм уплаченных/неоплаченных налогов. Поэтому уплата НДФЛ за весь купон будет учтена

8
Кракатуков

Karl, имеете в виду, НКД будет учтен до продажи/погашения? Вот тут https://journal.tinkoff.ru/ofz-nalog/ речь о том, что все не так однозначно, но интересна конкретика насчет того, как сейчас на самом деле дела обстоят.

0
Михаил Шардин

Sergey, в этой статье я больше сосредоточился на технических аспектах поиска.

2
0
Траблшутер

Ничего не понял, но в закладки добавил!
Спасибо!

12
Михаил Шардин

Игорь, 🙏

2
0
Денис Суховерхов

Спасибо большое за приложение. Неплохо бы еще показывать кредитный ретинг ато так можно накупить мусорных облигаций, имхо

5
Кирилл Абрамов

Денис, уж это можно самому посмотреть перед покупкой)
имхо, это меньшая из проблем, которая остаётся после работы скрипта)

4
Михаил Шардин

Денис, биржа не передает этих данных, их нет в API.

1
Виктор Белов

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

2
Михаил Шардин

Виктор, есть ли у них открытое API?

1
0
Игорь Гречаный

спасибо большое, какое облегчение в поиске))))

5
Михаил Шардин

Игорь, 🙏

1
0
Denis K

04.06.21, 16:40

Отредактировано

Позвольте парочку пожеланий по полугодичному опыту использования вашей первой версии скрипта (во 2й как я погляжу до сих пор актуально):
1. Добавить в критерий отбора и отображать в таблице ИНТЕРВАЛ выплат купонов и вовсе не текстом как ту описано, а натуральными числами (в месяцах) пригодными для сортировки.
2. Добавить в итоговую таблицу текущий НКД по каждой бумажке.
PS Спасибо за ваш труд!

5
Михаил Шардин

Denis, 🙏

1
0
тьфунатебя ¯\_(ツ)_/¯

Главное обходить Дядю Донера :)

4
Михаил Шардин

тьфунатебя, ¯\_(ツ)_/¯

2
0
Egor Erohin

Когда уже Т–Ж выкатит виджет на основе вашей таблицы?

4
Михаил Шардин

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

3
0
Aleksey Panteleev

Спасибо, интересно. Я тоже самое (поиск) делаю в квике. Фильтры +- те же самые выставляются.

3
Михаил Шардин

Aleksey, разве суммарные обороты через Квик можно посчитать на периоде?

1
Aleksey Panteleev

20.05.21, 03:53

Отредактировано

Михаил, думаю нет, но это особо не имеет смысла, если мне налили на проколе какого- нибудь неликвидного безрискового субфедерала с купоном 14% годовых типа Оренбурга (есть у меня такая) мне не важно ничего. Купилась - будет до погашения лежать, хоть там 1 сделка в месяц на рубль будет и в стакане никого , я не продаю такое. Часть высокодоходного облигационного портфеля неприкосновенна и генерирует денежный поток и не продается.
А для всего остального есть короткие 26е офз, короткие корпоративы типа Сбера , альфы, итд. Там мне важно чтобы когда мамба будет 2000 чтобы я мог продать их пусть с небольшим даже убытком, или чтобы на тот момент погашение подошло каких нибудь выпусков. У меня довольно широкий портфель облигационный около 40 эмитентов(выпусков) , сейчас большая часть это короткие 1-2.5 летки ликвидные крупных эмитентов.
В общем суть какая, если я лезу куда-то за доходностью, ну допустим: самолёт, брусника, русаква все это будет 2-3 года лежать до погашения и мне не важен оборот по ним за период, взял , забыл, на замесе процентов на 10 сходят вниз и ладно )
Все остальное в фильтрах Квик есть

11
Михаил Шардин

Aleksey, весь скрипт направлен на то, чтобы выбрать бумаги с оборотом и купить их прямо сейчас. Если нет оборота или он минимален даже на 50 т.р. войти не получится.

2
Aleksey Panteleev

Михаил, каждый день у меня выставлено(через карман на автомате по сути) в покупку около 70 заявок по бондам (на плечи) на небольшие объёмы (сколько позволяет статус КПУРа, УДС, портфель)итд. Все заявки стоят ниже рыночной цены (в зависимости от движения ставки, время приближения к погашению итд) уровни на которых я стою мной корректируются (обычно раз в 3-4мес). Там где неделями нет объёма, а вы стоите условно говоря на 5% ниже текущей среди заявок-ботов, в один прекрасный момент кому-то все равно нужно будет выйти, или за него это сделает брокер (типа маржина по какой-то другой бумаге). Именно там то и могут налить со скидками хорошую доходность. Так пару раз мне наливали РДЖ какие-то выпуски полу мертвые. Все зависит от стратегии. НО! если говорить просто про стандартные подходы и людей кому нужно что-то подкупить и он выбрал одну облигу среди высокодоходного неликвида, то да, ваш скрипт очень хороший. Я вообще не спорю ни как и отмечу еще раз что вы сделали классную штуку. Просто почти все в квике это делается) ну почти все

13
Михаил Шардин

Aleksey, хорошая стратегия и спасибо за отзыв!

2
Aleksey Panteleev

Михаил, спасибо и вам! кстати, если кто не сталкивался то в неликвидных облигах очень классно работают боты-алгоритмы, такая интересная "околорыночная-полууголовщина". Стоишь ты на 5% ниже текущей в стакане допустим на покупку 100 бумаг перед тобой выставлено еще 10 заявок по разным ценам с объёмами в разы превышающими твой, то есть прям на миллионы рублей куча заявок стоит 1000шт 300шт итд и тут в какой-то момент происходит прокол вниз и у тебя исполняется покупка 1шт из 100шт) при этом все заявки стоящие перед тобой убираются на доли секунду, далее ползунком "жирные" (маркет мейкеры или хозяева - не знаю кто) видимо прощупывают стакан (не знаю зачем это в облигах делается) и при встрече с реальным встречным объёмом заявка на продажу в момент исполнения убирается. Ты смотришь в стакан, заявки перед тобой как стояли так и стоят, смотришь на график видишь соплю вниз до твоей цены, смотришь объём а там реально 1шт или типа того) То есть ты понимаешь что ты сидишь там где нет людей)))

11
Михаил Шардин

Aleksey, спасибо что делитесь опытом - это отлично, когда приходят люди по теме статьи и она обрастает новыми подробностями, про которых в статье нет ни слова.

3
0
Олег

Спасибо автору за обновления скрипта. Для удобства развернул скрипт на своем веб-сервере, чтобы можно было оперативно сформировать выборку с телефона и добавил пару фильтров - https://bonds.olegen.ru/

3
Михаил Шардин

Олег, это хорошо, но я не поддерживаю идею сделать из этого публичный сервис с закрытым исходным кодом.
В первую очередь из-за того, что Мосбиржа берет плату за предоставление данных с публичных сервисов и это может привести к судебным разбирательствам.
А когда каждый использует сам лично для себя он волен делать что хочет.

1
14 14

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

0
14 14

Олег, благодарю вас за сервис я как начинающий инвестор очень помогли.

0
0
Mr Zombie

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

2
0
Юрий Фролов

Доходность просто берется с биржи или как-то рассчитывается? Много раз сталкивался, что на бирже и в квике доходность отображается некорректно.

2
0
Вячеслав Горбатенко

Спасибо! Вы большой молодец 👍🏻

2
0
Александр Деревягин

Спасибо за таблицу. А как можно Еврооблигации только найти ?

2
Aleksey Panteleev

24.05.21, 11:06

Отредактировано

Andrew, это как раз обычные лимитные заявки, когда в случае прокола исполняется сразу если объёма хватает, а не выбрасывается с задержкой как это бывает с тейк профитами которые могут проскальзывать на этих полоуголовных кратковременных (0.0001сек) манипуляциях с проколами (толстые пальцы )

2
0
Вадим Гуревич

Надо как-то учитывать близость выплаты купона к покупке облигаций. Чем ближе эти даты, тем меньше доходность (теряете на НДФЛ, т.к. увеличивается НКД)

2
Михаил Шардин

Sergei, Гугл блокирует неавторизованные им самим скрипты, когда число пользователей одного скрипта переходит определенный порог. Как можно выйти из ситуации?
Без копирования моего файла создайте файл с таблицей, скопируйте туда условия и зайдите в редактор скриптов. В редакторе скриптов скопируйте мой код в ваш файл. Все. Теперь ко мне скрипт не будет иметь отношения. И будет работать.

2
0
Валентин

Как добавить в скрипт дату до погашения?Очень нужно

2
0
Антон М.

Почему-то скрипт перестал выдавать результат, выводит только заголовок таблицы и дату обновления внизу

2
Токарев Александр

Михаил, Спасибо! Нашел теперь.

1
Роман Т

Александр, просто замените путь в 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

1
0
Bad Santa

Здравствуйте Михаил!
Ваш скрипт, действительно, очень удобен и реализован отлично! Вот, что заметил - проблема с дюрацией, в параметрах поставил от 6 до 18 мес, в результате пишет 8, а когда просматриваю на rusbonds свойства облигации, у нее погашение через 2 года. И ещё, есть ли фильтр внутри, который отбрасывает облигации с офертой? У меня проскочила одна, ТатнхимР01, даже купил, а потом смотрю, у них оферта безотзывная в 2023 г., надо их продать от греха подальше...
Вот бы фильтр, чтобы весь этот шлак отбрасывал.

1
Bad Santa

Михаил, только я отчаялся и... получилось!
Вот, что надо делать - архив bond_search_v2 распаковывается в папку, где установлен Node, в 64й версии это c:\Program Files\nodejs\, в файле bond_search_v2_start_windows.bat изменить директории для команд pushd и cmd на данную папку. Тогда результата появился, лога нет, но он мне и не нужен. Все, спасибо.

1
0
Олег Насреддинов

Доработка скрипта дает еще больше возможностей. Михаил, удачи Вам в совершенствовании скрипта, он действительно полезен и удобен. Супер!

1
0
gvg

Добрый день, спасибо за работу. Когда и где ждать продолжение?

1

Сообщество