我有一个使用Quantlib引导yield term structure(yts)的函数。我试图让其他函数重用生成的term structure,但我得到错误消息:“NameError:name'yts' is not defined swap engine =ql.折扣SwapEngine(yts)
如果任何人可以帮助它将不胜感激。
def bootstrap():
today = ql.Date.todaysDate()
ql.Settings.instance().evaluationDate = today
global yts
yts = ql.RelinkableYieldTermStructureHandle()
estr = ql.Estr()
### helper rates etc
estr_curve_c = ql.PiecewiseLogCubicDiscount(0, ql.TARGET(),
helpers, ql.Actual365Fixed())
estr_curve_c.enableExtrapolation()
yts.linkTo(estr_curve_c)
### so far this works - the YieldTermStructureHandle works
def getrate(tenor, fwd):
swapEngine = ql.DiscountingSwapEngine(yts)
ir_swap = ql.MakeOIS(swapTenor=ql.Period(tenor, ql.Months), fwdStart=ql.Period(fwd, ql.Months),\
overnightIndex = ql.Estr(yts), pricingEngine=swapEngine, fixedRate=2.0)
return ir_swap.fairRate()
#### this part does not work: NameError:name'yts' is not defined swap engine =ql.Discounting SwapEngine(yts)
1条答案
按热度按时间u4vypkhs1#
这就是Python的工作方式:
init()
函数需要被执行,而不仅仅是声明,以便初始化全局变量。然而,如果我可以提出一个建议,我不认为这是一个合理的设计。与其使其成为一个全局变量,我将从
bootstrap
函数返回yts
。您可以从getrate
调用bootstrap
,或者在外部调用它并将yts
作为附加参数传递给getrate
。