Python Quantlib ->TypeError:重载函数'new_Thirty360'的参数数量或类型错误



我正在尝试运行下面的代码,但由于某种原因,它在1台电脑上运行正常,在第二个,它失败,并显示以下错误消息;是什么原因导致1台电脑运行正常,2台电脑出现故障?

代码源:http://gouthamanbalaraman.com/blog/quantlib-bond-modeling.html

!pip install QuantLib
import QuantLib as ql
todaysDate = ql.Date(15, 1, 2015)
ql.Settings.instance().evaluationDate = todaysDate
spotDates = [ql.Date(15, 1, 2015), ql.Date(15, 7, 2015), ql.Date(15, 1, 2016)]
spotRates = [0.0, 0.005, 0.007]
dayCount = ql.Thirty360()
calendar = ql.UnitedStates()
interpolation = ql.Linear()
compounding = ql.Compounded
compoundingFrequency = ql.Annual
spotCurve = ql.ZeroCurve(spotDates, spotRates, dayCount, calendar, interpolation,
compounding, compoundingFrequency)
spotCurveHandle = ql.YieldTermStructureHandle(spotCurve)

> TypeError: Wrong number or type of arguments for overloaded function
> 'new_Thirty360'.   Possible C/C++ prototypes are:
>     QuantLib::Thirty360::Thirty360(QuantLib::Thirty360::Convention,Date
> const &)
>     QuantLib::Thirty360::Thirty360(QuantLib::Thirty360::Convention)

根据发行说明,这在1.28版本中是预期的(请参阅https://github.com/lballabio/QuantLib-SWIG/releases/tag/QuantLib-SWIG-v1.28)。默认构造函数在底层C++库中不再可用,而在1.23版本中,C++库已弃用了它们。

理由是有几种不同的30/360公约。默认构造函数用于选择一个特定的约定(即30/360债券基础(,但这使得用户可以在不知不觉中指定30/360并获得错误的日期计数器。由于此版本,您需要指定确切的约定。如果您想要与以前完全相同的行为,请将ql.Thirty360()替换为ql.Thirty360(ql.Thirty360.BondBasis)。相反,如果您意识到这些不是您想要的实际约定,请将正确的约定传递给日计数器的构造函数。

这同样适用于ql.ActualActual(),它过去默认为ISDA,但在1.28中需要一个明确的约定:ql.ActualActual(ql.ActualActual.ISDA)

最新更新