Quantlib求discount factors

Quantlib 求贴现因子遇到问题 不知怎么解决 需要帮助 付费悬赏!

我这边是用excel的solver来bootstrapping贴现因子 我这里第一到第十年的即期利率分别是黄色的这一行 假设一年支付一次coupon(票息)我想要让最后的贴现现金流永远等于100 来求每年的贴现因子 excel在第一张图 做法差不多就是下面第二张图这样 我这边是最简单的假设 然后需要用quantlib求 最终出来的答案要跟这个一模一样 最后一张图是我的码以及出来的结果 但跟excel上面对不上 想知道问题出在哪里

img

img

img

calendar = ql.TARGET()
todaysDate = ql.Date(3,ql.January,2012);
ql.Settings.instance().evaluationDate = todaysDate
settlementDate = ql.Date(3,ql.January,2012);
 
settlementDays = 2
fixedLegFrequency = ql.Annual
fixedLegTenor = ql.Period(12,ql.Months)
fixedLegAdjustment = ql.Unadjusted
fixedLegDayCounter = ql.SimpleDayCounter()
 
rate = [3.6931,3.5435,3.525,3.491,3.48,3.5108,3.546,3.5864,3.6315,3.666]
tenor = [ql.Period(1,ql.Years),ql.Period(2,ql.Years),ql.Period(3,ql.Years),ql.Period(4,ql.Years),ql.Period(5,ql.Years),ql.Period(6,ql.Years),ql.Period(7,ql.Years),ql.Period(8,ql.Years),ql.Period(9,ql.Years),ql.Period(10,ql.Years)]
 
discountfactor = []
for i in range(len(rate)):
    swapHelpers = [ ql.SwapRateHelper(ql.QuoteHandle(ql.SimpleQuote(rate[i]/100)),
                               tenor[i], calendar,
                               fixedLegFrequency, fixedLegAdjustment,
                               fixedLegDayCounter, ql.Euribor6M())]
    discountTermStructure = ql.RelinkableYieldTermStructureHandle()
    forecastTermStructure = ql.RelinkableYieldTermStructureHandle()
    discountSwapCurve = ql.PiecewiseLogCubicDiscount(settlementDate,swapHelpers,
                                            ql.SimpleDayCounter())
    for c in discountSwapCurve.dates():
        discountfactors = discountSwapCurve.discount(c)
    discountfactor.append(discountfactors)
discountfactor

提供一些部分代码和报错信息

提供参考实例,链接:https://jiuaidu.com/jianzhan/611587/

以下解决方式引用自chatGPT:
你可以尝试使用QuantLib Python接口。QuantLib可以帮助你计算折现因子,它提供了一个简单的API来实现这一点:

from QuantLib import *

创建日历

cal = TARGET()

设定折现利率

r = SimpleQuote(0.05)
discount_curve = FlatForward(cal, QuoteHandle(r), Actual360())

设定到期日期

maturity_date = Date(1, January, 2021)

计算折现因子

discount_factor = discount_curve.discount(maturity_date)

print(discount_factor) # 0.9472576191901195