模块由三个相互独立、仅通过常量或数据类暴露接口的纯计算文件组成:
- fixedincome.py:以 year_fraction / accrued_interest / bond_cashflows 为基础,向上组合出 bond_price、ytm_solve(用 scipy.optimize.brentq 反解 YTM)、Macaulay/Modified Duration、Convexity、DV01、Effective Duration;并通过 _decay_factors + _profiled_ssr + Nelder-Mead 优化实现 Nelson-Siegel 与 Svensson 曲线拟合,结果封装为可调用对象 CurveFit。
- options.py:统一 Black-Scholes-Merton 定价 (bs_price)、五希腊字母 (bs_greeks) 与隐含波动率求解 (implied_volatility,Newton + Brent 回退),对退化输入(T≤0、σ≤0、S/K≤0)返回内在值而非抛错,保证回测路径稳定;normalise_option_type 将多种拼写归一化为 call/put。
- fundmath.py:围绕 src.entities.cashflow.CashFlowSeries 构建 NPV/XIRR(带多根扫描与 Newton 回退)、DPI/RVPI/TVPI/MOIC、Preferred Return 与 European/American Waterfall、PME+、Clawback 等基金指标;所有公共入口强制要求 CashFlowSeries 类型,禁止裸浮点列表传入,从而避免丢失日期、币种与 flow kind。
依赖方向单向向下:三者均只依赖 numpy、scipy、pandas 与标准库,fundmath.py 额外依赖 src.entities.cashflow,而 fixedincome.py 与 options.py 不互相引用,构成并列的原子计算层。