嗨我有这套债券收益率到成熟度代码,我试图调试。我一直没有定义。失去了这是一个错误还是忽略了将t声明为无变量
非常感谢您的帮助。
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)
答案 0 :(得分:2)
问题在于你的表达
Optional
您从sum([coupon/(1+y/freq)**(freq*t) for t in dt]) + par/(1+y/freq)**(freq*t) - price
^
right here
获得的第一个t
,但第二个不在列表推导范围内 - for t in dt
未定义。
也许你的意思是第二个句子在循环中?
答案 1 :(得分:0)
抱歉设法解决了。粗心的错误。对于找到bond_ytm
的其他人有用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 * max(dt)) - price
return optimize.newton(ytm_func, guess)
ytm = bond_ytm(95.0428, 100, 1.5, 5.75, 2)
print(ytm)