QuantLib · Rate & vol models

QuantLib 利率模型与 Heston 波动率模型:参数含义、实测校准与微笑

利率模型和波动率模型最容易出错的地方不是公式,而是「参数到底是干什么的、量级该填多少、结果为什么和别人的不一样」。本页用 QuantLib 1.43 在本机跑出的实测数据,把 Hull-White 的均值回复速度与波动率、Heston 的五个参数、Feller 条件、互换期权定价与波动率微笑逐项对上号,并给出两组真实踩坑记录。

实验:Hull-White 8 组参数 + 曲线 8 档Heston 5 档行权价 × 3 组相关系数报错原文:本机实测 4 条
曲线初始期限结构
短率模型Hull-White / Vasicek
波动率模型Heston v0 κ θ σ ρ
校准目标函数 + 权重

利率类工具靠曲线 + 短率模型定价,期权类工具靠随机波动率模型定价;两条线的参数含义与校准目标不同,把模型的参数当「拟合旋钮」乱调,是结果对不上的常见原因。示意图为本站绘制,非实盘界面。

测试版本QuantLib 1.43(PyPI wheel `quantlib-1.43-cp39-abi3-win_amd64`)Python 版本3.11.9(Windows,Python 官方 CPython)最后核验2026-10-09(全部数值为本机运行输出)估值日2024-01-15(`ql.Settings.instance().evaluationDate`)曲线平曲线 3%(互换期权还会单独跑 0.5% ~ 6% 共 8 档)模型Hull-White / Vasicek / Heston(其余模型只核验类是否存在)可直接复现是(参数、代码、输出三段齐全,可逐项比对)本站实测范围受控实验,用固定参数与虚拟工具;不含行情数据、不构成投资建议
实验环境QuantLib 1.43 / Python 3.11.9 / Windows
实验规模Hull-White 8 组参数 + 曲线 8 档
Heston5 档行权价 × 3 组相关系数
证据等级本站实测(含 4 条报错原文)
Model map

QuantLib 有哪些利率与波动率模型可用?

下表按「模型类型 → QuantLib 类名」整理。类名一列是本机 `dir(QuantLib)` 实测存在的结果,最后一列如实标注本站做了哪一档验证:只核验类名存在的不等于本站验证过其定价结果。

类名来自本机 QuantLib 1.43 的 dir(QuantLib) 实测;用途与限制以官方文档为准
模型QuantLib 类(本机实测存在)适用场景注意点本站验证程度
Hull-White(单因子短率)ql.HullWhite互换期权、上限/下限期权等利率衍生品定价只有均值回复速度 a 与波动率 σ 两个参数,波动率期限结构不能自由拟合已实测定价(下表 8 组参数)
Vasicek(单因子短率)ql.Vasicek短率均值回复的教学与解析推导利率可以为负;本机实测把它直接配 Jamshidian 引擎会报错(见排查表)已实测参数与报错
CIR(平方根扩散)ql.CoxIngersollRoss / ql.ExtendedCoxIngersollRoss希望短率不为负的均值回复建模参数需满足平方根扩散的存在性条件,本站未验证只核验类名存在
Black-Karasinskiql.BlackKarasinski对数正态短率的利率建模无解析债券价格,通常走树/有限差分;本站未验证只核验类名存在
G2(两因子短率)ql.G2需要两因子相关性结构的产品参数更多、校准数据要求更高;本站未验证只核验类名存在
Heston(随机波动率)ql.HestonProcess + ql.HestonModel股指/外汇期权的偏斜与微笑建模解析引擎不提供 delta/vega/gamma(本机实测报错),风险要用差分或其它引擎已实测定价与微笑(下表)
Bates(随机波动率 + 跳跃)ql.BatesModel需要跳空特征的期权定价参数比 Heston 更多,校准更依赖数据;本站未验证只核验类名存在
SABR(微笑插值)ql.SabrSmileSection / ql.SABRInterpolation只拟合市场微笑形状(不建动态过程)它是插值/拟合工具,不要当动态模型用来定价路径依赖产品只核验类名存在
Heston + Hull-White 组合ql.AnalyticHestonHullWhiteEngine / ql.FdHestonHullWhiteVanillaEngine同时含随机波动率与随机利率的期权组合模型参数更多;本站未验证只核验类名存在
怎么用这张表:先判断你要解决的是「利率产品的定价」还是「期权微笑的刻画」。前者用短率模型(Hull-White 一类的参数少、可控),后者用随机波动率模型(Heston 一类能产生偏斜)。把 Heston 用来给互换期权定价、或用 Hull-White 去拟合期权微笑,都会得到「能跑但没法解释」的结果。
Choose a model

