Py学习  »  Python

推荐一个专业的纯Python实现的量化金融库

python自留地 • 3 周前 • 141 次点击  
最近在研究期权定价的时候,发现了一个宝藏库——FinancePy。这个库的作者是前雷曼兄弟的量化分析师 Dominic O'Kane,说实话,能把投行级别的定价模型用纯Python写出来,还开源给大家用,真的是业界良心。
图片


01.为何要关注这个库?

或许有朋友会疑惑,市面上量化库众多,像TA-Lib、backtrader等不都挺受欢迎的吗?然而,这些库的侧重点各有不同。
TA-Lib主要专注于技术分析,比如计算移动平均线、MACD指标等。而backtrader则更适用于策略回测。但当你需要为期权进行定价,或是想要确定一个结构化产品的具体价值时,这些库就显得力不从心了。
场景一:期权定价
假设你非常看好某只股票,打算购买其看涨期权。券商给出的报价是5元,但你如何判断这个价格是否合理呢?
这时,FinancePy就能派上用场了,只需几行代码,就能轻松算出结果。


from financepy.products.equity import EquityVanillaOptionfrom financepy.market.curves import DiscountCurveimport datetime
# 设置期权参数expiry_date = datetime.date(20241231)  # 到期日strike_price = 100.0  # 行权价option = EquityVanillaOption(expiry_date, strike_price, "Call")
# 当前市场数据stock_price = 95.0      # 股票现价volatility = 0.25       # 波动率 25%risk_free_rate = 0.03   # 无风险利率 3%
# 计算期权价格value = option.value(datetime.date(202461),                      stock_price                     DiscountCurve(datetime.date(202461)),                      volatility)
print(f"期权理论价格: {value:.2f} 元")


跑出来的结果是理论价格。如果券商报价 5 块,理论价格只有 3 块,那你就知道这期权贵了。

场景二:债券收益率计算
假设你购买了一份债券,其票面利率为 5%,3 年后到期,当前市场价格为 98 元。那么,这份债券的实际收益率究竟是多少呢?通过计算,你可以得知,以 98 元购入这份债券,其实际年化收益率大概是多少,这比仅依据票面利率来判断要准确得多。
from financepy.products.bonds import Bondimport datetime
# 创建债券对象issue_date = datetime.date(2024,1,1)maturity_date = datetime.date(2027,1,1)coupon = 0.05  #5% 年息bond = Bond(issue_date, maturity_date, coupon)
# 计算到期收益率clean_price = 98.0 # 市场价格settlement_date = datetime.date(202461)
ytm = bond.yield_to_maturity(settlement_date, clean_price)print(f"到期收益率: {ytm*100:.2f}%")

这样你就能算出来,98 块买的这个债券,实际年化收益率大概是多少,比单看票面利率准确多了。


02.与其他量化库相比,有何优势?
提及量化库,许多人首先想到的是 QuantLib。QuantLib 确实功能强大,几乎已成为业界的标准。然而,它是基于 C++ 编写的,Python 版本只是对其进行了封装。因此,若想深入理解其代码逻辑,或根据自己的需求进行修改,门槛相对较高。
FinancePy 的优势在于其代码完全透明,全部采用 Python 编写。如果你想了解 Black-Scholes 模型的具体实现方式,直接查阅其源码即可。若想修改参数或调整公式,也无需涉及 C++ 的复杂操作。

金融市场变幻莫测,即便拥有了定价工具,也并不意味着就能稳赚不赔。理论价格与市场价格之间,始终存在着流动性、交易成本、信息不对称等现实因素的干扰。
不过,话说回来,多掌握一些知识总是有益的。
项目地址:https://github.com/domokane/FinancePy

Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/191623