如何用QuantLib的DepositRateHelper基于固定参考日期构建零息曲线?
解决DepositRateHelper固定估值日期构建零息曲线的问题
核心问题在于你没有提前设置QuantLib的全局估值日期,导致DepositRateHelper默认使用当日作为计算基准。以下是正确的流程:
1. 先指定全局估值日期
在创建任何RateHelper之前,将QuantLib的全局评估日期设置为你需要的固定过往日期(比如你提到的2022年5月2日):
// 设置目标估值日期(示例:2022年5月2日) var targetValuationDate = new Date(2, Month.May, 2022); Settings.Instance.EvaluationDate = targetValuationDate;
2. 创建RateHelper实例
此时再创建DepositRateHelper和FixedBondRateHelper,它们都会自动使用你设置的全局估值日期作为基准,无需单独为每个Helper指定:
// 你的GetDepositRateHelper方法无需修改,直接调用即可 rateHelpers.Add(GetDepositRateHelper(new Period(1, TimeUnit.Months), (double)DailyTreasuryRates.Yield1Mo / 100)); // 后续添加其他期限的RateHelper(包括票据/债券的FixedBondRateHelper)
3. 构建PiecewiseYieldCurve
构建曲线时,确保使用与全局设置一致的估值逻辑(显式传入关键参数更稳妥):
var yieldCurve = new PiecewiseYieldCurve( 0, // 结算天数,根据美国国债规则设置 _calendar, rateHelpers, _dayCounter, new Linear(), // 插值方法 new IterativeBootstrap() ); yieldCurve.enableExtrapolation();
为什么之前节点日期混乱?
你之前的代码没有设置全局估值日期,DepositRateHelper默认取DateTime.Today()(也就是你看到的2022年9月19日)作为评估基准,所以1个月期的节点会是9月19日加1个月,以此类推,自然和你预期的基于2022年5月2日的节点不符。
内容的提问来源于stack exchange,提问作者user351059
相关产品推荐
相关产品推荐