什么场景该选哪个模型?

下面这张表把常见任务、可用模型、选择理由与限制放在一起。理由一列写的是「为什么这个模型能回答这个问题」,限制一列写的是它答不了什么。

选型表为本站在官方文档与实测结果基础上整理,具体可用性以官方文档为准
任务场景可选模型选择理由限制 / 注意点
给互换期权(Swaption)定价Hull-White单因子仿射模型与初始曲线一致,有 Jamshidian 这类解析引擎,速度快、参数可解释波动率结构由 a 与 σ 两个参数决定,无法自由拟合整条波动率微笑
给互换期权定价但曲线水平很低(如 2%)Hull-White模型以曲线为初始条件,报价水平/行权价的实值虚值程度会直接反映到价格上本机实测:曲线 0.5% 时价格 9e-08、6% 时才 6.67686296,量级跨 8 个数量级,别用「一眼看是否合理」判断
教学演示短率的均值回复与解析性质Vasicek参数少、解析形式完整,便于手算验证允许负利率;把无曲线的 Vasicek 直接塞给需要期限结构的引擎会报错(本机实测)
要求短率不为负CIR / ExtendedCoxIngersollRoss平方根扩散天然排除负值本站未验证;参数存在性条件需自查,以官方文档为准
刻画股票/外汇期权的偏斜(skew)Hestonρ 直接控制偏斜方向与幅度,本机实测三组 ρ 给出三种微笑形状解析引擎不提供希腊字母;平值附近差异小、两翼差异大,只看平值会低估模型差异
需要跳空 + 微笑Bates在 Heston 基础上加入跳跃成分本站未验证;参数更多、校准数据要求更高
只需要一条能用的市场微笑(不建动态)SABR 插值(SabrSmileSection / SABRInterpolation)直接拟合市场报价形状,实现简单它是「拟合/插值」,不要用它去给路径依赖产品定价
两因子相关性结构(更复杂的曲线变形)G2两因子可表达更丰富的曲线形变本站未验证;校准难度明显上升
Hull-White

Hull-White 互换期权实测:a 与 σ 各自改变什么?

同一笔 5Y×5Y 互换期权(Payer、固定利率 4.5%、TARGET 日历、平曲线 3%、估值日 2024-01-15),只改 Hull-White 的两个参数,用 Jamshidian 解析引擎定价。数值全部来自本机运行。

