Ride_The_Market_Wave
Ride_The_Market_Wave личный блог
20 августа 2025, 15:38

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

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

Финансовая математика начинается с понятия временной стоимости денег.
Эта теория постулирует, что денежные потоки имеют разную стоимость в зависимости от момента времени, в который они будут получены.
Что вполне логично, ведь 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!
12 Комментариев
  • dmytriy klimov
    20 августа 2025, 16:31
    У этого выпуска погашение в другую дату.

Активные форумы
Что сейчас обсуждают

Старый дизайн
Старый
дизайн