rateslib曲线疑问:更改日计数惯例为何影响折现因子?
我使用rateslib Python包,通过分段/样条插值法基于巴西DI1期货构建收益率曲线。原本假设在工具和求解曲线所用利率不变的情况下,更改曲线自身的日计数惯例(如从'bus252'改为'act360')对折现因子影响不大。但实际更改后,查询同一日期的折现因子出现明显差异:例如执行mixed_curve[dt.datetime(2026, 6, 24)]时,'bus252'惯例返回0.871460,'act360'返回0.869912。
以下是曲线设置代码:
import datetime as dt di1_info = {'N25': 14.90, 'Q25': 14.91, 'U25': 14.93, 'V25': 14.94, 'X25': 14.94, 'Z25': 14.94, 'F26': 14.94, 'G26': 14.94, 'H26': 14.92, 'J26': 14.90, 'K26': 14.83, 'M26': 14.80, 'N26': 14.73, 'V26': 14.48, 'F27': 14.21, 'J27': 14.00, 'N27': 13.79, 'V27': 13.61, 'F28': 13.46, 'J28': 13.37, 'N28': 13.34, 'V28': 13.33, 'F29': 13.32, 'J29': 13.33, 'N29': 13.35, 'V29': 13.35, 'F30': 13.39, 'J30': 13.41, 'N30': 13.43, 'F31': 13.48, 'F32': 13.55, 'F33': 13.58, 'F34': 13.58, 'F35': 13.61 } ... bra = rateslib.Cal(holidays=[dt.datetime.strptime(_, "%Y-%m-%d") for _ in di1_pricing_holidays], week_mask=[5, 6]) mixed_curve = rateslib.curves.Curve( nodes=discount_estimate_nodes, interpolation="log_linear", t=t, id="mixed_curve", calendar=bra, convention='Act360' ) zcs_args = dict(frequency="A", calendar=bra, curves="mixed_curve", currency="brl", convention="bus252") instruments = [] for element in di1_intervals: date1 = dt.datetime(element[0].year, element[0].month, element[0].day) date2 = dt.datetime(element[1].year, element[1].month, element[1].day) instruments.append(rateslib.ZCS(date1, date2, **zcs_args)) solver = rateslib.Solver( curves=[mixed_curve], instruments=instruments, s=di1_rates, algorithm="levenberg_marquardt" )
我的问题是:为何在所有工具输入和求解器设置不变的情况下,更改曲线对象的convention参数会导致折现因子变化?
原因解析
核心原因是曲线的日计数惯例直接决定了插值时使用的时间轴计算规则,即便工具自身的日计数规则不变,曲线时间轴的变化也会彻底改变插值结果,具体如下:
曲线时间轴的计算规则差异:
曲线的convention参数定义了节点间时间差t的计算方式:- 用
bus252时,时间差为实际交易日数 ÷ 252 - 用
act360时,时间差为实际日历天数 ÷ 360
这两种方式算出的节点时间间隔数值差异极大,比如同一时间段,bus252的t值和act360的t值完全不同。
- 用
插值依赖曲线的时间轴:
你使用的是log_linear插值法,插值过程完全基于曲线的时间轴(由convention生成的t值)进行。求解器调整曲线节点的折现因子时,是基于这个时间轴来拟合工具定价的——也就是说,拟合出来的节点折现因子是对应曲线时间轴上的点,而非日历时间的直接映射。工具与曲线的惯例是独立维度:
工具的convention="bus252"仅决定了工具自身计算现金流折现的规则,但曲线的时间轴是独立的。求解器在匹配工具定价时,会先通过曲线的惯例计算目标日期的时间差,再插值得到对应折现因子,最后用工具的惯例验证定价是否符合输入利率。
简言之:曲线的日计数惯例是插值的"刻度标尺",换了标尺,插值出来的折现因子自然会出现明显差异。
内容的提问来源于stack exchange,提问作者leo52353

