首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >QuantLib :从spots构建discount_curve

QuantLib :从spots构建discount_curve
EN

Stack Overflow用户
提问于 2020-01-30 20:14:33
回答 1查看 238关注 0票数 1

我刚刚开始使用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等等

代码语言:javascript
运行
复制
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))

我得到的错误是

代码语言:javascript
运行
复制
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 &)

你知道我该怎么解决这个问题吗?还是我错过了什么?

EN

回答 1

Stack Overflow用户

发布于 2020-01-31 22:27:02

您发布的代码中一定有缺失的东西,因为它不会产生该错误。您的错误与Period对象的构造有关,它应该是:

字符串的

  • ql.Period('6M')和期间数的整数的input
  • ql.Period(6, ql.Months),以及TimeUnit object

在任何情况下,构造ZeroCurve的方法都是:

代码语言:javascript
运行
复制
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())

然后,您可以使用年分数或日期来获得折扣因子:

代码语言:javascript
运行
复制
curve.discount(1.5)
curve.discount(ql.Date(15,6,2021))
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59985828

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档