我刚刚开始使用QuantLib,并熟悉了各种功能。问题是我有一个假设的斑点曲线,如下所示
spot_tenors = 0.0,0.5,1.0,1.5,2.0,2.5,3.0,3.5,4.0,4.5,5.0,5.5,6.0,6.5,7.0,7.5,8.0,8.5,9.0,9.5,10.0
点数= 0.0,5.25,5.43,5.76,6.02,6.28,6.55,6.82,6.87,7.1,7.21,7.26,7.31,7.43,7.48,7.54,7.67,7.8,7.79,7.93,8.07
当我尝试创建discount_curve和discount_handle时,我得到了错误,因为我的许多基数都是浮点型的1.5、2.5等等
import matplotlib
matplotlib.use('macosx')
import matplotlib.pyplot as plt
import QuantLib as ql
#create a bond
issueDate = ql.Date(15, 1, 2015)
maturityDate = ql.Date(15, 1, 2025)
tenor = ql.Period(ql.Semiannual)
calendar = ql.UnitedStates()
businessConvention = ql.Unadjusted
dateGeneration = ql.DateGeneration.Backward
monthEnd = False
schedule = ql.Schedule (issueDate, maturityDate, tenor, calendar, businessConvention, businessConvention, dateGeneration, monthEnd)
# Now lets build the coupon
dayCount = ql.Thirty360()
couponRate = .06
coupons = [couponRate]
settlementDays = 0
faceValue = 100
bond = ql.FixedRateBond(settlementDays, faceValue, schedule, coupons, dayCount)
today = ql.Date(30, ql.January, 2020)
nodes = [today + Period(n, Years) for n in spot_tenors] #this is where I get the error
discount_curve = ql.ZeroCurve(nodes, spots, ql.Actual360())
discount_handle = ql.YieldTermStructureHandle(discount_curve)
bond.setPricingEngine(ql.DiscountingBondEngine(discount_handle))
我得到的错误是
Traceback (most recent call last):
File "/Users/prasadkamath/anaconda2/envs/Pk/lib/python3.6/site-packages/IPython/core/interactiveshell.py", line 3319, in run_code
exec(code_obj, self.user_global_ns, self.user_ns)
File "<ipython-input-301-cc1508b12a56>", line 1, in <module>
[today + Period(n, Years) for n in tenors]
File "<ipython-input-301-cc1508b12a56>", line 1, in <listcomp>
[today + Period(n, Years) for n in tenors]
File "/Users/prasadkamath/anaconda2/envs/Pk/lib/python3.6/site-packages/QuantLib/QuantLib.py", line 183, in __init__
_QuantLib.Period_swiginit(self, _QuantLib.new_Period(*args))
TypeError: Wrong number or type of arguments for overloaded function 'new_Period'.
Possible C/C++ prototypes are:
Period::Period()
Period::Period(Integer,TimeUnit)
Period::Period(Frequency)
Period::Period(std::string const &)
你知道我该怎么解决这个问题吗?还是我错过了什么?
发布于 2020-01-31 22:27:02
您发布的代码中一定有缺失的东西,因为它不会产生该错误。您的错误与Period
对象的构造有关,它应该是:
字符串的
ql.Period('6M')
和期间数的整数的inputql.Period(6, ql.Months)
,以及TimeUnit object在任何情况下,构造ZeroCurve的方法都是:
dates = [ql.Date(31,12,2019), ql.Date(31,12,2020), ql.Date(31,12,2021)]
zeros = [0.01, 0.02, 0.03]
curve = ql.ZeroCurve(dates, zeros, ql.ActualActual(), ql.TARGET())
然后,您可以使用年分数或日期来获得折扣因子:
curve.discount(1.5)
curve.discount(ql.Date(15,6,2021))
https://stackoverflow.com/questions/59985828
复制相似问题