实测:ql.HullWhite(yts, a, sigma) + ql.JamshidianSwaptionEngine,8 组参数
均值回复速度 a波动率 σ互换期权 NPV模型直接回报的参数读法
0.010.0010.0[0.01, 0.001]σ 太小:时间价值被压到 0,注意这**不是**报错
0.050.0050.00033822[0.05, 0.005]量级仍是「分」级别,容易被误认为算坏了
0.050.010.09028313[0.05, 0.01]σ 翻倍,价格放大约 267 倍(凸性驱动)
0.10.0050.00004532[0.1, 0.005]a 变大、σ 不变:价格反而下降到 4.5e-05
0.10.010.04386872[0.1, 0.01]本页基准行,后续曲线敏感性以它为起点
0.10.020.66856569[0.1, 0.02]σ 再翻倍:放大到 0.67,约 15 倍
0.20.020.30354143[0.2, 0.02]a 从 0.1 增到 0.2 使同 σ 下价格回落
0.30.030.51827739[0.3, 0.03]两参数同时上升,价格回升但低于 a=0.1/σ=0.02
实测:固定 a=0.1、σ=0.01,只改曲线水平(8 档)
平曲线水平互换期权 NPV读法
0.5%0.00000009深度虚值:固定利率 4.5% 远高于曲线,几乎无价值
1.0%0.00000268仍是极小值
1.5%0.00005442开始抬升
2.0%0.00074261比 1.5% 高约 13 倍
3.0%0.04386872本页基准行(与上表 a=0.1/σ=0.01 同一配置)
4.0%0.63771114接近平值,价格抬升约 14.5 倍
5.0%2.9798904深度实值
6.0%6.67686296继续上升,曲线水平的影响远大于参数微调
两条读法:①σ 对价格的影响是非线性的——从 0.005 到 0.01 放大 267 倍,从 0.01 到 0.02 只放大 15 倍,说明「乘一个系数就能估算波动率变化的影响」不成立;②曲线水平的影响比参数微调大得多:0.5% → 6% 让价格跨了 8 个数量级。所以看到「价格几乎是 0」时,先确认曲线与固定利率的关系(实值/虚值),再怀疑模型参数。
Parameters

每个参数是什么意思、量级该填多少、数据从哪来?

模型校准失败往往不是算法问题,而是参数的量级或来源搞错了(例如把「年化波动率 10bp」写成 10)。下表把本页涉及的全部参数逐个列出,其中「本站实测值」一列的数值都是本机跑出来的。

参数含义与典型量级为通用经验值,具体标定口径以官方文档与你所在市场的报价惯例为准
参数物理含义典型量级 / 单位数据从哪来本站实测值
a(Hull-White)短率的均值回复速度0.01 ~ 0.5(每年),量纲是 1/年由利率产品的市场价格反推(校准)本页实验用 0.01 / 0.05 / 0.1 / 0.2 / 0.3
σ(Hull-White)短率的绝对波动率0.001 ~ 0.03(绝对值,**不是**百分数)由互换期权/上限期权的隐含波动率反推本页实验用 0.001 / 0.005 / 0.01 / 0.02 / 0.03
r0(Vasicek 首参)初始短率水平与曲线水平同量级(小数)取曲线上的短端利率本页实验用 0.03
a(Vasicek)均值回复速度同 Hull-White 的 a校准本机 ql.Vasicek(0.03, 0.1, 0.01) 的 params() 回报 [0.1, 0.01, 0.01, 0.0];按构造函数顺序首分量即 a
b / 长期均值(Vasicek)短率回复的目标水平与曲线水平同量级校准或直接取长期均值同上回报向量的第 2 个分量为 0.01(分量与参数名的对应关系以官方文档为准)
λ(Vasicek)风险市场价格(风险溢价项)小数,可为 0一般设 0 表示风险中性测度下无溢价同上回报向量的第 4 个分量为 0.0
v0(Heston)初始方差(不是波动率)0.01 ~ 0.25(方差),波动率 20% 对应 v0=0.04由短期隐含波动率折算(σ²)本页实验用 0.04,对应波动率 20%
κ / kappa(Heston)方差均值回复速度0.5 ~ 5(1/年)校准本页实验用 1.5
θ / theta(Heston)方差的长期均值与 v0 同量级(方差)由长期隐含波动率折算本页实验用 0.04
σ / vol-of-vol(Heston)方差的波动率(vol-of-vol)0.1 ~ 0.7(1/√年)校准,主要影响微笑的两翼高度本页实验用 0.30
ρ / rho(Heston)资产价格与方差的相关系数-1 ~ 1,负值产生下跌时波动率上升的偏斜校准,主要影响偏斜方向本页实验用 -0.60 / -0.20 / +0.40 三组对照
2κv0 − σ²(Feller 条件)判断方差过程是否「离零足够远」的组合量大于 0 为满足条件由上面参数直接计算,不是独立输入本页实验为 0.03(满足);另有一组为 -2.248(违反,见排查表)
参数与量级:本机实测的一组 Heston 配置(可直接运行)import QuantLib as ql today = ql.Date(15, 1, 2024) ql.Settings.instance().evaluationDate = today dc = ql.Actual365Fixed() expiry = ql.Date(15, 1, 2025) spot = ql.QuoteHandle(ql.SimpleQuote(100.0)) risk_free = ql.YieldTermStructureHandle(ql.FlatForward(today, 0.05, dc)) dividend = ql.YieldTermStructureHandle(ql.FlatForward(today, 0.00, dc)) # 注意参数顺序:riskFree 在前、dividendYield 在后(顺序传反的后果见本页排查表) process = ql.HestonProcess(risk_free, dividend, spot, 0.04, 1.5, 0.04, 0.30, -0.60) # v0 kappa theta sigma rho model = ql.HestonModel(process) option = ql.VanillaOption(ql.PlainVanillaPayoff(ql.Option.Call, 100.0), ql.EuropeanExercise(expiry)) option.setPricingEngine(ql.AnalyticHestonEngine(model, 192)) print(option.NPV()) # 10.36484148(本机实测) print(2 * 1.5 * 0.04 - 0.30 ** 2) # Feller 组合量 = 0.03
Heston smile

Heston 波动率微笑实测:ρ 决定偏斜方向

用同一组 Heston 参数(v0=0.04、κ=1.5、θ=0.04、σ=0.30),只改相关系数 ρ,把每个行权价上的 Heston 价格反解成 Black-Scholes 隐含波动率,就得到三条形状不同的微笑曲线。数值为本机实测。

实测:由 Heston 解析价格反解 Black-Scholes 隐含波动率(远期 105.1415116,折现因子由 5% 平曲线给出);最后一行为由上表数值计算得到的派生行
行权价 Kρ = -0.60 隐含波动率ρ = -0.20 隐含波动率ρ = +0.40 隐含波动率ρ = -0.60 时的 Heston 价格
80(深度实值)22.918213%21.400326%18.212049%25.05149502
9021.259766%20.316718%18.405302%17.06447962
100(平值)19.724869%19.523621%19.050428%10.36484148
11018.367395%19.069215%19.947416%5.41036518
120(深度虚值)17.272629%18.94056%20.914275%2.35951629
微笑斜率(K=120 减 K=80,百分点)-5.6456-2.4598+2.7022—
怎么读:ρ 越负,低行权价(下跌保护方向)的隐含波动率越高,曲线向右下方倾斜,这就是股票市场常见的「下跌时波动率上升」特征;ρ 为正时曲线反向倾斜。三组 ρ 的平值隐含波动率都接近 19%~19.7%,说明只看平值价格几乎看不出模型差异,必须看两翼。反解自检:把隐含波动率代回 Black-Scholes,与 Heston 价格的差不超过 3.4e-05。
Heston vs BS

同一期权,Heston 与平波动 Black-Scholes 差多少?

把上面 Heston(ρ=-0.60)的价格与「用 20% 平波动 Black-Scholes」的价格并排比较。这张表说明了什么时候「用 Black-Scholes 近似一下」还能接受、什么时候不能。

实测:行权价 80~120,其余参数一致(S=100、r=5%、T=1.00273973)
行权价Heston(ρ=-0.60)Black-Scholes(平波动 20%)差值相对差读法
8025.0514950224.60192008+0.44957494+1.83%实值:Heston 略高
9017.0644796216.71568857+0.34879105+2.09%差异仍小
100(平值)10.3648414810.46814839-0.10330691-0.99%差异最小,容易误判「两个模型一样」
1105.410365186.05625835-0.64589317-10.67%虚值:平波动高估
1202.359516293.26030327-0.90078698-27.63%深虚值:相对差接近三成
最大绝对差 / 最大相对差——0.90078698(K=120)-27.63%(K=120)派生行:由上行数值计算
可操作的判据:平值附近差异不到 1%,两翼可以到两位数百分比。如果你的持仓或风险管理集中在虚值期权,用平波动 Black-Scholes 做替代会把价格和风险一起算错;反过来,只做平值附近的粗估,模型选择的影响可能小于参数标定的影响。
Pitfalls

