QuantLib · Options Pricing
QuantLib期权定价:欧式/美式期权与 Greeks 计算
QuantLib 支持欧式、美式、亚式、障碍、二元、篮子等期权类型,并通过 AnalyticEuropeanEngine(Black-Scholes 解析解)、二叉树、有限差分、蒙特卡洛等引擎定价,同时计算 Delta/Gamma/Vega/Theta/Rho 等希腊字母。
EuropeanOption
VanillaOption
Asian/Barrier
Delta/Vega
QuantLib 期权类型与 Greeks 示意;基于 QuantLib Instruments,非实测定价。
QuantLib 支持的期权类型对照表
依据 QuantLib Instruments 模块。
| 期权类型 | QuantLib 类 | 适用场景 | 注意点 |
|---|---|---|---|
| 欧式期权 | EuropeanOption | 只在到期日行权,有 Black-Scholes 闭式解 | 用 AnalyticEuropeanEngine 解析定价最快 |
| 美式期权 | VanillaOption | 到期日前任意时刻可行权,无闭式解 | 需 Binomial 二叉树或 FiniteDifferences 引擎 |
| 亚式期权 | AsianOption | 收益取决于标的平均价,路径依赖 | 通常用 MonteCarlo 引擎 |
| 障碍期权 | BarrierOption | 触及/未触及障碍价决定生效,路径依赖 | 需设置 barrier 与 rebate |
| 二元期权 | BinaryOption(数字期权) | 到期价达标付固定金额,否则为 0 | 收益不连续,Greeks 行为特殊 |
| 篮子期权 | BasketOption | 多标的组合,用于分散化产品 | 高维,需 MonteCarlo |
欧式期权定价分步流程
以欧式看涨期权为例,逐步用 Python 构建并定价。
1. 设置评估日与日历:today = ql.Date(15, 7, 2026); ql.Settings.instance().evaluationDate = today; calendar = ql.TARGET() —— 说明:评估日决定折现基准,TARGET 是工作日历。
2. 设收益率曲线与波动率:r = ql.FlatForward(today, 0.05, ql.Actual360()); sigma = ql.BlackConstantVol(today, calendar, 0.20, ql.Actual360()) —— 说明:FlatForward 给恒定无风险利率 5%,BlackConstantVol 给恒定波动率 20%。
3. 建期权与 Payoff:payoff = ql.PlainVanillaPayoff(ql.Option.Call, 100.0); exercise = ql.EuropeanExercise(ql.Date(15, 1, 2027)); option = ql.EuropeanOption(payoff, exercise) —— 说明:行权价 100 的看涨期权,欧式行权。
4. 设定价引擎:engine = ql.AnalyticEuropeanEngine(ql.BlackScholesMertonProcess(spot_handle, ql.YieldTermStructureHandle(r), ql.BlackVolTermStructureHandle(sigma))); option.setPricingEngine(engine) —— 说明:AnalyticEuropeanEngine 用 Black-Scholes 解析解。
5. 计算 NPV 与 Greeks:option.NPV()(价格)、option.delta()、option.gamma()、option.vega()、option.theta()、option.rho() —— 说明:分别返回期权价值与各希腊字母(数值依输入参数而定)。
Greeks 对照表
衡量期权价格对各因子的敏感度。
| 希腊字母 | 含义 | QuantLib 方法 |
|---|---|---|
| Delta | 价格对标的价的一阶敏感度 | option.delta() |
| Gamma | Delta 对标的价的敏感度(二阶) | option.gamma() |
| Vega | 价格对波动率的敏感度 | option.vega() |
| Theta | 价格对时间流逝的敏感度 | option.theta() |
| Rho | 价格对无风险利率的敏感度 | option.rho() |
定价模型选型:什么期权用什么引擎
| 场景 | 推荐引擎 | 理由 |
|---|---|---|
| 欧式无分红/常数参数 | AnalyticEuropeanEngine | Black-Scholes 闭式解,速度快且精确 |
| 美式期权 | Binomial(二叉树)/ FiniteDifferences | 无闭式解,需数值方法处理提前行权 |
| 路径依赖(亚式/障碍) | MonteCarlo | 收益依赖路径,MC 天然支持 |
| 高维篮子期权 | MonteCarlo | 维度高时 MC 复杂度不随维度爆炸 |
| 需要稳定 Greeks | FiniteDifferences | PDE 方法 Greeks 更平滑稳定 |
期权定价注意点
| 注意点 | 说明 |
|---|---|
| 波动率输入 | 波动率是定价最敏感输入,需与模型假设一致(常数 vs 曲面) |
| 计息约定 | Actual/360 与 Actual/365 会改变时间折算,影响价格 |
| 无风险利率与分红率 | 需明确是否含分红(YieldTermStructure 与标的 spot 的衔接) |
| 模型假设局限 | Black-Scholes 假设常数波动率/对数正态,实盘存在微笑与肥尾 |
| 引擎与工具匹配 | 引擎需匹配期权类型,否则报错或结果无意义 |
常见问题
QuantLib 能定价哪些期权?
欧式、美式、亚式、障碍、二元、篮子等期权类型均有对应 QuantLib 类,具体以官方 Instruments 文档为准。
欧式期权用什么引擎定价?
AnalyticEuropeanEngine 用 Black-Scholes 解析解,速度快且精确;也可用 MC/FD 交叉验证,以官方文档为准。
Greeks 怎么算?
定价引擎设置后,用 option.delta()/gamma()/vega()/theta()/rho() 直接获取,以官方实现为准。
QuantLib 的期权定价结果能直接用于实盘吗?
不能。定价基于模型假设(如常数波动率),实盘存在微笑、肥尾、流动性等差异,不构成投资建议。
EasyClaw 能做期权定价吗?
EasyClaw 的 quant-analyst 技能含期权定价与 Greeks 计算能力,但它是量化研究 Skill,与 QuantLib 无已证实集成,定位不同;具体见对比页。