QuantLib · Yield curve bootstrap
QuantLib 收益率曲线 Bootstrap:从市场报价到一条可定价的期限结构
把存款和互换报价交给 DepositRateHelper 与 SwapRateHelper,再交给分段曲线,QuantLib 会逐点反解出零息利率与折现因子。本页给出本机实测的完整输出:四种曲线构造的零息与折现因子、四种插值在非节点上的折现因子极差、用曲线反算输入报价的自洽性误差,以及逐点 +1bp 后的曲线响应。
先把市场报价翻译成 helper,再由 helper 逐点反解出一条曲线;曲线建好之后能取零息利率、折现因子与远期利率三种输出,用于定价与风险。示意图非实盘界面。
期限结构类型与曲线构建 helper 对照
QuantLib 的期限结构分成两层:一层是直接给出利率或折现因子的曲线类,另一层是把市场报价翻译成曲线节点的 helper。先用哪一层、用哪个 helper,决定后面能不能反算回市场报价。
| 类型 / 类 | 作用 | 典型构造方式 | 适用场景 | 注意点 |
|---|---|---|---|---|
| ql.FlatForward | 单一平价利率的水平曲线 | ql.FlatForward(refDate, rate, dc, ql.Compounded, ql.Annual) | 快速试算、风险基准对照、教学示例 | 不含期限结构;用它代表「真实市场曲线」会掩盖斜率效应 |
| ql.ZeroCurve | 给出零息利率节点的插值曲线 | ql.ZeroCurve(dates, rates, dc, cal) | 已有零息利率表(如内部估值曲线) | rates 个数必须与 dates 个数相同,否则报 dates/data count mismatch |
| ql.DiscountCurve | 直接给出折现因子节点的插值曲线 | ql.DiscountCurve(dates, dfs, dc, cal) | 已有折现因子表、或需要与对手方 DF 表对齐 | 与 ZeroCurve 同源但输入口径不同,不要混用两套数值 |
| ql.DepositRateHelper | 把货币市场存款报价变成短端节点 | ql.DepositRateHelper(quote, tenor, fixingDays, cal, conv, eom, dc) | 短端 1D ~ 6M | fixingDays 与 eom 会改变节点日期;本页实测取 2 天、eom=True、Actual/360 |
| ql.SwapRateHelper | 把互换报价变成中长端节点 | ql.SwapRateHelper(quote, tenor, cal, fixedFreq, fixedConv, fixedDC, ibor) | 中长端 1Y ~ 30Y | 固定端频率、计息基准、日历三项要与市场惯例一致,否则反算的 par rate 会有偏差(本页实测 2Y 差 −1.364bp) |
| ql.FraRateHelper / ql.FuturesRateHelper | 把远期利率协议或利率期货变成节点 | 对应 helper 构造函数,需给出起算与结束期限 | 远期段(约 3M ~ 2Y)的报价更活跃时 | 期货报价含凸性,直接当远期用会带系统性偏差 |
| ql.OISRateHelper | 把隔夜指数互换变成节点 | 需要先构造 OvernightIndex,再传入 helper | 需要无风险(隔夜)折现曲线时 | 与 IBOR 曲线是两条不同的曲线,报价不可互相替代 |
| ql.PiecewiseLogCubicDiscount 等分段曲线 | 由 helper 列表逐点 bootstrap 出整条曲线 | ctor(0, calendar, helpers, dayCounter) | 由市场报价直接构造可定价曲线 | 插值方式不同、非节点输出不同(本页实测 4 年折现因子极差 2.5723bp) |
ql.ZeroCurve 的节点日期个数与利率个数必须一致,否则报 dates/data count mismatch;② 未开启外推时,取超出曲线末端的期限会报 time (5.075) is past max curve time (1.02222);③ 报价倒挂时 bootstrap 仍能建出曲线,错误会推迟到「取值那一刻」才暴露。从市场报价到可定价曲线:6 步实测流程
下面 6 步是本页实际执行的顺序。每一步都给出调用的接口与预期输出,最后一步是自洽性检验——如果这一步误差很大,说明前面的口径没对齐,而不是曲线算法有问题。
1. 固定估值日与曲线参考日
先设置 ql.Settings.instance().evaluationDate;构造分段曲线时参考日传 0,表示使用估值日。测出节点日期以估值日 2024-01-15 为起点。
预期输出:曲线起点节点日期 = 2024-01-15;本页实测共 14 个节点(参考日 + 13 个报价节点)。
2. 构造短端存款 helper(1W / 1M / 3M / 6M)
ql.DepositRateHelper(quote, tenor, 2, calendar, ql.ModifiedFollowing, True, ql.Actual360()),fixingDays 取 2、月末规则取 True、计息基准取 Actual/360。
预期输出:4 个短端节点;本页实测首批节点日期为 January 24th, 2024(1W)与 February 19th, 2024(1M),可见节点日期不等于「估值日 + 自然月」。
3. 构造中长端互换 helper(1Y ~ 30Y)
ql.SwapRateHelper(quote, tenor, calendar, ql.Annual, ql.Unadjusted, ql.Thirty360(ql.Thirty360.BondBasis), ibor);ibor 用 6 个月期指数(本页实测以 USD-6M / TARGET / Actual/360 构造)。
预期输出:9 个互换节点;固定端频率 Annual、调整约定 Unadjusted、计息 30/360 BondBasis 三项都会影响反算结果。
4. 用 helper 列表 bootstrap 出曲线
ql.PiecewiseLogCubicDiscount(0, calendar, helpers, ql.Actual360());把 13 个 helper 一次性传入,由曲线类自己逐点反解。
预期输出:建成后可直接取 zeroRate、discount、forwardRate;本页实测 5 年零息 4.687292%、折现因子 0.7925708982(LogCubic)。
5. 取出三种输出并做口径标注
零息用 zeroRate(d, ql.Actual360(), ql.Compounded, ql.Annual),折现用 discount(d),远期用 forwardRate(d1, d2, ql.Actual360(), ql.Simple)。
预期输出:同一期限三种输出的数值口径不同,不能直接互比;本页实测 5 年零息 4.687292% 与同期 6 个月远期利率是两套口径。
6. 用曲线反算输入报价,做自洽性检验
对每个输入互换,用曲线的折现因子按固定端计息基准加权,反算平价的固定利率,再与输入报价相减。
预期输出:本页实测差异为 1Y +0.018bp、2Y −1.364bp、3Y −0.533bp、5Y −0.091bp、7Y −0.068bp、10Y −0.061bp;误差集中在 2~3 年,说明固定端口径与曲线基准不一致。
四种曲线构造的实测输出:零息利率与折现因子
同一批 helper 交给四种分段曲线构造,逐期限取出零息利率(Annual 复利、Actual/360)与折现因子。下表全部是本机实测值,用于判断「换一种构造会不会改变定价输入」。
| 期限 | LogLinear 零息% | LogCubic 零息% | FlatForward 零息% | CubicZero 零息% | LogCubic 折现因子 |
|---|---|---|---|---|---|
| 0.25 年 | 4.471087 | 4.469440 | 4.471087 | 4.470153 | 0.9890082981 |
| 0.5 年 | 4.547696 | 4.548175 | 4.547696 | 4.548482 | 0.9777649372 |
| 1 年 | 4.473845 | 4.473944 | 4.473845 | 4.473461 | 0.9564784998 |
| 2 年 | 4.517204 | 4.516627 | 4.517204 | 4.516881 | 0.9142037644 |
| 3 年 | 4.578760 | 4.578599 | 4.578760 | 4.578625 | 0.8725843529 |
| 5 年 | 4.687045 | 4.687292 | 4.687045 | 4.687328 | 0.7925708982 |
| 7 年 | 4.741689 | 4.741894 | 4.741689 | 4.741933 | 0.7195966054 |
| 10 年 | 4.796323 | 4.796677 | 4.796323 | 4.796642 | 0.6215452476 |
| 15 年 | 4.854556 | 4.854824 | 4.854556 | 4.854897 | 0.4858938322 |
| 20 年 | 4.876794 | 4.876974 | 4.876794 | 4.877085 | 0.3805093517 |
| 30 年 | 4.918797 | 4.919942 | 4.918797 | 4.920096 | 0.2317951390 |
插值方法选择:非节点上的折现因子差多少
曲线只有在报价节点上是「被报价钉住」的,节点之间全靠插值。交易对手用的插值方式和你不同时,即使报价完全一样,非节点的折现因子也会不同。下面是插值方法对照与本机实测的极差。
| 插值方法 | 插值对象 | 优点 | 风险 | 适用场景 |
|---|---|---|---|---|
| PiecewiseLogLinearDiscount | 对数线性插值折现因子 | 单调、稳健,一般不会造出负远期 | 曲线有折点,二阶不连续 | 常规市场曲线与折现曲线 |
| PiecewiseLogCubicDiscount | 对数三次插值折现因子 | 曲线平滑,远期连续 | 节点附近远期可能出现振荡 | 需要平滑远期、或做曲线风险分析 |
| PiecewiseFlatForward | 分段常数平价远期 | 远期在节点之间恒定,口径直观 | 曲线不平滑,远期呈阶梯状 | 教学与教科书式 bootstrap 对照 |
| PiecewiseCubicZero | 三次插值零息利率 | 零息曲线平滑 | 零息平滑不等于远期平滑,远期可能更抖 | 以零息利率为报价口径时 |
| ql.ZeroCurve(线性插值零息) | 线性插值零息节点 | 构造简单,直接给利率表 | 远期在节点处跳变 | 已有零息利率表、只要近似定价 |
| ql.DiscountCurve(对数线性插值 DF) | 对数线性插值折现因子 | 与 DF 表口径一致,便于对账 | 节点外需自行处理外推 | 对手方给的是折现因子表时 |
| 年限 | LogLinear 折现因子 | LogCubic 折现因子 | FlatForward 折现因子 | CubicZero 折现因子 | 折现因子极差(bp) | 是否报价节点 |
|---|---|---|---|---|---|---|
| 4 年 | 0.8314596440 | 0.8317057855 | 0.8314596440 | 0.8317168697 | 2.5723 | 非节点 |
| 6 年 | 0.7552131760 | 0.7552094948 | 0.7552131760 | 0.7552412773 | 0.3178 | 非节点 |
| 8 年 | 0.6853808861 | 0.6855166323 | 0.6853808861 | 0.6854741297 | 1.3575 | 非节点 |
| 12 年 | 0.5634061148 | 0.5634133796 | 0.5634061148 | 0.5634809819 | 0.7487 | 非节点 |
| 25 年 | 0.2970203074 | 0.2972389254 | 0.2970203074 | 0.2972547671 | 2.3446 | 非节点 |
| 5 年 | 0.7925803798 | 0.7925708982 | 0.7925803798 | 0.7925695322 | 0.1085 | 报价节点 |
| 10 年 | 0.6215665400 | 0.6215452476 | 0.6215665400 | 0.6215473533 | 0.2129 | 报价节点 |
| 30 年 | 0.2318721962 | 0.2317951390 | 0.2318721962 | 0.2317848422 | 0.8735 | 报价节点 |
曲线自洽性与 1bp 风险实测
曲线建好之后有两件事必须做:用曲线反算输入报价,确认 bootstrap 没走偏;再逐点扰动报价,看关键期限的响应是否符合预期。下面两组都是本机实测输出。
| 期限 | 输入互换报价% | 曲线反算 par rate% | 差(bp) | 判据与可能原因 |
|---|---|---|---|---|
| 1 年 | 4.55 | 4.5502 | +0.018 | 误差很小:短端节点由存款 helper 支撑 |
| 2 年 | 4.60 | 4.5864 | −1.364 | 误差偏大:固定端 Annual + 30/360 与曲线 Actual/360 口径不一致 |
| 3 年 | 4.65 | 4.6447 | −0.533 | 与 2 年同源,随期限变长而收窄 |
| 5 年 | 4.75 | 4.7491 | −0.091 | 插值平滑后残差被摊薄 |
| 7 年 | 4.80 | 4.7993 | −0.068 | 节点较密,残差继续收窄 |
| 10 年 | 4.85 | 4.8494 | −0.061 | 同上;本组误差集中在 2~3 年 |
| 被 +1bp 的报价 | 类型 | 报价% | 5Y 零息变化(bp) | 10Y 零息变化(bp) | 读出什么 |
|---|---|---|---|---|---|
| 1W | 存款 | 4.32 | 0.0 | 0.0 | 短端报价对中长端零息无影响(本机实测恒为 0) |
| 1M | 存款 | 4.35 | 0.0 | 0.0 | 同上 |
| 3M | 存款 | 4.40 | 0.0 | 0.0 | 同上 |
| 6M | 存款 | 4.50 | 0.0 | 0.0 | 同上 |
| 1Y | 互换 | 4.55 | −0.0105 | −0.0055 | 影响很小且带负号:三次插值下远处节点的扰动会反向微调 |
| 2Y | 互换 | 4.60 | −0.0131 | −0.0066 | 同上;负号说明残差在节点之间被重新分配 |
| 3Y | 互换 | 4.65 | −0.0515 | −0.0272 | 负号幅度略大,仍属插值效应 |
| 5Y | 互换 | 4.75 | +1.0571 | −0.0463 | 本节点响应接近 1bp(套利关系决定),跨节点为轻微负号 |
| 7Y | 互换 | 4.80 | +0.0044 | −0.1107 | 对 5 年是微正、对 10 年是负号,跨节点影响方向取决于插值 |
| 10Y | 互换 | 4.85 | −0.0009 | +1.1793 | 本节点响应 1.18bp,超过 1bp:插值叠加计息口径导致 |
| 15Y | 互换 | 4.90 | +0.0002 | +0.0078 | 长端节点对两个关键期限影响都很小 |
| 20Y | 互换 | 4.92 | −0.0001 | −0.0023 | 同上,量级在 0.01bp 以内 |
| 30Y | 互换 | 4.95 | 0.0 | +0.0003 | 末端节点几乎不影响前面期限 |
曲线折现与单一收益率:什么时候不能互相替代
同一只债券(票息 3%、2020-01-15 发行、2030-01-15 到期、年付、TARGET、A/A ISDA、结算 T+2),把折现方式从平曲线换成有斜率的零息曲线,净价与「反解出的单一收益率」会同时变化——但两者描述的不是同一件事。
| 折现方式 | 净价 | 全价 | 由净价反解出的收益率 | DV01(每 100 面值) | 说明 |
|---|---|---|---|---|---|
| 平曲线 2% | 105.48014237 | 105.49653581 | 2.020134% | 0.05777747 | 曲线水平移动:所有期限同利率 |
| 平曲线 3% | 99.75408467 | 99.77047812 | 3.0454534% | 0.05396585 | 与票息同水平,净价接近面值 |
| 平曲线 4% | 94.35189611 | 94.36828955 | 4.08107742% | 0.05040818 | 利率上行,净价与 DV01 同步下降 |
| 递增零息曲线(2.65% → 7.15%,31 个节点) | 97.69124475 | 97.70763819 | 3.43261594% | 0.05260284 | 有斜率:每条现金流用各自期限的折现率 |
| 把曲线交给别人时必须写清的字段 | 为什么关键 | 本页实测依据 |
|---|---|---|
| 参考日(reference date) | 所有节点的起算点,差一天整条曲线平移 | 实测:曲线取值早于参考日直接报 negative time (-4.03825) given |
| 日历(calendar) | 决定节点日期落在哪天,也决定非营业日如何处理 | 实测:TARGET 与 China.SSE 在假期边界上错开 1~8 天 |
| 计息基准(DayCounter) | 决定每个区间的年化长度,直接影响折现指数 | 实测:曲线用 Actual/360,互换固定端用 30/360 BondBasis,自洽性在 2 年差 −1.364bp |
| 复利方式与频率(Compounding / Frequency) | 零息报 Annual 复利与报 Simple 是两个数 | 实测:zeroRate 用 Compounded + Annual,forwardRate 用 Simple,两者不可互比 |
| 插值方式 | 节点之间怎么走,直接决定非节点折现因子 | 实测:非节点折现因子极差 0.3178bp ~ 2.5723bp |
| 外推开关 | 末端之外的期限是报错还是外推,必须事先说清 | 实测:未开启外推时取 5 年(1 年曲线)报 time past max curve time |
中国市场:能用的是什么,不能直接用的又是什么
人民币曲线可以照同样的流程构造:把 CNY 报价交给 DepositRateHelper 与 SwapRateHelper,日历换成银行间(China.IB)。但要注意:本页的 CNY 报价是示意值,不是市场数据,QuantLib 也不提供中国的计息口径与估值规则。
| 导入字段 | 含义 | 必须与什么保持一致 | 常见坑 | 本页实测关联 |
|---|---|---|---|---|
| tenor / 期限 | 报价对应的期限 | helper 的 Period 与市场惯例一致 | 3M 与 90D 在带假期的日历下不是同一件事 | 实测:1W 节点落在 January 24th, 2024 |
| instrumenttype / 工具类型 | 存款、互换、债券等 | 决定用哪个 helper | 用错 helper 会让节点落在错误的日期 | 实测:4 个存款 helper + 9 个互换 helper = 13 节点 |
| quote / 报价 | 利率数值 | 单位统一(小数与百分比差 100 倍) | 0.0455 与 4.55 混用会让曲线整体错位 | 实测:本页报价以小数传入(0.0455 = 4.55%) |
| daycount / 计息基准 | 报价自身的计息约定 | 与 helper 参数一致 | Actual/360 与 Actual/365 会让反算 par rate 差几个 bp | 实测:曲线 Actual/360、互换 30/360,2Y 差 −1.364bp |
| settlingdays / 起息规则 | 报价的起息与结算天数 | 与 helper 的 fixingDays 和月末规则一致 | fixingDays 改了、节点日期就改 | 实测:存款 helper 取 2 天、eom=True |
| calendar / 日历 | 该市场采用的日历 | 与 market 一致(银行间或交易所) | 用 TARGET 构造人民币曲线会错开假期边界 | 实测:China.IB 2024 年非营业日 115 天 / SSE 124 天 / TARGET 110 天 |
| fixedfrequency / 固定端频率 | 互换固定端付息频率 | 与 SwapRateHelper 参数一致 | 频率与计息基准不匹配会放大自洽性误差 | 实测:本页互换用 Annual + 30/360 |
| 年限 | 节点日期 | 零息利率% | 折现因子 |
|---|---|---|---|
| 1 年 | January 15th, 2025 | 2.065240 | 0.9797106184 |
| 2 年 | January 15th, 2026 | 2.116787 | 0.9589165026 |
| 3 年 | January 15th, 2027 | 2.168322 | 0.9376174702 |
| 5 年 | January 15th, 2029 | 2.273587 | 0.8935709999 |
| 7 年 | January 15th, 2031 | 2.380595 | 0.8480480466 |
| 10 年 | January 16th, 2034 | 2.489361 | 0.7817989884 |
ql.ActualActual 的枚举为 ISDA / Bond / Historical / AFB / Euro / Actual365 / ISMA,没有 China 口径,人民币债券的计息规则要自己按发行文件选定;② 日历可以选 ql.China(ql.China.SSE)(Shanghai stock exchange)或 ql.China(ql.China.IB)(China inter bank market),两者 2024 年非营业日分别是 124 天与 115 天;③ 中债等外部数据源的解析、字段映射与估值口径需要自行实现,本页只给字段清单与方法,具体以中债官方下载口径与你所在机构的估值规则为准。QuantLib 提供的是计算框架,不含中国市场数据。曲线建好后的 6 项校验清单
下面每一项都可以在几分钟内跑完,用来判断一条曲线「能不能用于定价」而不是「看起来像不像曲线」。每项都附本页实测的参照值与不通过时的含义。
| 校验项 | 怎么做 | 期望结果 | 不通过时的含义 | 本页实测参照 |
|---|---|---|---|---|
| 节点数目与日期 | 打印 curve.dates() | 节点数 = 参考日 + helper 个数 | 少了说明 helper 未生效或被去重,多了说明日历或周期设置不符 | 实测 14 个节点,首批为 January 15th, 2024 / January 24th, 2024 / February 19th, 2024 |
| 反算输入报价(自洽性) | 用曲线算每个输入工具的理论定价,再反算报价 | 差异应在 0 ~ 1.5bp 量级 | 误差大说明固定端频率/计息/日历与市场惯例不一致,不是数值问题 | 实测 1Y +0.018bp、2Y −1.364bp、10Y −0.061bp |
| 零息曲线是否异常跳变 | 逐期限打印 zeroRate | 相邻期限变化平缓、方向一致 | 局部跳变说明报价本身有问题或插值被节点挤压 | 实测 30 年零息 4.918797% ~ 4.920096%(四种构造) |
| 折现因子取值区间 | 检查 discount 是否都落在 0 与 1 之间 | 正利率环境下全部小于 1 且随期限递减 | 出现大于 1 说明存在负利率或报价异常 | 实测:负利率报价(−20%)下折现因子会升到 1.2552,属口径而非 bug |
| 末端与超范围行为 | 取曲线末端之外的期限并确认行为 | 未开外推时应明确报错,而不是返回外推值 | 静默外推会让远端定价没有任何报价支撑 | 实测:报 time (5.075) is past max curve time (1.02222) |
| 逐点扰动(曲线风险) | 逐个报价 +1bp 重建曲线,观察关键期限 | 本节点响应约为 1bp,跨节点影响应可解释 | 出现无法解释的大幅反向影响,先检查插值与报价倒挂 | 实测:5Y 报价 +1bp → 5Y 零息 +1.0571bp;10Y 报价 +1bp → 10Y 零息 +1.1793bp |
| 口径登记 | 把参考日 / 日历 / 计息 / 复利 / 插值 / 外推六项写进文件头 | 六项齐全,且与对手方一致 | 缺项是「同一批报价算出不同价格」的常见起点 | 六项含义与实测依据见本页「曲线折现与单一收益率」一节 |
常见问题
为什么我的曲线反算不出输入的互换报价?
先看误差量级。本站实测同一批 USD 报价的反算误差是 1Y +0.018bp、2Y −1.364bp、3Y −0.533bp、5Y −0.091bp、10Y −0.061bp——误差集中在 2~3 年,根因是互换固定端用 Annual + 30/360 BondBasis,而曲线折现基准是 Actual/360。如果误差在几百 bp 量级,则要检查报价单位(小数与百分比)与期限是否对应。以官方文档与市场惯例为准;QuantLib 与 EasyClaw 无已证实集成,口径对齐需要你自己完成。
插值方法到底会影响多少?
在报价节点上影响很小(本机实测 5 年折现因子极差 0.1085bp、30 年 0.8735bp),但在非节点上会明显放大:4 年 2.5723bp、25 年 2.3446bp。结论是:如果对账差异只出现在非节点,先换成与对手方相同的插值方式;如果连节点都对不上,才是报价或口径问题。以双方约定的曲线口径为准。
平曲线能不能直接当市场曲线用?
不能。本站实测同一只债券:平曲线 3% 净价 99.75408467、递增零息曲线(2.65% → 7.15%)净价 97.69124475,而后者反解出的「单一收益率」是 3.43261594%——这个数字在平曲线下无法复现同一条曲线的价格。平曲线适合做基准与试算,不能代表市场期限结构。以真实报价与官方曲线构造接口为准。
中债数据能不能直接导入?
不能直接导入,需要自己做字段映射。QuantLib 1.43 的 ql.ActualActual 枚举没有 China 口径,日历有 China.SSE 与 China.IB 可用(本机实测 2024 年非营业日分别是 124 天与 115 天)。本页给出的做法是:把报价整理成「期限 / 工具类型 / 报价 / 计息基准 / 起息规则 / 日历 / 固定端频率」七项,再逐项映射到 helper 参数。具体口径以中债官方下载说明与你所在机构的估值规则为准。
为什么取超出曲线末端的期限会报错?
因为默认不做外推。本机实测:用一条只有 1 年期节点的曲线去问 5 年,会报 time (5.075) is past max curve time (1.02222)。这是保护性行为——远端没有报价支撑时返回一个外推值反而更危险。确实需要外推时要显式开启并记录在口径里。以官方文档为准。
逐点 bump 报价时,为什么别的期限也会变?
因为插值把节点之间的曲线重新分配了。本机实测:把 7 年互换报价抬高 1bp,5 年零息只变 +0.0044bp,但 10 年零息变了 −0.1107bp;把 10 年报价抬高 1bp,10 年零息变 +1.1793bp(略超过 1bp)。所以做关键期限风险时,不要把曲线当成互不相干的点列。以你自己的曲线口径复算为准。
曲线参考日用今天还是用固定的历史日期?
建议显式固定并写进记录。本机实测 ql.Date.todaysDate() 返回运行当天(2026-10-09),如果不设置估值日,同一条曲线在不同天运行会得到不同的节点日期,历史对账复现不了。同时注意边界:取值早于参考日会直接报 negative time。以官方文档为准。
本页的报价可以直接拿去做定价吗?
不可以。本页全部是受控实验:美元报价与人民币报价都是示意值,用于演示 bootstrap 流程与口径影响,不是任何时点的市场数据。真实定价必须使用你自己的合规数据源,并记录数据日期与口径;结果仅供研究与流程参考,不构成投资建议。