Пример 3. Определение стоимости облигаций с фиксированным купоном.

Нетрудно заметить, что денежный поток, генерируемый подобными ценными бумагами представляет собой аннуитет, к которому в конце срока операции прибавляется дисконтированная номинальная стоимость облигации.
Определим современную (текущую) стоимость такого потока:
\[ \begin{equation} \label{bond_price} PV = \sum_{t=1}^{mn} \frac {\frac {(N \times k)} {m}} {(1 + \frac{r}{m})^{t}} + \frac{F} {(1+r)^{nm}} \end{equation} \]
где F – сумма погашения (как правило – номинал, т.е. F = N); k – годовая ставка купона; r – рыночная ставка (норма дисконта); n – срок облигации; N – номинал; m – число купонных выплат в году.
Напишем программу, которая вычисляет стоимость по формуле ( \ref{bond_price} ). Будем использовать библиотеку SymPy для символьных вычислений.
sympy_1.py
#! /usr/bin/env python
# -*- coding: utf-8 -*-
# в идеале нужно еще учесть накопленный купонный доход (НКД)
import sympy
from sympy import summation, symbols
n, m, t = symbols('n m t', integer=True)
nominal_price = 1000 # номинальная цена облигации
k = 0.07 # годовая ставка купона
r = 0.06 # рыночная ставка
m = 4 # число купонных выплат в году
n = 5 # срок облигации (лет)
last = nominal_price/(1 + r/m)**(m*n)
result = summation(((nominal_price*k)/m)/(1 + r/m)**(t), (t, 1, m*n)) + last
print(result)
Ссылки по теме: