Продолжаем использовать гугл таблицы для учета инвестиций (начало здесь). Разберем как можно автоматически получать котировки и название облигаций, обращающихся на Московской бирже. На что обратить внимание и некоторые особенности получения данных и учет в гугл таблицах (Google Sheets).
Как всегда, в статье расскажу весь алгоритм и логику получения данных. Кому неинтересно, в конце есть ссылка на готовый файл-шаблон со всеми формулами.
Получаем данные по ОФЗ
Формула вызова цены по облигациям выглядит следующим образом:
=IMPORTxml("https://iss.moex.com/iss/engines/stock/markets/bonds/boards/TQOB/securities.xml?iss.meta=off&iss.only=securities&securities.columns=SECID,PREVLEGALCLOSEPRICE", concatenate("//row[@SECID='",A4,"']/@PREVLEGALCLOSEPRICE"))
В отличии от акций (котировки которых мы получали в этой статье), для облигаций торгующихся на Мосбирже, формула немного отличается:
- вместо shares пишем bonds;
- идентификатор меняем на TQOB;
- остальное без изменений.
В ячейке (в данном примере - A4) вместо тикера (как у акций), прописываем код ценной бумаги.
На примере ОФЗ с погашением в 2034 году. На сайте Мосбирже ищем карточку нужного инструмента. Смотрим код ценной бумаги (SU26225RMFS1) и идентификатор торгов (TQOB) - ссылка.
Обратите внимание!
Не путать Код ценной бумаги и ISIN код. Для Мосбиржи именно для ОФЗ - это разные значения. По другим бумагами коды могут полностью совпадать.
В таблицах это будет выглядеть примерно так:
По коду ценной бумаги совсем непонятно, что это за облигации. Можно конечно прописать название вручную, но это не наши методы. Будем получать наименование бумаг автоматически.
Для вызова названия облигаций используем следующую формулу:
=IMPORTxml("https://iss.moex.com/iss/engines/stock/markets/bonds/boards/TQOB/securities.xml?iss.meta=off&iss.only=securities&securities.columns=SECID,SECNAME,COUPONPERCENT,MATDATE", concatenate("//row[@SECID='",A4,"']/@SECNAME"))
В итоге таблица принимает более человеческий вид.
Статьи в тему:
Корпоративные, муниципальные и еврооблигации
Если применить описанную выше формулу к другим бумагам (не ОФЗ), таблица будет выдавать ошибку. В чем дело?
В идентификаторе режима торгов. У ОФЗ он - TQOB, у не ОФЗ будет другой.
На примере облигаций Система с погашением в 2028 году.
Снова ищем страницу инструмента (облигации) на сайте Мосбиржи.
Идентификатор торгов - TQCB.
Обратите внимание: код ценной бумаги совпадает с ISIN.
Поэтому формула для получения котировок по корпоративным облигациям будет иметь вид:
=IMPORTxml("https://iss.moex.com/iss/engines/stock/markets/bonds/boards/TQCB/securities.xml?iss.meta=off&iss.only=securities&securities.columns=SECID,PREVLEGALCLOSEPRICE", concatenate("//row[@SECID='",A7,"']/@PREVLEGALCLOSEPRICE"))
Для автоматической вставки правильного названия бумаги также меняем идентификатор на TQCB:
=IMPORTxml("https://iss.moex.com/iss/engines/stock/markets/bonds/boards/TQCB/securities.xml?iss.meta=off&iss.only=securities&securities.columns=SECID,SECNAME,COUPONPERCENT,MATDATE", concatenate("//row[@SECID='",A7,"']/@SECNAME"))
Идентичный идентификатор торгов (соотвественно и формулу) будет иметь муниципальные бумаги.
По еврооблигациям (торгующимися в валюте) в формуле используем другой идентификатор.
Для примера возьмем еврооблигации Газпрома в погашением в 2034 году.
Ищем на сайте Мосбиржи карточку инструмента (ссылка).
Узнаем Код - XS0191754729 и Идентификатор - TQOD.
Соответственно формулы вызова котировок и названия у еврооблигаций будут иметь вид:
Котировки евробондов:
=IMPORTxml("https://iss.moex.com/iss/engines/stock/markets/bonds/boards/TQOD/securities.xml?iss.meta=off&iss.only=securities&securities.columns=SECID,PREVLEGALCLOSEPRICE", concatenate("//row[@SECID='",A13,"']/@PREVLEGALCLOSEPRICE"))
Название еврооблигации:
=IMPORTxml("https://iss.moex.com/iss/engines/stock/markets/bonds/boards/TQOD/securities.xml?iss.meta=off&iss.only=securities&securities.columns=SECID,SECNAME,COUPONPERCENT,MATDATE", concatenate("//row[@SECID='",A13,"']/@SECNAME"))
После всех манипуляций в гугл таблице у меня вышло вот так: вызов различных значений по четырем разным видам облигаций.
На этом собственно можно было и завершить мою поэму. Но есть парочка особенностей.
Настройка таблицы
Котировки облигаций несколько отличаются от котировок акций. По облигациям выводится цена не рублях (долларах, евро), а в процентах от номинала.
Обычно номинал российских бумаг - 1 000. Соответственно, если в котировках ОФЗ мы видим 101,587 - это значит, что цена облигации 101,58% от номинала или 1 015,87 рублей.
Поэтому для правильного учета позиций портфеля нужно в дополнительную колонку прописать номинал бумаг и произвести арифметические действия.
Идентификаторы, код и поиск облигаций на Мосбиржи
Запомнить идентификаторы торгов для разных видов облигаций:
- TQOB - ОФЗ;
- TQCB - муниципальные и корпоративные;
- TQOD - евробонды.
У всех облигаций (кроме ОФЗ), код ценной бумаги совпадает с ISIN. ISIN код всегда указывается рядом с названием бумаги (в приложении брокера). Это я к тому, что не обязательно каждый раз искать на Мосбирже карточку облигаций.
Файл-шаблон
Оставляю ссылку на мой файл со всеми вышеперечисленными примерами и рабочими формулами. Файл работает только на просмотр (без права редактирования).
Чтобы утащить к себе, в верхнем меню выбираем "Файл - > Создать копию". Сохраняем и дальше тираним и переделываем под себя.
Очень приветствуются замечания, пожелания и советы по улучшению.
Удачных инвестиций!
По моему проще настроить выгрузку из квика.
Не все пользуются квиком. Не везде можно выгрузить. Тут отслеживается в онлайне и в легкой табличке!
Класс! Искусство! 🙂
Еще бы понять как вытащить НДК?
НКД можно получить из столбца ACCRUEDINT:
=IMPORTxml(«https://iss.moex.com/iss/engines/stock/markets/bonds/boards/TQOB/securities.xml?iss.meta=off&iss.only=securities&securities.columns=SECID,ACCRUEDINT», concatenate(«//row[@SECID='»,A4,»‘]/@ACCRUEDINT»))
Пробую скопировать отдельную ячеек в свою таблицу. Пишет ошибка
Скопировал всю таблицу. Попробовал уж в данной таблице скопировать ячейку , ниже , в пустую ячейку
Но результат N.A.
PREVADMITTEDQUOTE Признаваемая котировка предыдущего дня. (Устарело) (Не рассчитывается с 2023-01-30)
заменяйте на PREVLEGALCLOSEPRICE (Официальная цена закрытия предыдущего дня). Иначе не работает таблица
Спасибо Огромное добрый человек! Поменял, все заработало!
Таблица не подгружает котировки. Не пробовали корректировать?
Было очень удобно)))
Поправил. Сейчас все работает.
В моей таблице котировки не отображает, хотя дня три назад всё прекрасно работало. Вношу вашу формулу в свою таблицу не работает (ссылка недействительна) код офз вношу в вашу таблицу работает. Настройки таблиц одинаковые, ячейку с кодом офз указываю верно. При переносе в формуле меняется только ячейка… и не работает, хотя один раз отобразила и всё. Сравнил уже посимвольно. На что ещё обратить внимание?
Здравствуйте,а можно добавить столбец,с доходностью актуальной,и кол-вом купонов в год?
Актуальная доходность в процентах хранится в столбце YIELDATPREVWAPRICE
Кол-во купонов в год надо считать, есть данные по длине купонного периода в днях — COUPONPERIOD.
Подскажите как выгрузить дату погашения? и полный купонный доход?
что такое А4, А7, А13?
так все-таки, каким образом выбрать именно ту ячейку А4, А7 или А13 со страницы?
Добрый день, если я захочу выгрузить в 2 клетки подряд одной формулой сразу и название и цену, как будет выглядеть формула?
1. В функциях гугл-таблиц разделителем параметров является символ «;» , а не запятая, как нам дает уважаемый автор. Иначе адреса ячеек, например А4, воспринимаются как произвольный текст, что трактуется как синтаксическая ошибка. Помните !
2. А где можно взять все ДЕЙСТВУЮЩИЕ обозначения и назначения колонок в запросе, чтобы самому проектировать вид гугл-таблицы. Например, SECID, LAST, ACCRUEDINT, COUPONPERIOD и т.д. ?
https://iss.moex.com/iss/engines/stock/markets/bonds/boards/TQCB/securities.xml
подождать надо — не сразу грузится
Добрый вечер! А ссылочку на таблицу можно обновить? Текущая не работает, увы…