# pricelib_study **Repository Path**: zlex/pricelib_study ## Basic Information - **Project Name**: pricelib_study - **Description**: pricelib库研究,由于pricelib版本升级到1.3.0之后,并未看到详细的修订文档。本项目旨在比较1.3.0和1.2.0版本的差异。 - **Primary Language**: Python - **License**: Apache-2.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2026-02-04 - **Last Updated**: 2026-02-11 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # PriceLib 版本比较与文档补齐项目 [![License](https://img.shields.io/badge/License-Apache%202.0-blue.svg)](LICENSE) [![PriceLib](https://img.shields.io/badge/PriceLib-1.3.0-green.svg)](https://gitee.com/lltech/pricelib) 本项目旨在对比分析 PriceLib 1.2.0 和 1.3.0 版本的差异,并为 1.3.0 版本补齐完整的文档和示例代码。 ## 📋 项目概述 **PriceLib** 是一个开源金融衍生品定价引擎库,使用 Python 编写,支持多种定价方法(解析解、Monte Carlo、PDE、FFT积分法、树方法)和波动率模型(常数、局部、Heston随机波动率)。 ### 项目背景 - **1.2.0 版本**:拥有完整的文档和示例(项目总计168个Python文件,其中examples目录39个) - **1.3.0 版本**:核心代码已更新(核心库125个Python文件),原始版本缺少文档和示例 - **1.3.0-fixed 版本**:修复版本,包含完整文档、示例和 bug 修复 - **本项目目标**: 1. 分析 1.3.0 相对于 1.2.0 的改进和新特性 2. 发现并修复 1.3.0 的 bug 3. 为 1.3.0-fixed 补齐完整的 docs 和 examples 目录 4. 创建详细的迁移指南和使用文档 ### 项目状态 ✅ **已完成** - 所有计划任务已成功完成(2026-02-04) ## 🗂️ 目录结构 ``` pricelib_study/ ├── pricelib-1.2.0/ # 1.2.0 版本完整源码(总计168个Python文件) │ ├── pricelib/ # 核心库代码(118个Python文件) │ ├── examples/ # 详细的使用示例(39个Python文件) │ ├── tests/ # 单元测试(10个Python文件) │ ├── docs/ # 文档资源(9个图片文件) │ └── README.md # 详细的中文文档 │ ├── pricelib-1.3.0/ # 1.3.0 版本源码(原始版本,未补齐文档) │ ├── pricelib/ # 核心库代码(125个Python文件) │ ├── tests/ # 单元测试(10个Python文件) │ ├── setup.py # 安装配置文件 │ └── README.md # 基本文档 │ ├── pricelib-1.3.0-fixed/ # 1.3.0 修复版本 🔧 已修复 P0 bug │ ├── pricelib/ # 核心库代码(已修复 QuadEuroSnowEngine) │ ├── examples/ # 使用示例 │ ├── tests/ # 单元测试 │ ├── BUGFIX.md # 修复说明文档 ✅ 已创建 │ └── ... │ ├── analysis_reports/ # 📊 分析报告目录 │ ├── VERSION_COMPARISON.md # 版本差异详细分析报告 │ ├── COMPLETION_REPORT.md # 文档补齐完成报告 │ ├── SNOWBALL_COMPARISON.md # 欧式雪球 vs 标准雪球对比 │ ├── barrier_in_type_inconsistency_comprehensive_analysis.md # barrier_in 类型不一致性分析 ⚠️ │ ├── quad_euro_snow_engine_bug_report.md # QuadEuroSnowEngine 定价缺陷报告 🔴 │ └── README.md # 报告索引 │ ├── scripts/ # 🔧 工具脚本目录 │ ├── validate_examples.py # 示例验证工具 │ ├── test_pricelib_version.py # 环境验证脚本 │ └── test_quad_euro_snow_fix.py # Bug 修复验证脚本 │ ├── guides/ # 📖 指南文档目录 │ ├── install_fixed_version.md # 安装修复版本指南 │ └── setup_environment.md # 环境设置指南 │ ├── CLAUDE.md # 项目指令文档 ├── LICENSE # Apache 2.0 许可证 └── README.md # 本文件 ``` ## 🎯 主要成果 ### 1. 版本差异分析 详细分析了 1.3.0 相对于 1.2.0 的所有变更: - **新增产品**(4个): - `EuropeanSnowball` - 欧式雪球(到期观察敲入) - `PhoenixBase` - 凤凰结构基类 - `SingleShark` - 单向鲨鱼鳍 - `EnhancedIndexing` - 指数增强 - **新增引擎**(3个): - `QuadEuroSnowEngine` - 欧式雪球积分引擎 - `QuadPhoenixEngine` - 凤凰积分引擎 - `FdmPhoenixEngine` - 凤凰PDE引擎 - **模块重构**: - `pricelib.common.time` → `pricelib.common.date_handler` 📄 详见:[VERSION_COMPARISON.md](analysis_reports/VERSION_COMPARISON.md) ### 2. 文档和示例补齐 为 PriceLib 1.3.0 补齐了完整的文档体系: - ✅ **docs 目录**:9个图片文件 - ✅ **examples 目录**:42个示例文件 - 38个从 1.2.0 迁移 - 2个新增产品示例(SingleShark、EnhancedIndexing) - 2个新增功能示例(EuropeanSnowball、QuadPhoenixEngine) - ✅ **迁移指南**:详细的 API 变更说明和迁移步骤 - ✅ **示例说明**:完整的使用指南和最佳实践 📄 详见:[COMPLETION_REPORT.md](analysis_reports/COMPLETION_REPORT.md) ### 3. 新增功能示例 为 1.3.0 的所有新增功能创建了高质量示例: - **欧式雪球示例** (`examples/autocallable/european_snowball_demo.py`) - 展示 EuropeanSnowball 产品的使用 - 对比三种引擎(QuadEuroSnowEngine、MC、PDE) - 说明与标准雪球的区别 - 展示不同保护水平的定价 - **凤凰积分引擎** (`examples/autocallable/phoenix_demo.py`) - 添加 QuadPhoenixEngine 对比 - 展示三种引擎的性能和精度对比 📄 详见:[pricelib-1.3.0/EXAMPLES_COMPLETION_SUMMARY.md](pricelib-1.3.0/EXAMPLES_COMPLETION_SUMMARY.md) ## 🚀 快速开始 ### 环境要求 - Python 3.7+ - pip ### 安装 PriceLib 1.3.0 ```bash cd pricelib-1.3.0 pip install -e .[dev,plot] ``` ### 运行示例 ```bash # 运行欧式雪球示例 python examples/autocallable/european_snowball_demo.py # 运行凤凰示例(含积分引擎对比) python examples/autocallable/phoenix_demo.py # 运行单向鲨鱼鳍示例 python examples/barrier/single_shark_demo.py # 运行指数增强示例 python examples/enhanced_indexing_demo.py ``` ### 验证所有示例 ```bash # 运行自动化验证脚本 python scripts/validate_examples.py ``` ## 📚 文档索引 ### 核心文档 | 文档 | 说明 | |------|------| | [📊 分析报告汇总](analysis_reports/README.md) | 所有分析报告的索引和概览 | | [VERSION_COMPARISON.md](analysis_reports/VERSION_COMPARISON.md) | 1.2.0 vs 1.3.0 详细对比分析 | | [COMPLETION_REPORT.md](analysis_reports/COMPLETION_REPORT.md) | 文档补齐完成报告 | | [SNOWBALL_COMPARISON.md](analysis_reports/SNOWBALL_COMPARISON.md) | 欧式雪球 vs 标准雪球深度对比 | | [barrier_in_type_inconsistency_comprehensive_analysis.md](analysis_reports/barrier_in_type_inconsistency_comprehensive_analysis.md) | ⚠️ barrier_in 类型不一致性综合分析 | | [quad_euro_snow_engine_bug_report.md](analysis_reports/quad_euro_snow_engine_bug_report.md) | 🔴 QuadEuroSnowEngine 定价缺陷报告 | | [pricelib-1.3.0/MIGRATION.md](pricelib-1.3.0/MIGRATION.md) | 从 1.2.0 迁移到 1.3.0 的指南 | | [pricelib-1.3.0/examples/README.md](pricelib-1.3.0/examples/README.md) | 示例代码使用指南 | | [pricelib-1.3.0/EXAMPLES_COMPLETION_SUMMARY.md](pricelib-1.3.0/EXAMPLES_COMPLETION_SUMMARY.md) | 新增功能示例补充总结 | | [guides/install_fixed_version.md](guides/install_fixed_version.md) | 🔧 在其他项目中安装 PriceLib 1.3.0-fixed 的方法 | | [guides/setup_environment.md](guides/setup_environment.md) | 🔧 环境设置和版本管理指南 | ### 示例代码 PriceLib 1.3.0 包含 42 个示例文件,涵盖: - **香草期权** - 欧式、美式、价差期权 - **亚式期权** - 算术平均、几何平均 - **障碍期权** - 单边、双边、单向鲨鱼鳍 - **自动赎回** - 雪球、欧式雪球、凤凰、FCN/DCN - **二元期权** - 现金或无价值、资产或无价值 - **累计期权** - 累计、反向累计 - **波动率模型** - Heston、局部波动率、波动率曲面 - **绘图示例** - 收益图、希腊值曲线、波动率曲面 - **指数增强** - 线性收益结构 详见:[pricelib-1.3.0/examples/README.md](pricelib-1.3.0/examples/README.md) ## 🔄 从 1.2.0 迁移到 1.3.0 ### 主要变更 1. **模块重命名** ```python # 1.2.0 from pricelib.common.time import set_evaluation_date # 1.3.0 from pricelib.common.date_handler import set_evaluation_date # 推荐(兼容两个版本) from pricelib import * ``` 2. **新增产品** - EuropeanSnowball(欧式雪球) - SingleShark(单向鲨鱼鳍) - EnhancedIndexing(指数增强) 3. **新增引擎** - QuadEuroSnowEngine(欧式雪球积分引擎) - QuadPhoenixEngine(凤凰积分引擎) ### 兼容性 ✅ **高度兼容** - 大部分代码无需修改 - 所有使用 `from pricelib import *` 的代码保持兼容 - 定价接口保持一致 - 参数命名保持一致 详细迁移指南:[pricelib-1.3.0/MIGRATION.md](pricelib-1.3.0/MIGRATION.md) ## 📊 希腊字母计算方法 ### 计算方法概述 PriceLib 采用**混合计算架构**,根据产品类型和定价引擎自动选择最优方法: 1. **解析解方法**(Analytical)- 欧式香草期权使用 Black-Scholes 闭式公式 2. **数值差分法**(Finite Differences)- 通用回退方法 3. **PDE 网格插值**(Grid Interpolation)- 复杂路径依赖期权 4. **重新定价法**(Re-pricing)- PDE 引擎的 Vega/Rho 计算 ### 希腊字母定义 | 希腊字母 | 数学定义 | 返回值类型 | 说明 | |---------|---------|-----------|------| | **Delta (Δ)** | ∂V/∂S | 导数值 | 标的价格变动1单位时的价值变化 | | **Gamma (Γ)** | ∂²V/∂S² | 二阶导数值 | Delta 的变化率 | | **Vega (ν)** | ∂V/∂σ × 0.01 | PV差值 | 波动率变动1%时的价值变化 | | **Theta (Θ)** | ∂V/∂t ÷ 365 | PV差值 | 每日时间衰减 | | **Rho (ρ)** | ∂V/∂r × 0.01 | PV差值 | 利率变动1%时的价值变化 | | **Vanna** (1.3.0+) | ∂²V/∂S∂σ | 交叉导数 | Delta 对波动率的敏感性 | | **Volga** (1.3.0+) | ∂²V/∂σ² | 二阶导数 | Vega 的凸性 | ### 计算方法详解 #### 1. 解析解方法(欧式香草期权) 使用 Black-Scholes 公式的精确导数: ```python # Delta: ∂V/∂S delta = callput * exp(-q*τ) * N(callput * d1) # Gamma: ∂²V/∂S² gamma = exp(-q*τ) * φ(d1) / (S * σ * √τ) # Vega: ∂V/∂σ (scaled to 1%) vega = S * exp(-q*τ) * φ(d1) * √τ * 0.01 # Theta: ∂V/∂t (daily) theta = (-S * exp(-q*τ) * φ(d1) * σ / (2√τ) - ...) / 365 # Rho: ∂V/∂r (scaled to 1%) rho = callput * K * τ * exp(-r*τ) * N(callput * d2) * 0.01 ``` **特点**: - ✅ 精确值(无近似误差) - ✅ 计算速度极快 - ✅ 适用于欧式香草期权 #### 2. 数值差分法(通用回退方法) 使用中心差分和二阶差分: ```python # Delta: 中心差分 delta = (V(S+h) - V(S-h)) / (2h) # Gamma: 二阶差分 gamma = (V(S+h) - 2V(S) + V(S-h)) / h² # Vega: 价格差值 vega = V(σ+0.01) - V(σ) # Theta: 时间衰减 theta = V(t+1day) - V(t) # Rho: 利率敏感性 rho = V(r+0.01) - V(r) ``` **步长设置**: | 版本 | Delta/Gamma 步长 | Vega 步长 | Theta 步长 | Rho 步长 | |------|-----------------|----------|-----------|---------| | 1.2.0 | S × 1% | 0.01 (1%) | 1 day | 0.01 (1%) | | 1.3.0 | S × 0.1% ✨ | 0.01 (1%) | 1 day | 0.01 (1%) | **1.3.0 改进**:Delta/Gamma 步长从 1% 缩小到 **0.1%**,数值精度提升 10 倍。 #### 3. PDE 网格插值法 利用 PDE 求解器生成的价格网格: ```python # Delta: 从价格网格插值 f = cubic_spline(price_grid) delta = (f(S+h) - f(S-h)) / (2h) # Gamma: 二阶插值 gamma = (f(S+h) - 2f(S) + f(S-h)) / h² # Theta: 使用相邻时间切片 theta = price_grid[t] - price_grid[t+1] ``` **特点**: - ✅ 利用已计算的价格网格(高效) - ✅ 适用于路径依赖期权(障碍、亚式等) - ⚠️ Vega/Rho 需要重新求解 PDE(较慢) #### 4. 批量计算优化 `pv_and_greeks()` 方法一次性计算所有希腊字母: ```python result = option.pv_and_greeks() # 返回: {'pv': 价格, 'delta': Δ, 'gamma': Γ, # 'vega': ν, 'theta': Θ, 'rho': ρ} ``` **优势**:复用价格计算,减少重复定价次数。 ### 使用建议 #### 1. 选择合适的计算方法 | 产品类型 | 推荐引擎 | 希腊字母方法 | 精度 | |---------|---------|------------|-----| | 欧式香草期权 | `AnalyticVanillaEuEngine` | 解析解 | 精确 | | 美式期权 | `BinomialEngine` / `FdmEngine` | 数值差分 | 高 | | 障碍期权 | `FdmEngine` | PDE 网格插值 | 高 | | 雪球/凤凰 | `MCEngine` / `FdmEngine` | 数值差分 | 中-高 | #### 2. 调整步长以平衡精度和速度 ```python # 默认步长(推荐) delta = option.delta() # 1.3.0: 0.1% step # 自定义步长(更高精度) delta = option.delta(step=spot * 0.0001) # 0.01% step # 自定义步长(更快速度) delta = option.delta(step=spot * 0.01) # 1% step ``` #### 3. 批量计算提升性能 ```python # ❌ 低效:多次定价 delta = option.delta() gamma = option.gamma() vega = option.vega() # ✅ 高效:一次性计算 greeks = option.pv_and_greeks() delta, gamma, vega = greeks['delta'], greeks['gamma'], greeks['vega'] ``` ### 注意事项 1. **Vega/Theta/Rho 是缩放后的值** - Vega: 波动率变动 **1%** 的价值变化(不是 0.01) - Theta: **每日**时间衰减(不是年化) - Rho: 利率变动 **1%** 的价值变化(不是 0.01) 2. **数值精度权衡** - 步长越小 → 精度越高,但可能受浮点误差影响 - 步长越大 → 速度越快,但截断误差增大 - 1.3.0 的 0.1% 步长是经过优化的平衡点 3. **引擎回退机制** - 如果引擎未实现特定希腊字母,自动回退到数值差分法 - 保证所有产品都能计算希腊字母 4. **参与率影响**(1.3.0+) - 所有希腊字母会乘以产品的参与率 `prod.parti` - 例如:50% 参与率的期权,Delta 也会相应减半 ### 示例代码 ```python from pricelib import * # 创建欧式看涨期权 option = VanillaOption( strike=100, maturity=1.0, s=100, r=0.03, q=0.01, vol=0.2, callput=CallPut.call ) # 方法1:单独计算(使用解析解) print(f"Delta: {option.delta():.4f}") # 0.5893 print(f"Gamma: {option.gamma():.4f}") # 0.0188 print(f"Vega: {option.vega():.4f}") # 0.3877 (1% vol change) print(f"Theta: {option.theta():.4f}") # -0.0123 (daily decay) print(f"Rho: {option.rho():.4f}") # 0.5234 (1% rate change) # 方法2:批量计算(更高效) greeks = option.pv_and_greeks() print(greeks) # {'pv': 10.4506, 'delta': 0.5893, 'gamma': 0.0188, # 'vega': 0.3877, 'theta': -0.0123, 'rho': 0.5234} # 1.3.0 新增:二阶希腊字母 print(f"Vanna: {option.vanna():.4f}") # Delta 对波动率的敏感性 print(f"Volga: {option.volga():.4f}") # Vega 的凸性 ``` ### 技术参考 详细实现请参考: - 解析解:`pricelib/pricing_engines/analytic_engines/analytic_vanilla_eu_engine.py` - 数值差分:`pricelib/common/product_base/option_base.py` - PDE 方法:`pricelib/pricing_engines/fdm_engines/fdm_engine.py` - 示例代码:`pricelib-1.3.0/examples/vanilla/vanilla_demo.py` ## 🛠️ 工具和脚本 项目提供了多个实用工具脚本,位于 `scripts/` 目录: ### scripts/validate_examples.py 自动化验证脚本,用于测试所有示例是否能正常运行。 **功能**: - 自动发现所有示例文件 - 逐个运行并记录结果 - 捕获错误和超时 - 生成详细的验证报告 **使用方法**: ```bash python scripts/validate_examples.py ``` ## 📊 统计数据 ### 文件统计 | 类别 | 1.2.0 | 1.3.0 | 变化 | 说明 | |------|-------|-------|------|------| | **项目总计** | 168个 | 178个 | +10 | 所有Python文件(含setup.py) | | 核心代码 (pricelib/) | 118个 | 125个 | +7 | 新增产品和引擎 | | 示例文件 (examples/) | 39个 | 42个 | +3 | 已补齐并超越 | | 单元测试 (tests/) | 10个 | 10个 | 0 | 保持一致 | | 配置文件 (setup.py) | 1个 | 1个 | 0 | 安装配置 | | 文档图片 (docs/) | 9个 | 9个 | 0 | 已补齐 | ### 新增功能覆盖率 - **新增产品示例**: 4/4 (100%) - **新增引擎示例**: 4/4 (100%) - **综合覆盖率**: 8/8 (100%) ## 🤝 贡献 本项目由以下工作组成: 1. **版本差异分析** - 详细对比 1.2.0 和 1.3.0 的所有变更 2. **文档补齐** - 为 1.3.0 补齐完整的 docs 和 examples 目录 3. **迁移指南** - 创建详细的 API 变更说明和迁移步骤 4. **示例创建** - 为所有新增功能创建高质量示例 5. **验证工具** - 创建自动化验证脚本 ## 📞 联系方式 ### PriceLib 官方 - **开发商**: 上海凌瓴信息科技有限公司 - **电话**: 021-50186069 - **邮箱**: marx@galatech.com.cn - **Gitee**: https://gitee.com/lltech/pricelib ### 本项目 - **仓库**: https://gitee.com/zlex/pricelib_study - **问题反馈**: 请在 Gitee 上提交 Issue ## 📄 许可证 本项目采用 Apache License 2.0 许可证。详见 [LICENSE](LICENSE) 文件。 PriceLib 库本身也采用 Apache License 2.0 许可证。 --- ## 📅 更新日志 ### 2026-02-09 - ✅ **修复 EuropeanSnowball barrier_in 类型不一致问题** - 将标量 barrier_in 转换为数组,与 barrier_out、coupon_out 保持一致 - 参照 PhoenixBase 的最佳实践实现 - 修复自动状态更新时的 TypeError 风险 - 更新 BUGFIX.md 添加 Bug #2 修复说明 - **修复效果**:自动状态更新功能现在可以安全使用 - 🗂️ **重组项目结构** - 创建 `scripts/` 目录存放工具脚本 - 创建 `guides/` 目录存放指南文档 - 移动所有 Python 脚本到 scripts/ 目录 - 移动所有指南文档到 guides/ 目录 - 创建 scripts/README.md 和 guides/README.md 说明文档 - 更新所有文档中的文件引用 - **效果**:项目根目录更加整洁,结构更清晰 - 🔧 **创建 PriceLib 1.3.0 修复版本** - 创建 `pricelib-1.3.0-fixed` 目录 - 应用 QuadEuroSnowEngine bug 修复补丁 - 创建 BUGFIX.md 详细记录修复内容 - 创建 test_quad_euro_snow_fix.py 验证脚本 - 创建环境设置指南和验证工具 - **修复效果**:spot <= barrier_in 时定价恢复正常 - 🔴 **发现并确认 QuadEuroSnowEngine 严重定价缺陷** - 识别出 v_knock_in 网格在反向迭代中从未被更新 - 导致 spot <= barrier_in 时定价异常(接近 0) - 仅影响 QUAD 引擎的欧式雪球,MC/PDE 引擎正常 - 提供 3 种修复方案(推荐方案 1 或方案 3) - 创建详细 bug 报告:`quad_euro_snow_engine_bug_report.md` - **严重程度**:🔴 P0 - 严重(核心定价逻辑错误) - **修复优先级**:🔴 已修复 - ⚠️ **发现并分析 barrier_in 类型不一致性问题** - 识别出 EuropeanSnowball 和 PhoenixBase_OLD 存在 barrier_in 标量/数组不一致 - 分析潜在的运行时 TypeError 风险(自动状态更新场景) - 对比 PhoenixBase 新旧版本,确认新版已完美修复 - 提供 3 种修复方案和最佳实践参照(PhoenixBase 作为范例) - 创建综合分析报告:`barrier_in_type_inconsistency_comprehensive_analysis.md` - **影响范围**:2个问题类(EuropeanSnowball 需修复,PhoenixBase_OLD 已有新版) - **修复优先级**:🔴 高(EuropeanSnowball)、🟢 低(PhoenixBase_OLD 已有新版) ### 2026-02-06 - ✅ 添加希腊字母计算方法详细文档 - 说明解析解、数值差分、PDE 网格插值等计算方法 - 对比 1.2.0 和 1.3.0 的步长差异(1% → 0.1%) - 提供使用建议和示例代码 - 明确 Vega/Theta/Rho 是缩放后的 PV 差值 - ✅ 创建欧式雪球 vs 标准雪球深度对比分析 - 分析敲入观察方式差异(美式 vs 欧式) - 对比参数设置、定价差异、风险特征 - 提供实际案例和使用场景建议 - 详细说明代码实现差异 ### 2026-02-04 - ✅ 完成版本差异分析报告 - ✅ 补齐 pricelib-1.3.0 的 docs 和 examples 目录 - ✅ 创建迁移指南和示例说明文档 - ✅ 为所有新增功能创建示例代码 - ✅ 创建自动化验证工具 - ✅ 新增功能示例覆盖率达到 100% --- ## ⚠️ 已知问题 ### 🔴 QuadEuroSnowEngine 定价缺陷(发现于 2026-02-09) **问题描述**:在 PriceLib 1.3.0 的 `QuadEuroSnowEngine`(欧式雪球积分引擎)中发现严重的定价缺陷:**v_knock_in 网格在反向迭代过程中从未被更新**,导致当标的价格低于敲入价时,定价结果异常(接近 0)。 **严重程度**:🔴 **P0 - 严重**(核心定价逻辑错误) **修复状态**:✅ **已修复** - 修复版本位于 `pricelib-1.3.0-fixed/` **影响范围**: - **产品类型**:仅欧式雪球(`EuropeanSnowball`) - **定价引擎**:仅 QUAD 引擎(`QuadEuroSnowEngine`) - **触发条件**:当 `spot <= barrier_in` 时 - **不受影响**:MC/PDE 引擎、标准雪球、`spot > barrier_in` 场景 **症状表现**: ``` spot = 90 < barrier_in = 95 原始 1.3.0: pv ≈ 0.5 ❌ 异常低 修复版本: pv ≈ 96.8 ✓ 正常 MC 引擎: pv ≈ 96.8 ✓ 正常 ``` **根本原因**: - 缺陷文件:`quad_euro_snow_engine.py` - 缺陷方法:`_backward_induction()` (line 60-77) - 问题:只更新 `v_not_in` 网格,缺少 `v_knock_in` 网格的更新 - 触发:`_last_step_single_pv()` 在 `spot <= barrier_in` 时使用未更新的 `v_knock_in` **修复方案**: 1. **方案 1**(已采用):在 `_backward_induction()` 中添加 `v_knock_in` 网格更新 2. **方案 3**(备选):重写 `_last_step_single_pv()`,欧式雪球始终使用 `v_not_in` **使用修复版本**: ```bash # 安装修复版本 cd pricelib-1.3.0-fixed pip install -e .[dev,plot] # 验证修复效果 python ../scripts/test_quad_euro_snow_fix.py ``` **详细分析**: - Bug Report: [quad_euro_snow_engine_bug_report.md](analysis_reports/quad_euro_snow_engine_bug_report.md) - 修复说明: [pricelib-1.3.0-fixed/BUGFIX.md](pricelib-1.3.0-fixed/BUGFIX.md) **修复优先级**:🔴 **已修复**(代码修改量小,风险可控) --- ### ✅ barrier_in 类型不一致性(发现于 2026-02-09,已修复) **问题描述**:在 PriceLib 1.3.0 中发现 `barrier_in` 参数类型不一致的设计缺陷。 **影响类**: - **EuropeanSnowball** (`european_snowball.py`) - ✅ **已修复** - **PhoenixBase_OLD** (`autocallable_base.py`) - 🟢 低优先级,已有新版 PhoenixBase **风险**:当启用自动状态更新时,可能触发 `TypeError: 'float' object is not subscriptable` **修复状态**:✅ **已修复** - 修复版本位于 `pricelib-1.3.0-fixed/` **修复方案**:参照 PhoenixBase 实现,将标量 barrier_in 转换为数组 **修复代码**: ```python # 修复前 if isinstance(barrier_in, (int, float, np.int32, np.float64)): self.barrier_in = barrier_in # ❌ 标量 # 修复后 if isinstance(barrier_in, (int, float, np.int32, np.float64)): self.barrier_in = np.ones(len_obs_dates) * barrier_in # ✅ 数组 ``` **详细分析**:参见 [barrier_in_type_inconsistency_comprehensive_analysis.md](analysis_reports/barrier_in_type_inconsistency_comprehensive_analysis.md) **修复说明**:参见 [pricelib-1.3.0-fixed/BUGFIX.md](pricelib-1.3.0-fixed/BUGFIX.md) --- **项目状态**: ✅ 已完成(持续维护中) **最后更新**: 2026-02-09 **版本**: PriceLib 1.3.0