两个本机实测踩到的坑:参数顺序,与「不报错但没意义」

下面这条是最容易犯、又最难发现的错误:HestonProcess 的前两个参数都是曲线,顺序传反不会报错,但等于把无风险利率与分红率互换,价格会整体偏低。第二个坑是违反 Feller 条件后依然能算出价格。

实测:ql.HestonProcess(riskFreeRate, dividendYield, spot, v0, kappa, theta, sigma, rho) 前两参数互换
行权价正确:r=5%、q=0传反:r=0、q=5%差值占价格比为什么
8025.0514950217.34836864-7.70312638-30.75%远期从 105.141512 掉到 95.109913
9017.0644796210.14432877-6.92015086-40.55%同一原因,实值部分被削掉
100(平值)10.364841484.94091535-5.42392613-52.33%平值期权对远期最敏感
1105.410365181.93168287-3.47868231-64.30%虚值放大
1202.359516290.61550288-1.74401341-73.91%深虚值几乎被抹平
远期对照105.141512(=100×e^(0.05T))95.109913(=100×e^(-0.05T))——判据:先打印远期,再比价格
情形是否报错本机实测结果该怎么判
违反 Feller 条件(v0=0.01, κ=0.1, θ=0.01, σ=1.5, ρ=-0.9,2κv0−σ² = -2.248)不报错平值看涨 5.47602907(平波动基准 10.46814839)先算 2κv0−σ²;为负时价格不可信,别只看「有输出」
Hull-White 参数极小(a=0.01, σ=0.001)不报错互换期权 0.0确认 σ 的量级是绝对值 0.001 而非 1
Heston 参数顺序传反不报错平值 4.94091535(正确 10.36484148)打印远期:105.14 才是 r=5%、q=0
给无曲线的 Vasicek 配需要期限结构的引擎报错RuntimeError: empty Handle cannot be dereferenced模型要么自带曲线(Hull-White 形式),要么显式挂定期限结构
Heston 解析引擎取希腊字母报错RuntimeError: delta not provided(vega、gamma 同样)用中心差分或换有限差分/MC 引擎;别写 try 之外的空值处理
用错误的远期去反解隐含波动率报错RuntimeError: negative Put price (-6.5637) implied by put-call parity. No solution exists for Call strike 80, forward 105.142, price 17.3484, deflator 0.951099反解隐含波动率前先把远期与折现因子对齐;远期算错时会得到「无解」而不是错误的价格
参数顺序与 Feller 条件的自检脚本(本机实测输出)import math import QuantLib as ql today = ql.Date(15, 1, 2024) ql.Settings.instance().evaluationDate = today dc = ql.Actual365Fixed() T = dc.yearFraction(today, ql.Date(15, 1, 2025)) # 1.00273973 # 判据 1:远期。r=5%、q=0 时应为 105.141512;若得到 95.109913 说明曲线顺序传反了 print(100.0 * math.exp(0.05 * T), 100.0 * math.exp(-0.05 * T)) # 判据 2:Feller 条件。小于 0 时 Heston 价格不可信 v0, kappa, theta, sigma, rho = 0.04, 1.5, 0.04, 0.30, -0.60 print(2 * kappa * v0 - sigma ** 2) # 0.03(满足) # 判据 3:解析引擎的希腊字母不可用 risky = ql.YieldTermStructureHandle(ql.FlatForward(today, 0.05, dc)) div = ql.YieldTermStructureHandle(ql.FlatForward(today, 0.00, dc)) p = ql.HestonProcess(risky, div, ql.QuoteHandle(ql.SimpleQuote(100.0)), v0, kappa, theta, sigma, rho) opt = ql.VanillaOption(ql.PlainVanillaPayoff(ql.Option.Call, 100.0), ql.EuropeanExercise(ql.Date(15, 1, 2025))) opt.setPricingEngine(ql.AnalyticHestonEngine(ql.HestonModel(p), 192)) print(opt.NPV()) # 10.36484148 try: opt.delta() except RuntimeError as e: print("RuntimeError:", e) # delta not provided
Calibration

