>_ DevTrendszh

语言

首页

语言

板块

前端 后端 移动端 DevOps AI / ML 游戏开发 区块链 嵌入式 安全
Jupyter

如何在 Python 中以 C++ 的速度计算衍生品风险和价格

如果你曾经尝试用 Python 编写期权、互换或债券定价的金融模型,你可能遇到过一个人尽皆知的困境。一方面是缓慢的纯 Python,蒙特卡洛模拟耗时过长;另一方面是像 QuantLib 这样带有 C++ 封装的重型库,阅读源代码或调试模型行为变得非常困难。

FinancePy 库提供了一条不同的道路。它由 Dominic O'Kane 创建,他是 EDHEC 商学院前金融学教授,在金融行业有十二年经验。他致力于创建一个开源工具,所有代码都用 Python 编写,计算结果尽可能接近彭博等专业系统。

项目结构

该库的架构围绕一个清晰的概念。任何估值计算都通过以下公式描述:

估值 = 产品 + 模型 + 市场

在代码中,这看起来很有逻辑性。库模块被分成几个主要目录:

  • utils:日期、财务日历和支付计划生成器
  • market:利率曲线、波动率曲面和市场数据
  • models:从 Black-Scholes 到 Vasicek 模型的数学定价模型
  • products:具体工具,按债券、信用、股票、外汇和利率分类

每个产品都有一个 2 方法。你创建一个金融工具对象,向其传递模型和当前市场状况,然后获取价值或风险参数。对于大多数产品,作者添加了蒙特卡洛模拟。这有助于理解合同收益随时间的运作方式。

速度是如何实现的

FinancePy 用纯 Python 编写,但积极使用 Numba 库。在首次函数调用时,JIT 编译器将模型数学转换为机器码。因此,首次导入模块可能需要几秒钟。

然而,所有后续调用只需不到一毫秒。编译后的函数被存储在缓存中。因此,你获得了 C/C++ 级别的速度,同时保留了打开源代码文件逐行阅读算法的能力,无需编译 Cython 或编写 C 扩展。

一个清晰的示例和笔记本

安装通过标准 pip 调用完成:

0

然后你可以导入日期工具:

1

开发者无需从源代码中猜测函数签名。在仓库中,你会发现超过 90 个 Jupyter 笔记本,包含现成的示例。这些包含详细场景:从基本公司债券估值和货币障碍期权,到构建复杂贴现曲线和信用违约互换。

代码风格和贡献

作者有意避免复杂的继承和重载架构。优先考虑可读性和性能,而不是巧妙的语言技巧。FinancePy 代码中更喜欢简单的 3 循环,而不是复杂的列表推导式,因为 Numba 对常规循环的优化效果更好。

如果你想向项目提交拉取请求,作者有明确的要求:

  • 严格遵守 PEP8 标准
  • 每个函数和类都有清晰的注释
  • 每个方法都存在单元测试和至少一个集成测试

值得使用吗

FinancePy 适合需要清晰工具进行快速价格和敏感性验证的量化分析师、风险和投资组合管理者。这个项目对学生和金融课程教师也很有用,可以用来学习衍生品数学。

该项目仅需要 NumPy、SciPy 和 Numba 作为依赖项。GPL-3.0 许可证提供对所有源代码的访问。项目处于测试状态,作者坦诚地警告日期生成或插值方法可能与专有终端存在差异。然而,对于个人研究、测试交易策略和快速衍生品估值,库的功能已经足够完善。

相关项目