Python — доходность к погашению (финансы — облигации)Python

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 Python — доходность к погашению (финансы — облигации)

Сообщение Anonymous »

Я пытаюсь рассчитать доходность к погашению облигаций (работаю в Google Colab (Jupyter)).
Математическая формулировка задачи:
Изображение
с ценой = $1276,76, количеством периодов = 60 [0,5 года] = 30 лет, оплата за период = $40 и окончательная платеж (номинальная стоимость) = 1000 долларов США и процентная ставка = r.
Где я пытаюсь получить «r» с помощью функции.

При выборе подхода с жестким кодированием формулы и функции я нашел следующее:
# Yield to maturity

""" Get yield-to-maturity of a bond """
import scipy.optimize as optimize

def bond_ytm(price, par, T, coup, freq=2, guess=0.05):
freq = float(freq)
periods = T*freq
coupon = coup/100.*par/freq
dt = [(i+1)/freq for i in range(int(periods))]
ytm_func = lambda(y): \
sum([coupon/(1+y/freq)**(freq*t) for t in dt]) + \
par/(1+y/freq)**(freq*t) - price

return optimize.newton(ytm_func, guess)

from bond_ytm import bond_ytm
ytm = bond_ytm(95.0428, 100, 1.5, 5.75, 2)
print(ytm)

Я получаю ошибку: «неверный синтаксис» в лямбда-строке и при ее удалении (чтобы проверить, работает ли сама функция) «нет модуля с именем «bond_ytm»», даже сохраняя его как дополнительный файл в том же каталоге, что и файл Python (.jpynb).
Я также не понял встроенную лямбда-функцию, массив dt/цикл for, а также откуда и почему вызывается Bond_ytm.< /p>
Вот очень похожий подход из github, который также не запустился, с использованием другой функции для второй части:

https://github.com/jamesmawm /Mastering-Python-for-Finance-source-codes/blob/master/B03898_05_Codes/bond_ytm.py
if __name__ == "__main__":
ytm = bond_ytm(95.0428, 100, 1.5, 5.75, 2)
print ytm

И это оставило меня с тем же недостающим пониманием.
Вот большая документация к пакету, о методологии которого я не могу знать. расчет, но где я могу ввести даты периода вручную и который позволяет рассчитать начисленные проценты между датами платежа (купона).
https://bond-pricing.readthedocs.io/en/latest/#module -bond_pricing.simple_bonds:
>>> bond_yield(settle="2012-04-15", mat="2022-01-01", cpn=8e-2,
... price=94.33, freq=1)
0.08884647275135965

>>> bond_yield(mat=10.25, cpn=8e-2, price=93.37, freq=2)
0.09000591604105035

>>> bond_yield(settle="2012-04-15", mat="2022-01-01", cpn=8e-2,
... price=[93, 94, 95], freq=1)
array([0.09104904, 0.08938905, 0.08775269])



Подробнее здесь: https://stackoverflow.com/questions/664 ... ance-bonds
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Python»