Блог им. Ride_The_Market_Wave

Математика Облигаций. Доходность к погашению.

Друзья, всем привет!
Сегодня будет первая статья в этом блоге.

Финансовая математика начинается с понятия временной стоимости денег.
Эта теория постулирует, что денежные потоки имеют разную стоимость в зависимости от момента времени, в который они будут получены.
Что вполне логично, ведь 100 рублей сегодня и 100 рублей через год — это разные деньги.
Поэтому денежные потоки надо дисконтировать под определённую ставку. Так возникает понятие приведённой стоимости денег (PV или Present Value).

 


Автодор БО-3 выпуск 2 RU000A104XR2
(https://www.moex.com/ru/issue.aspx?board=EQNE&code=RU000A104XR2)
 
В качестве примера рассмотри конкретную бумагу, которая обращается на рынке.
Многие из часто оплачивают проезд по дорогам компании Автодор, давайте и разберём их облигацию.
Для простоты возьмём бумагу с фиксированным купоном и без аморатизации, с выплатами 2 раза в год.
Сразу сделаю замечание, что для наглядности и простоты расчета не будем учитывать реинвестирование купонов.

# Задаём график выплат
start_date = '2025-08-01'
end_date = '2027-08-01'
freq = '6MS'

date_range = pd. <a name="cut"></a> date_range(
    start = start_date, end = end_date, freq = freq
)
cash_flows = [0, 53.1, 53.1, 53.1, 1000 + 44.35]
for i in range(0,len(date_range)):
    print(f"Выплата номер {i} в дату {date_range[i].strftime('%d.%m.%Y')} составит {cash_flows[i]}")


Или графически можно изобразить так:
Математика Облигаций. Доходность к погашению.

Вычислим доходность к погашению (YTM).
Нам даны стоимость облигации на рынке, номинал, график выплаты (cash flow) купонов и номинала.
Чтобы найти доходность надо решить степенное уравнение отностительно параметра r.
Проще всего получить приближенное решение численным методом, возьмём реализацию из библиотеки scipy.

Математика Облигаций. Доходность к погашению.


Код языке python:
# Начальное приближение
initial_guess = 0.1

# Задаём уравнение f(x) = 0
def equation(x):
    N = 1000
    P = 932
    n = 2
    T = 2
    cash_flows = [0, 53.1, 53.1, 53.1, 1000 + 44.35]
    
    return P - np.sum([ cash_flows[i]/((1+(x/n))**(i)) for i in range(1, n*T+1) ])
    
# Решение с помощью fsolve
solution_fsolve = fsolve(equation, initial_guess)[0]

print(f"Оценка доходности к погашению {100*solution_fsolve:.2f} %, в процентах годовых")
Оценка доходности к погашению 14.25 %, в процентах годовых

По итогу получили доходность 14.25%. А на сайте мосбиржи указана доходность 15.25%.
Причина расходнения как раз в реинвестировании купонов, в том что мы её не учли.
Грубо говоря 100 рублей купонов за год нам бы дали примерно 10 рублей, вот как раз и тот самый один процент.

Спасибо за внимание!
I hope you found this helpful!
394
12 комментариев
dsfdfss, ИИ выдал Вам сомнительный ответ, НКД в текущей точке 0. НКД отсчитывается от последней купонной выплаты. Код очень простой и легко работает — 0 в массив специально добавил, чтобы показать, что в дату расчета выплаты нет. А выбор метода оптимизации в данном случае это просто вкусовщина.
avatar
Ride_The_Market_Wave, я с тобой спорить не буду, просто скажу так, в вопросах кто касается расчетов, программирования, бухгалтерии, математики  и тд он умнее всех вас вместе взятых, ты с ним поговри а не со мной он тебе все по полочкам разложит
avatar
У этого выпуска погашение в другую дату.

avatar
dmytriy klimov, для простоты расчета сместил даты на месяц. Тут скорее попытался сделать приближённую оценку доходности и показать как применяются формулы. Точный расчёт будет значительно сложнее — надо учитывать абсолютное количество дней от выплаты до выплаты и реинвестирование купонов. Вам спасибо за комментарий — тут надо было подробнее описать исходные допущения))
avatar
Ride_The_Market_Wave, Так в этом же причина расхождения! И никакое реинвестирование здесь ни причём)))



avatar
dmytriy klimov, сокращение срока действительно приводит к тому, что последняя выплата с учётом дисконтирования станет немного больше. Но даже с этой поправкой я получил значение 14,8%. Допускаю, что могут быть ещё неучтённые эффекты. Но в любом сразу видно, и это радует, что пишет Естественный Интеллект, а не ИИ)))

avatar
Ride_The_Market_Wave, Надо дни считать правильно. Там последний купонный период 152 дня, те n не равно 2 и Т, соответственно, тоже.
avatar
dmytriy klimov, тут полностью согласен))
avatar
Ride_The_Market_Wave, и зачем этот код если ЧИСТВНДОХ экселя сделает это проще, точнее и, главное, вы получите такой же результат, что и биржа?
avatar
dmytriy klimov, вычисления делать интересно. Мне лично это нравится. Теперь понятно — ЧИСТВНДОХ как раз и учитывает реинвестирование! Безусловно, можно пользоваться и готовыми калькуляторами, да и вообще готовыми решениями. Но я и не призываю Вас пользоваться моим кодом, и не претендую на последнюю правду. Тут каждый решает для себя)
avatar
Ride_The_Market_Wave, так и ваша формула учитывает))). У вас погрешность из-за неверных начальных условий появляется. ЧИСТВНДОХ такую же формулу использует как и вы. Про реинвестирование, которое вы не видите рекомендую почитать  smart-lab.ru/blog/1054369.php . Если коротко — YTM можно не только дисконтированием считать.
avatar

Читайте на SMART-LAB:
Фото
Актуальный состав портфеля и взгляд на рынок 2026: по-прежнему 0% позитива.
Добрый вечер! С момента предыдущего поста, касающегося моего портфеля, прошел квартал.  Пришло время актуализировать его состав. Также поделюсь...
Фото
Биткоин попробует разыграть «треугольную карту»?
«Цифровое золото» прорвало верхнюю границу восходящего треугольника на уровне 94 500 и сейчас тестирует пробитую горизонталь, формируя серию...
Фото
Индикатор Fractal: торговые сигналы и робот для OsEngine. Видео
В этом видео разбираем индикатор Fractal Билла Вильямса — один из самых известных инструментов в трейдинге. Покажем, как формируются фракталы,...
Фото
Стратегия 2026 по рынку акций от Mozgovik Research: трудный год, но, возможно, последний год низких цен
Сегодня у меня первый день официального отпуска. За окном темная звездная ночь, яркая белая луна, +24С и шум волн Андаманского моря. Неудачный...

теги блога Ride_The_Market_Wave

....все тэги



UPDONW
Новый дизайн