16 KiB
Облигации
Страница облигации объясняет условия конкретного выпуска, его рыночную цену, купонный календарь и личную позицию. Денежная оценка покупки, текущая купонная доходность, доходность источника к целевой дате и результат открытой позиции имеют разный смысл. Раздел сохраняет их отдельно, вместе с валютой, датой и ограничениями исходных данных.
Поиск и идентификация выпуска
Раздел «Облигации» открывает /bonds: поиск по названию, тикеру или ISIN
с двух символов. /bonds/:identifier принимает UID или точный тикер.
Название и логотип облигации в портфеле счёта и «Всех счетах» ведут на её
страницу по точному UID без предварительной загрузки карточек всех позиций.
При открытии выпуска проверенный однозначный тикер заменяет UID в адресе,
сохраняя период графика и фильтр событий.
Поиск выбирает один режим на нормализованный ISIN, сохраняя разные выпуски
и записи без ISIN отдельно. Приоритет: доступность API, точный тикер, TQOB,
затем UID. Ограничение — 30 результатов после выбора режима. Цена и ссылка
принадлежат выбранному UID. Прямая ссылка из портфеля сохраняет исходный UID,
если поиск предпочитает другой режим. Неоднозначный точный тикер возвращает
409 BOND_TICKER_AMBIGUOUS; интерфейс предлагает выбрать выпуск через поиск.
Поиск загружает параметры выпусков и котировки, но оставляет ссылки по UID:
отдельная проверка тикера для каждого результата не выполняется.
Содержание
Карточка показывает цену в процентах от номинала, время котировки и статус торгов. Изменение выражено в процентных пунктах относительно последней завершённой дневной свечи до московской даты котировки; база ищется за 20 дней. Денежная оценка без НКД равна цене в процентах, умноженной на текущий номинал и делённой на 100. Она округляется до девяти десятичных знаков. Оценка с НКД добавляет текущий накопленный купонный доход только при совпадении валют. Это ориентир без комиссии: котировка может быть старше текущего номинала и НКД. FX-конвертация не выполняется, первоначальный номинал не заменяет текущий.
Условия выпуска: текущий и первоначальный номинал, погашение, оферта, количество купонов в год, лот. Отдельно отмечены плавающий купон, амортизация, бессрочность и субординация. Неизвестные даты и суммы показываются как недоступные.
Сводка «Купон, рейтинг и доходность» показывает ближайший купон на одну облигацию, дату выплаты и тип из календаря Т-Банка. Неизвестная сумма ближайшей выплаты не заменяется суммой более позднего купона. Флаг плавающего купона используется только как запасной признак типа; отсутствие флага не означает фиксированный купон.
Текущая купонная доходность — ближайший купон × 365 / длительность его периода в днях / денежная цена без НКД × 100 %. Decimal-расчёт округляется до четырёх знаков. Требуются известная неотрицательная выплата, положительные цена и период и одинаковая валюта выплаты и цены. Это годовая оценка при сохранении размера купона и номинала, без налогов, комиссий и реинвестирования; она не является доходностью к погашению. Время котировки показывается отдельно.
Эффективная доходность берётся из marketdata_yields.EFFECTIVEYIELD MOEX ISS,
с проверкой точных SECID, ISIN и BOARDID. Показываются собственная цена
расчёта, дата торгов и целевая дата (погашение, оферта или другая дата источника).
Котировка MOEX может отличаться от котировки Т-Банка и поступать с задержкой.
Доходность не рассчитывается из неполного календаря будущих выплат.
Кредитный рейтинг выпуска читается по точному ISIN из публичного реестра НКР. Отображаются агентство, дата рейтингового действия, время получения реестра и ссылка на выпуск. Отзыв показывается явно; уровень риска Т-Банка и рейтинг эмитента не подставляются вместо рейтинга выпуска. Отсутствие записи в НКР не означает отсутствия рейтингов других агентств. Причины выбора источника и пределы покрытия сохранены в ADR 013.
HTML-источник, общий кэш и поведение при изменении реестра описаны в интеграции НКР.
График и таблица дневных цен сохраняют проценты от номинала и признак
завершённости свечи. Исторические котировки не пересчитываются в деньги
по сегодняшнему номиналу. Денежная средняя покупки не наносится на процентную
шкалу. Периоды: месяц, полгода, год и вся известная история. Окна upstream
не превышают 365 дней, одинаковые границы дедуплицируются. Если начало истории
неизвестно, запрос «вся история» возвращает BOND_HISTORY_START_UNAVAILABLE.
Позиция агрегирует только BOND с точным UID по доступным счетам, используя
снимок портфеля и decimal-арифметику. Средняя покупка взвешена
по количеству. Неполные или разновалютные суммы недоступны; общая средняя
и процент доступны только при положительных включённых позициях. Для
коротких позиций и сочетания длинных с короткими эти показатели не синтезируются.
Результат открытой позиции не включает выплаченные купоны и продажи и не
называется доходностью к погашению. При отсутствии позиции блок скрыт.
Купоны и личные события
Календарь охватывает пять прошлых лет и следующий год. Будущие купоны сортируются по дате выплаты, прошедшие и недатированные доступны отдельно. Будущие и прошедшие события купонного графика показываются единым предметным представлением выплаты с пометкой события по графику — тем же, что у исполненных выплат и прогноза; исполнение подтверждает только личная история. Показаны сумма на облигацию, отдельная личная оценка, номер, тип, длительность периода и дата реестра, если они известны. Неопределённый будущий купон не заменяется нулём.
Личная оценка доступна только при положительных позициях, известной сумме, будущей выплате и известном ещё не прошедшем реестре. Она не подтверждает право на выплату и не учитывает налоги и будущие сделки. Время позиции и устаревание снимка показываются отдельно от календаря выпуска.
Личная история использует журнал операций всех счетов с точным
instrumentUid, включая прошлые годы. Фильтры: все, сделки, купоны, прочее.
Смена фильтра сбрасывает пагинацию; истёкший курсор восстанавливается запросом
первой страницы. Выплаты выпуска не подменяют личные зачисления.
Получение данных и восстановление
Страницу облигации обслуживает инвестиционная подсистема backend.
Запросы /api/v1/bonds требуют действующей сессии с Bearer token и текущего
подключения T-Bank. Backend разрешает идентификатор и получает условия
выпуска, котировку, свечи, позицию, купоны и показатели. Точную форму
транспортного контракта задаёт HTTP API.
BondBy, FindInstrument и GetBondCoupons используют способ
декодирования, сохраняющий отсутствие полей. Общие данные выпуска, quotes,
календари, MOEX metrics и необходимые результаты НКР сохраняются в SQLite.
Личные позиции и оценки выплат используют текущий доступ и сохранённый
portfolio; они не попадают в общие источники.
BondBy переиспользуется зависимостями выпуска. Discovery принадлежит query, свежесть — конкретному source/range. Missing/stale зависимости запрашиваются в фоне через прежний limiter; обычный HTTP-ответ не ждёт брокера. Покрытые завершённые свечи не перечитываются после restart. Открытый хвост остаётся изменяемым; ручной refresh охватывает показанный период.
Последняя полная личная оценка сохраняется при ошибке новых обязательных зависимостей, вместе с исходным временем. Неполнота не означает отсутствие выплат. Наблюдение статуса не запускает повторный импорт. Политика источников и границы — в модели свежести.
Разделы загружаются независимо, показывают каркас загрузки и локальную повторную попытку. Ошибка фонового обновления сохраняет последние данные. Смена подключения сбрасывает поддерево клиентских запросов облигаций вместе с остальными финансовыми запросами; выход очищает кэш сессии. Общие график, позиция и личные события имеют общее представление на страницах акций и облигаций.
Основные спецификации портфеля и журнала описывают исходные финансовые понятия. Отдельная основная спецификация страницы облигации в текущем OpenSpec Store не найдена; условия вычислений подтверждены каталогом, рыночными данными, выплатами и проверками. Границы источников описаны в разделе интеграций, сходное разделение рыночных и личных данных — в акциях.
Online reference
Bond detail, search, and ticker lookup are read from the upstream integration on each request. Saved quotes, candles, events, ratings, and portfolio labels retain their own freshness and failure boundaries.