Облигационный калькуляторОбщее описаниеВывод результатовМаксимальный рейтинг (4060-у)Приоритет при выборе рейтингов:Алгоритм определения максимального рейтинга:Рейтинговая группаСоответствующий индекс рублевых облигацийМетодика выбора аналоговВыбор аналоговПриоритет цен облигаций при оценке доходности к погашению облигаций-аналоговРасчет по эмитентуРасчет безрисковой доходностиРасчет денежных потоков для облигаций с плавающей ставкой (floaters)Структура входных данных денежных потоков по облигациямМатематические операции и функцииПеременные из текущей строки денежного потокаПоказатели сценария, используемые в формулах денежных потоках (Ключевые показатели)Примеры формул для расчета потоков floater купонов
Задача облигационного калькулятора - рассчитать стандартные метрики по облигации с учетом ее цены, даты расчета, а также оценить (найти):
Облигационный калькулятор позволяет рассчитать следующие аналитические показатели облигации:
# | Показатель | Расшифровка |
---|---|---|
1 | Максимальный рейтинг (4060-у) | Агрегированный рейтинг облигации в соответствии с указанием 4060-У |
2 | Рейтинговая группа | Группа рейтингов на основе таблицы соответствия |
3 | Соответствующий индекс облигаций | Соответствующий рейтинговой группе, дюрации и классу индекс облигации |
4 | Срок до погашения (оферты) | Срок до погашения (оферты) в годах |
5 | НКД | Накопленный купонный доход |
6 | Дюрация Маколея, лет | Дюрация Маколея |
7 | Модифицированная дюрация | Модифицированная дюрация |
8 | YTM (эфф), % | Доходность к погашению (оферте) облигации в % годовых |
9 | YTM (эфф), % на Gcurve | Доходность к погашению в % годовых на безрисковой кривой доходности с соответствующим уровнем дюрации |
10 | G-spread (к кривой Gcurve), б.п. | Кредитный спред рассчитанной облигации в базисных пунктах |
11 | Z-spread (к кривой Gcurve), б.п. | Кредитный спред рассчитанной облигации в базисных пунктах с учетом дисконтирования денежных потоков по облигации под ставку соответствующую дюрации на бескупонной кривой доходности (Gcurve). |
12 | G-Spread соответсвующего индекса, б.п. | Кредитный спред соответствующего индекса |
13 | СКО (20 дн) G-Spread соотв. индекса, б.п. | Стандартное отклонение кредитного спреда соответствующего индекса за последние 20 дней |
14 | Медианный G-Spread по аналогам, б.п. | Медианный кредитный спред по облигациям-аналогам рассчитанный на выборке |
15 | YTM (эфф), % соотв. индекса | Доходность к погашению (оферте) соответствующего индекса в % годовых |
Результаты расчетов представляются в трех форматах:
Табличный формат, столбцы «Цены и НКД» (справедливая стоимость) и «Метрики» (дюрация, доходность к погашению, спреды). Основные показатели выделены полужирным шрифтом.
Визуальное представление в виде диаграмм. В данном формате представлены результаты расчета спредов (G и Z-spread сделки, диапазон G-spread индекса, Z-spread аналогов).
Всплывающее окно (на верху страницы).
На всплывающем окне мы видим результаты трех блоков расчета (три столбца) для удобного сравнения (расчет по индексу облигаций, расчет по аналогам, расчет по эмитенту). В эти результаты входят три основных показателя: Z-spread, доходность к погашению – YTM, цена.
Первый столбец:
Z-spread (к кривой Gcurve) в б.п, рассчитанный с учетом дисконтирования денежных потоков по облигации под ставку соответствующую дюрации на бескупонной кривой доходности (Gcurve); YTM - доходность к погашению (оферте) облигации в % годовых; Цена - изначально предполагаемая цена сделки.
Второй столбец:
Средний Z-spread по аналогам, рассчитывается на основе Z-spread (к кривой Gcurve) каждого аналога; YTM - средняя доходность к погашению (оферте) облигации по аналогам в % годовых, рассчитывается на основе YTM (эфф) каждого аналога; Цена (чистая) - справедливая чистая (без НКД) цена анализируемой облигации, рассчитанная на основе среднего Z-spread по аналогам.
Третий столбец:
Средний Z-spread по отобранным (фильтры-параметры: период анализа, мин. объем торгов, диапазон дюрации, валюта) для анализа облигациям эмитента, рассчитывается на основе Z-spread (к кривой Gcurve) каждой отобранной облигации; YTM - средняя доходность к погашению (оферте) облигации по аналогам в % годовых, рассчитывается на основе YTM (эфф) каждой отобранной облигации; Цена - справедливая чистая (без НКД) цена анализируемой облигации, рассчитанная на основе среднего Z-spread по отобранным облигациям эмитента.
Максимальный рейтинг облигации строится на основе рейтингов эмиссий и рейтингов эмитента присвоенных международными (S&P, Fitch, Moody's) и локальными (Эксперт РА и АКРА) рейтинговыми агентствами . Расчет максимального рейтинга облигации соответствует методологии из указания 4060-у.
При использовании рейтинга облигации в первую очередь используются рейтинги эмиссии от локальных агентств. Если их нет, то рейтинги эмиссии международных агентств. Если их нет то используются рейтинги эмитента от локальный агентств. Если их нет то используется рейтинг эмитента от международных рейтинговых агентств.
Приоритет | Эмиссия/Эмитент | Агентство |
---|---|---|
1 | Рейтинг эмиссии | Локальные |
2 | Рейтинг эмиссии | Международные |
3 | Рейтинг эмитента | Локальные |
4 | Рейтинг эмитента | Международные |
Шаг 1. Смотрим рейтинги эмиссии от локальных рейтинговых агентств. (если нет, то спускаемся по приоритету)
Шаг 2. Определяем рейтинговую группу для каждого рейтинга облигации из группы приоритета
Moody's | S&P | Fitch | Эксперт РА | АКРА | |||||
---|---|---|---|---|---|---|---|---|---|
рейтинг | гр. | рейтинг | гр. | рейтинг | гр. | рейтинг | гр. | рейтинг | гр. |
Aaa1 | 1 | AAA | 1 | AAA | 1 | ruAAA | 1 | AAA(RU) | 1 |
Aa1 | 1 | AA+ | 1 | AA+ | 1 | ruAA+ | 2 | AA+(RU) | 2 |
Aa2 | 1 | AA | 1 | AA | 1 | ruAA | 2 | AA(RU) | 2 |
Aa3 | 1 | AA- | 1 | AA- | 1 | ruAA- | 3 | AA-(RU) | 3 |
A1 | 1 | A+ | 1 | A+ | 1 | ruA+ | 3 | A+(RU) | 3 |
A2 | 1 | A | 1 | A | 1 | ruA | 4 | A(RU) | 4 |
A3 | 1 | A- | 1 | A- | 1 | ruA- | 4 | A-(RU) | 4 |
Baa1 | 1 | BBB+ | 1 | BBB+ | 1 | ruBBB+ | 5 | BBB+(RU) | 5 |
Baa2 | 1 | BBB | 1 | BBB | 1 | ruBBB | 5 | BBB(RU) | 5 |
Baa3 | 1 | BBB- | 1 | BBB- | 1 | ruBBB- | 6 | BBB-(RU) | 6 |
Ba1 | 2 | BB+ | 2 | BB+ | 2 | ruBB+ | 6 | BB+(RU) | 6 |
Ba2 | 3 | BB | 3 | BB | 3 | ruBB | 7 | BB(RU) | 7 |
Ba3 | 4 | BB- | 4 | BB- | 4 | ruBB- | 8 | BB-(RU) | 8 |
B1 | 5 | B+ | 5 | B+ | 5 | ruCCC+ | 8 | CCC+(RU) | 8 |
B2 | 6 | B | 7 | B | 6 | ruCCC | 8 | CCC(RU) | 8 |
B3 | 7 | B- | 7 | B- | 6 | ruCCC- | 8 | CCC-(RU) | 8 |
Caa1 | 8 | CCC+ | 8 | CCC+ | 8 | ruCC+ | 8 | CC+(RU) | 8 |
Caa2 | 8 | CCC | 8 | CCC | 8 | ruCC | 8 | CC(RU) | 8 |
Caa3 | 8 | CCC- | 8 | CCC- | 8 | ruCC- | 8 | CC-(RU) | 8 |
Ca1 | 8 | CC+ | 8 | CC+ | 8 | ruC+ | 8 | C+(RU) | 8 |
Ca2 | 8 | CC | 8 | CC | 8 | ruC | 8 | C(RU) | 8 |
Ca3 | 8 | CC- | 8 | CC- | 8 | ruC- | 8 | C-(RU) | 8 |
C1 | 8 | C+ | 8 | C+ | 8 | Нет данных | 9 | Нет данных | 9 |
C2 | 8 | C | 8 | C | 8 | Отозван | 9 | Отозван | 9 |
C3 | 8 | C- | 8 | C- | 8 | ruD | 10 | D(RU) | 10 |
Нет данных | 9 | Нет данных | 9 | Нет данных | 9 | ||||
Отозван | 9 | Отозван | 9 | Отозван | 9 | ||||
D | 10 | D | 10 | D | 10 |
Шаг 3. На основе рассчитанных групп рейтингов используем максимальную группу и соответствующее ей буквенное обозначение:
№ группы | Максимальный рейтинг (4060-у) |
---|---|
1 | BBB- |
2 | BB+ |
3 | BB |
4 | BB- |
5 | B+ |
6 | B |
7 | B- |
8 | CCC |
9 | NR |
10 | D |
Для целей определения кредитного спреда вводятся следующие рейтинговые группы:
Рейтинговая группа I – наивысший уровень кредитоспособности и степень надежности по сравнению с другими эмитентами, выпусками ценных бумаг или финансовыми обязательствами. В указанную рейтинговую группу включаются долговые инструменты с рейтингом от ВВВ- и выше (по шкале S&P).
Рейтинговая группа II – высокий уровень кредитоспособности, при этом присутствует некоторая чувствительность к воздействию неблагоприятных перемен в коммерческих, финансовых и экономических условиях. В указанную рейтинговую группу включаются долговые инструменты с рейтингом от ВB- до ВB+ (по шкале S&P).
Рейтинговая группа III – умеренный уровень кредитоспособности, при этом присутствует высокая чувствительность к воздействию неблагоприятных перемен в коммерческих, финансовых и экономических условиях. В указанную рейтинговую группу включаются долговые инструменты с рейтингом от B- до B+ (по шкале S&P).
Рейтинговая группа IV – высокорисковые облигации, либо облигации без рейтинга
№ группы | Максимальный рейтинг (4060-у) | Рейтинговая группа |
---|---|---|
1 | BBB- | I |
2 | BB+ | II |
3 | BB | II |
4 | BB- | II |
5 | B+ | III |
6 | B | III |
7 | B- | III |
8 | CCC | IV |
9 | NR | IV |
10 | D | IV |
Каждой рейтинговой группе и диапазону дюрации и классу активов соответствует индекс облигации:
# | Рейтинговая группа | Дюрация от(лет) | Дюрация до(лет) | Индекс облигаций | Классы активов |
---|---|---|---|---|---|
1 | I | 0 | 3 | RUCBITRBBB3Y | Облигации корпоративные, Облигации с ипотечным покрытием |
2 | I | 3 | 5 | RUCBITRBBB5Y | Облигации корпоративные, Облигации с ипотечным покрытием |
3 | I | 5 | и более | RUCBITRBBB3+ | Облигации корпоративные, Облигации с ипотечным покрытием |
4 | II | 0 | 3 | RUCBITRBB3Y | Облигации корпоративные, Облигации с ипотечным покрытием |
5 | II | 3 | 5 | RUCBITRBB5Y | Облигации корпоративные, Облигации с ипотечным покрытием |
6 | II | 5 | и более | RUCBITRBB3+ | Облигации корпоративные, Облигации с ипотечным покрытием |
7 | III | 0 | 3 | RUCBITRB3Y | Облигации корпоративные, Облигации с ипотечным покрытием |
8 | III | 3 | 5 | RUCBITRB3Y | Облигации корпоративные, Облигации с ипотечным покрытием |
9 | III | 5 | и более | RUCBITRB3Y | Облигации корпоративные, Облигации с ипотечным покрытием |
10 | IV | 0 | 50 | RUCBITR | Облигации корпоративные, Облигации с ипотечным покрытием |
11 | I | 0 | 1 | RUGBITR1Y | ГЦБ РФ |
12 | I | 1 | 3 | RUGBITR3Y | ГЦБ РФ |
13 | I | 3 | 5 | RUGBITR5Y | ГЦБ РФ |
14 | I | 5 | и более | RUGBITR5+ | ГЦБ РФ |
15 | I | 0 | 3 | RUMBITRBBB3Y | Облигации субъектов РФ |
16 | I | 3 | 5 | RUMBITRBBB3+ | Облигации субъектов РФ |
17 | I | 5 | и более | RUMBITRBBB3+ | Облигации субъектов РФ |
18 | II | 0 | 3 | RUMBITRBB3Y | Облигации субъектов РФ |
19 | II | 3 | 50 | RUMBITRBB | Облигации субъектов РФ |
20 | III | 0 | 1 | RUMBITR1Y | Облигации субъектов РФ |
21 | III | 1 | 3 | RUMBITR3Y | Облигации субъектов РФ |
22 | III | 3 | и более | RUMBITR3+ | Облигации субъектов РФ |
23 | IV | 0 | 1 | RUMBITR1Y | Облигации субъектов РФ |
24 | IV | 1 | 3 | RUMBITR3Y | Облигации субъектов РФ |
25 | IV | 3 | и более | RUMBITR3+ | Облигации субъектов РФ |
Индекс не в полной мере корректно отражает ориентиры по доходности той или иной рейтинговой группы. По этой причине в калькуляторе реализован механизм подбора облигаций аналогов с которыми можно сравнить характеристики сделки.
Облигации-аналоги - облигации со схожими инвестиционными характеристиками.
При оценке аналогов учитываются облигации, по которым (по умолчанию):
Данные параметры-фильтры можно настроить в режиме онлайн.
Доходность к погашению облигаций аналогов рассчитывается на сервере. Если включить в расчет облигации с плавающим купоном, то система пересчитает доходность к погашению по ним с учетом выбранного сценария.
При анализе цен на рублевые облигации-аналоги используется информация об итогах торгов на Московской бирже. За приоритет используется средневзвешенная цена торгов WAPRICE. При ее отсутствии, берутся следующие типы цен по уровню вниз:
Уровень | Фильтр | |
---|---|---|
1 | WAPRICE | Средневзвешенная цена, % от номинала |
2 | CLOSE | Цена последней сделки, % |
3 | BID | Цена спроса (котировка на покупку) на момент окончания торговой сессии, % от номинала |
4 | MARKETPRICE2 | Рыночная цена (2), % от номинала |
5 | ADMITTEDQUOTE | Признаваемая котировка, % от номинала |
Один из видов расчета - расчет средних метрик по облигациям эмитента (G и Z-spread, справедливая цена по среднему Z-spread). Параметры-фильтры подбора (период анализа, мин. объем торгов, диапазон дюрации, валюта, вариант расчета: среднее арифметическое/средневзвешенное) можно настроить в режиме онлайн.
Оцениваемая облигация выделяется цветом.
При расчете безрисковой доходности в рублях используются значения кривой бескупонной доходности государственных облигаций (% годовых). ( https://cbr.ru/hd_base/zcyc_params/)
При расчете безрисковой доходности для заданной дюрации используется параметрическая модель Нельсона-Сигеля.
При расчете метрик по облигациям с плавающей ставкой купона или номинала используются сценарии и формулы зависимостей потоков от показателей сценария.
Под сценарием понимается группа прогнозных значений ключевых показателей (таких как инфляция, ВВП, ставки ОФЗ и др) на n периодов (месяцев или кварталов) вперед.
Пример сценария
При выборе сценария при проведении расчетов в калькуляторе, система подставит показатели сценария в формулы потоков, пересчитает потоки по облигации и проведет расчет остальных метрик на основе пересчитанных денежных потоков.
Для каждой облигации с плавающей ставкой купона или номинала в базе данных прописана формула расчета ставки купона (погашения номинала или суммы непогашенного номинала) в зависимости от ключевых показателей. Запись формул опирается на разработанных внутренний язык для обработки формульных выражений и ключевые показатели из сценария (keys).
Данные с денежными потоками по облигациям имеют следующую структуру (на примере одного потока):
Столбец | Описание | Пример |
---|---|---|
ISIN | Код ISIN облигации | RU000A0ZYR91 |
ISSUER | Эмитент | ГТЛК |
COUPON_DATE | Дата купона/потока | 05.05.2020 |
COUPON_RATE | Ставка купона | 0.0715 |
CF_COUPON | Размер купона в деньгах | 17.83 |
CF_NOMINAL | Погашения части номинала | |
OS_NOMINAL | Непогашенный номинал | 1000 |
COUPON_RATE_FORMULA | Формула ставки купона | VAR_RU_RATE[get_i_date(VAR_COUPON_DATE)]+(0.0065) |
CF_NOMINAL_FORMULA | Формула расчета суммы погашения номинала | |
OS_NOMINAL_FORMULA | Формула расчета суммы непогашенного номинала | VAR_OS_NOMINAL_ARRAY[I-1]-VAR_CF_NOMINAL_ARRAY[I-1] |
COMMENT | Комментарий | Ключевая ставка + 0,65% |
В данном примере указана формула зависимости купона от ключевой ставки Банка России. Система при обработке формулы возьмет наиболее приближенное и известное к дате купона (05.05.2020) значение ключевой ставки из сценария (в примере это 6.5%) и прибавит к нему 0.65%. А далее рассчитает размер купона на основе этой расчетной ставки купона, суммы непогашенного номинала и периода накопления купона в днях.
Операция/Функция | Пример | Результат |
---|---|---|
+ | 2+3 | 5 |
- | 5-2 | 3 |
/ | 5/2.5 | 2 |
* | 5*5 | 25 |
max(a,b) | max(5,10) | 10 |
min(a,b) | min(5,10) | 5 |
date(YYYY,MM,DD) | date(2019,05,30) | 30.05.2019 |
get_i_date(date()) - получить номер периода i из сценария по дате | get_i_date(VAR_COUPON_DATE) | 2 |
diff_date() - разница между датами в днях | diff_date(date(2019,05,30), date(2019,04,28)) | 30 |
Условие (если, то) | (7 > 10 ? 1 : 2) + 0.1 | Вернет 2.1 |
Условие (если, то) | (7 < 10 == true ? 1 : 2) + 0.1 | Вернет 1.1 |
Программа для расчета денежных потоков считывает каждую строку в массиве данных о денежных потоках. Для каждой строки можно использовать переменные, которые будут выводить информацию из считываемой строки. Эти переменные нужны для написания формул расчета CF_COUPON, CF_NOMINAL и OS_NOMINAL
Переменная из строки | Описание |
---|---|
VAR_COUPON_DATE | Дата денежного потока |
VAR_COUPON_RATE | Ставка купона (уже рассчитанная) |
VAR_CF_COUPON | Размер купона в деньгах (посчитанный по ставке) |
VAR_CF_NOMINAL | Размер погашения номинала в деньгах |
VAR_OS_NOMINAL | Размер суммы непогашенного номинала |
VAR_CURRENT_PERIOD | Текущий номер периода сценария исходя из даты денежного потока |
VAR_LAST_PERIOD | Номер периода сценария исходя из даты предыдущего денежного потока |
VAR_NEXT_PERIOD | Номер периода сценария исходя из даты следующего денежного потока |
VAR_ITEM_PERIOD[номер периода] | Дата по номеру периода из сценария |
VAR_OS_NOMINAL_ARRAY[I-1] | Значение непогашенного номинала на предыдущую дату денежного потока. I - порядковый номер денежного потока в данной бумаге. (I-1) - с большой буквы |
VAR_CF_NOMINAL_ARRAY[I-1] | Значение купона на предыдущую дату денежного потока. |
В показателях сценария используются ключи. Их можно называть как угодно. Основное правило - они должны быть написаны с заглавных букв и пробелы должны соединяться символом "_". Далее данные ключи возможно использовать в формулах денежных потоков используя приставку VAR__
Например я могу в сценарий добавить переменную "Показатель" с ключом INDICATOR. Далее в формулах купонов я могу использовать этот массив как VAR_INDICATOR[номер периода в сценарии]
Стандартные индикаторы
Используются коды показателей сценария с приставкой VAR_
FLOATER_COUPON | CF_FORMULA |
---|---|
MosPrime 6M + 2% | VAR_MOS_PRIME_6M[get_i_date(VAR_COUPON_DATE)]+0.02 Или VAR_MOS_PRIME_6M[VAR_CURRENT_PERIOD]+0.02 |
12-59 купоны max(1%;(ИПЦ-100%)+3%) | max(0.01,VAR_RU_CPI[get_i_date(VAR_COUPON_DATE)]+0.03) |
12-59 купоны - ИПЦ +2.5% годовых | VAR_RU_CPI[get_i_date(VAR_COUPON_DATE)]+0.025 |
Ключевая ставка +0,1% | VAR_RU_RATE[get_i_date(VAR_COUPON_DATE)]+0.001 |
MAX(ИПЦ+4%;Ключевая ставка ЦБ РФ+2%) | max(VAR_RU_RATE[get_i_date(VAR_COUPON_DATE)]+0.02,VAR_RU_CPI[get_i_date(VAR_COUPON_DATE)]+0.04) |
2-40 купоны ОФЗ 1 год + 1% | VAR_2Y_OFZ[get_i_date(VAR_COUPON_DATE)] + (VAR_NEXT_PERIOD==VAR_CURRENT_PERIOD ? 0: (VAR_2Y_OFZ [get_i_date(VAR_COUPON_DATE)+1]- VAR_2Y_OFZ [get_i_date(VAR_COUPON_DATE)])*diff_date(VAR_COUPON_DATE, VAR_ITEM_PERIOD[VAR_CURRENT_PERIOD])/diff_date(VAR_ITEM_PERIOD[VAR_NEXT_PERIOD], VAR_ITEM_PERIOD[VAR_CURRENT_PERIOD]))+0.01 |
Max(6M EURIBOR;0) +2,2% | max(VAR_6M_Euribor[get_i_date(VAR_COUPON_DATE)],0)+0.022 |
2-30 купоны - Yj(7)+ 0.75%, где Yj(7) - значение 7-летней точки на GCurve на конец 5-го рабочего дня, предшествующего дате начала j-го купонного периода, премия определяется по результатам букбилдинга | 3/5(VAR_5Y_OFZ [get_i_date(VAR_COUPON_DATE)] + (VAR_NEXT_PERIOD==VAR_CURRENT_PERIOD ? 0: (VAR_5Y_OFZ [get_i_date(VAR_COUPON_DATE)+1]- VAR_5Y_OFZ [get_i_date(VAR_COUPON_DATE)])diff_date(VAR_COUPON_DATE, VAR_ITEM_PERIOD[VAR_CURRENT_PERIOD])/diff_date(VAR_ITEM_PERIOD[VAR_NEXT_PERIOD], VAR_ITEM_PERIOD[VAR_CURRENT_PERIOD])))+2/5(VAR_10Y_OFZ [get_i_date(VAR_COUPON_DATE)] + (VAR_NEXT_PERIOD==VAR_CURRENT_PERIOD ? 0: (VAR_10Y_OFZ [get_i_date(VAR_COUPON_DATE)+1]- VAR_10Y_OFZ [get_i_date(VAR_COUPON_DATE)])diff_date(VAR_COUPON_DATE, VAR_ITEM_PERIOD[VAR_CURRENT_PERIOD])/diff_date(VAR_ITEM_PERIOD[VAR_NEXT_PERIOD], VAR_ITEM_PERIOD[VAR_CURRENT_PERIOD])))+0.0075 |
(10%+КС+2,5%)/2 | (VAR_RU_RATE[get_i_date(VAR_COUPON_DATE)]+0.125)/2 |