Математическая формулировка задачи:

с ценой = $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