校准流程:从市场价格到模型参数

校准是把「市场价格」翻译成「模型参数」的过程。下面八步是本站在本机跑通的最小闭环,每一步都给出可执行动作与预期结果;同时提醒一句:校准结果只在你的目标函数与权重下成立,换一套权重就可能得到另一组参数。

  • 1. 固定定价环境与估值日

    先设 ql.Settings.instance().evaluationDate,并固定曲线的计息约定(本页实验统一用 Actual/365 Fixed)。预期:dc.yearFraction(today, ql.Date(15, 1, 2025)) 输出 1.00273973。
  • 2. 准备曲线与工具

    用平曲线或自建曲线构造 YieldTermStructureHandle,再构造待校准的期权/互换期权工具。预期:工具在给定曲线下能算出 NPV(本页互换期权示例为 0.04386872)。
  • 3. 明确校准目标与权重

    写下目标函数:哪些报价参与校准、用绝对价格差还是波动率差、是否加权(虚值期权价格小、绝对差会被平值主导,通常改用隐含波动率差或按 vega 加权)。这一步必须在代码里写清楚,否则复现不了。
  • 4. 设定参数的初始值与上下界

    Heston 的 v0 取短端隐含方差、θ 取长期隐含方差、κ 与 σ 给经验量级、ρ 负值起步;Hull-White 的 a 取 0.01~0.3、σ 取 0.001~0.03。预期:初始值下能算出有限价格,不是 0 也不是 inf。
  • 5. 选择优化器并记录收敛信息

    QuantLib 提供 ql.LevenbergMarquardt 等优化器(本机 dir 实测存在);务必打印迭代次数、最终误差与是否收敛。预期:误差应随迭代下降,而不是在边界值上停留。
  • 6. 用「未参与校准」的报价做样本外检验

    把一部分行权价/期限留出来,只看样本外误差。预期:样本外误差与样本内同量级才是可用校准;差几倍说明过拟合。
  • 7. 做参数敏感性检查

    把每个参数单独扰动一点,看价格变化方向是否符合经济直觉(例如 ρ 越负两翼越倾斜)。预期:本页实测三组 ρ 给出斜率 -5.6456 / -2.4598 / +2.7022 个百分点,符号与方向应一致。
  • 8. 固化口径:记录曲线日期、数据来源、权重与版本

    把「用了哪天哪条曲线、哪些报价、什么权重、QuantLib 与 Python 版本」写进报告。预期:别人拿到记录能复现出同一组参数——这是本页所有实测数字都遵守的规则。
  • 不要做的事:①不要用「价格对得上」作为单一验收标准——多个参数组合都能对上平值;②不要在没有市场数据来源的情况下报出校准参数(本页实验的参数都是人为设定,用于演示机制,不是市场校准结果);③不要忽略 Feller 条件与参数边界,价格能算出来不代表过程合理。
    FAQ

    常见问题

    Feller 条件是什么?不满足会怎样?

    Feller 条件一般写作 2κθ − σ²(对 Heston 的方差过程)大于 0,用来确认方差过程「不会频繁贴到 0」。本机实测:v0=0.04、κ=1.5、θ=0.04、σ=0.30 时组合量 2κv0−σ² = 0.03(满足);换成 v0=0.01、κ=0.1、θ=0.01、σ=1.5 时该量变为 -2.248(违反),此时平值看涨仍能算出 5.47602907,不报错但结果不可信。判据:算价格之前先算这个组合量。具体定义与适用形式以官方文档为准。QuantLib 与 EasyClaw 无已证实集成,这类参数检查需要自己掌握。

    为什么 Heston 的解析引擎算不出 delta 和 vega?

    本机实测:ql.AnalyticHestonEngine 下调用 option.delta() 抛 RuntimeError: delta not provided,vega()、gamma() 同样不可用。替代做法:①自己用中心差分(设 spot ±0.01、vol ±0.0001 再重新定价);②换用本机实测存在的ql.FdHestonVanillaEngine 或 ql.MCEuropeanHestonEngine 等引擎。具体哪些引擎提供哪些希腊字母,以官方文档为准。

    校准一组 Heston 参数需要多少期权数据?

    至少覆盖「不同行权价 + 不同期限」,否则 ρ 与两翼参数不可辨识:只有平值报价时,多组参数都能拟合出同一个价格。本页实测中三组 ρ(-0.60 / -0.20 / +0.40)的平值隐含波动率都在 19%~19.7% 附近,但两翼斜率从 -5.6456 到 +2.7022 个百分点——这正说明必须用两翼数据才能定出 ρ。样本量没有绝对标准,取决于你要求的价格误差与期限覆盖,以你的交易与风控口径为准。

    Hull-White 的 σ 该填 0.01 还是 1(百分点)?

    填绝对值:本机实测 ql.HullWhite(yts, 0.1, 0.01) 的两个参数直接以 params() 回报为 [0.1, 0.01],σ=0.01 表示 100bp 等级的年化短率波动率。若按「百分点」填 1,等于把波动率放大 100 倍,价格会离谱但不报错。判据:先用已知量级(0.001~0.03)试探,再看价格是否落在合理范围。

    为什么曲线水平一变,互换期权价格能差 8 个数量级?

    因为互换期权的价值同时由「实值/虚值程度」和「波动率」决定。本机实测固定 a=0.1、σ=0.01,曲线从 0.5% 升到 6% 时价格从 9e-08 升到 6.67686296;同一曲线(3%)下 σ 从 0.005 变到 0.01,价格从 0.00033822 变到 0.09028313。所以「价格几乎为 0」时先看是不是深度虚值,而不是先调参数。具体数值随你的固定利率与曲线口径变化,以你的交易文件为准。

    Vasicek 要不要配期限结构?

    要,而且方式有限制。本机实测:把不带曲线的 ql.Vasicek(0.03, 0.1, 0.01) 直接配 ql.JamshidianSwaptionEngine,会在定价时报 RuntimeError: empty Handle cannot be dereferenced;而 Hull-White 的构造 ql.HullWhite(yts, a, sigma) 本身就以曲线为初始条件,可直接用同一引擎。也就是说:选哪条路线,要看你手上有没有曲线、以及引擎是否要求模型自带期限结构。以官方文档为准。

    本页的参数是不是「正确」的市场校准参数?

    不是。本页所有模型参数都是人为设定的受控实验参数(Heston v0=0.04、κ=1.5、θ=0.04、σ=0.30、ρ 三档;Hull-White a 与 σ 八组),目的只是让「参数变化 → 价格变化」的因果关系可复现、可核对。真实校准需要你的市场数据、目标函数与权重,结果仅供研究与方法论参考,不构成投资建议。

    本页结论模型参数的影响是可以量化的:Hull-White 的 σ 从 0.005 到 0.01 让互换期权价格放大 267 倍、曲线水平 0.5%→6% 跨 8 个数量级;Heston 的 ρ 决定微笑方向(两翼斜率 -5.6456 ~ +2.7022 个百分点),而平值价格几乎不变。参数顺序与 Feller 条件是两条必须自己检查的红线。
    适用边界全部数值来自本机 QuantLib 1.43 / Python 3.11.9 的受控实验(虚拟工具、固定曲线、参数人为设定);模型类名以本机 dir(QuantLib) 实测为准,未实测的模型只标注「类存在」。跨版本或换数据后数值会不同。
    风险提示本页不提供任何市场校准参数或交易建议;模型价格依赖假设,且「能算出价格」不等于模型适用。把示例参数用于真实交易会带来偏差与风险。

    模型选好之后,怎么落到工具与引擎上?

    模型要挂在具体的金融工具上才有意义:先看期限结构怎么建,再看定价引擎与金融工具的组合与排查。