一、独立无二标题 & 差异化定位
Financial Calculator Pro — 全场景专业金融计算器 | 货币时间价值・现金流・债券・折旧・统计・实盘联动・高精度计算引擎
核心定位
对标BA II Plus/HP 12C专业金融计算器,全功能复刻 + 数字化增强 + OpenClaw 生态打通,面向 CFA/FRM/CPA 考生、投研、风控、会计、银行从业者,提供TVM、NPV/IRR、债券定价、久期、折旧、摊销、统计、汇率、杠杆、风控指标全维度专业计算,支持批量计算、历史回溯、结果导出、策略联动、Web/CLI 双端,替代硬件计算器,深度对接Finance、Backtest Expert、Stock Monitor全链路。
独家改造特色(区别传统硬件 / 普通计算器)
- 专业级全功能复刻 + 增强 完全覆盖 BA II Plus Pro 全部功能:TVM 货币时间价值、NPV/IRR/MIRR、债券定价 / 久期 / 凸性、摊销、6 种折旧、现金流、统计、利率转换、盈亏平衡、日期计算;扩展波动率、夏普比率、最大回撤、杠杆倍数、融资成本、期权定价等量化指标。
- 无限现金流 + 高频计算 支持无限笔不规则现金流(硬件仅 32 笔)、多周期复利、连续复利、年化转换、动态滑点 / 费率拟合,适配实盘交易场景。
- 高精度 + 全维度风控指标 15 位高精度浮点,无精度丢失;内置夏普、卡尔玛、波动率、VaR、回撤、胜率、盈亏比、风险敞口,直接对接策略回测风控。
- 批量 / 情景对比 + 历史回溯 一键批量计算多利率、多期限、多现金流组合;支持情景 A/B/C 对比、历史参数回溯、结果热力图,替代 Excel 复杂公式。
- OpenClaw 全生态深度联动 计算结果直接输出给Backtest Expert做策略参数、Finance因子计算、Stock Monitor标的监控、Remotion生成动态计算视频、WeChat MP CN自动分发研报。
- Web 可视化 + CLI 双端 + 离线可用 Web 交互式大屏(双行显示、引导式输入)、CLI 命令行极速计算、离线本地引擎,数据不泄露、响应毫秒级。
- 自定义公式 + 插件扩展 支持自定义金融公式、函数库、批量脚本,热加载扩展,无需改源码。
- 全格式导出 + 审计日志 结果导出Excel/CSV/PDF/JSON;完整计算日志、参数记录、版本回溯,适配合规审计。
二、传统计算器痛点
- ❌ 硬件局限:32 笔现金流上限、屏幕小、无法导出、无法批量、无法联动
- ❌ 功能残缺:普通计算器无债券久期、折旧、MIRR、风控指标、量化因子
- ❌ 精度不足:浮点精度低,复利 / 折现长期误差大
- ❌ 生态孤立:无法对接行情、回测、分析工具,数据需手动复制
- ❌ 效率低下:单任务、无法批量、无法情景对比、无历史记录
三、核心功能模块(全专业覆盖)
1. 货币时间价值 TVM(核心)
- PV 现值、FV 终值、PMT 年金、N 期数、I/Y 利率
- 年金:普通年金 / 预付年金 / 永续年金
- 复利:年 / 季 / 月 / 日 / 连续复利、年化利率转换
- 贷款 / 房贷 / 抵押:月供、总利息、剩余本金
2. 现金流分析(CFA/FRM 核心)
- NPV 净现值、IRR 内部收益率、MIRR 修正内部收益率、NFV 净终值
- 无限笔不规则现金流、频率复利、现金流编辑 / 插入 / 删除
- 回收期、折现回收期
3. 债券定价与固定收益
- 债券价格、到期收益率 YTM、修正久期、凸性、应计利息
- 票面利率、交割日、到期日、天数计算(30/360、实际 / 实际)
4. 摊销与折旧
- 贷款摊销表:每期本金 / 利息 / 剩余本金、完整摊销计划导出
- 6 种折旧:直线法、双倍余额递减、年数总和、产量法等
5. 统计与回归
- 单 / 双变量统计:均值、标准差、方差、相关系数
- 回归:线性 / 对数 / 指数 / 幂回归、预测值
6. 专业金融 & 风控指标
- 波动率、夏普比率、卡尔玛比率、最大回撤、胜率、盈亏比
- 杠杆倍数、融资利率、保证金、爆仓价、VaR 风险值
- 市盈率、市净率、PEG、EV/EBITDA、ROE、ROA
7. 辅助工具
- 利率转换:名义↔实际、APR↔EAR
- 日期计算、天数差、盈亏平衡、利润率、汇率换算
- 批量计算、情景对比、历史记录、导出
四、项目目录结构
plaintext
financial-calculator-pro/
├── config/ # 全局配置、精度、税率、默认参数
├── core/ # 计算内核:TVM、现金流、债券、折旧、统计
├── modules/ # 功能模块、批量计算、情景对比、导出
├── web/ # Web前端、交互式计算器、双行显示
├── cli/ # 命令行入口、极速计算脚本
├── utils/ # 精度控制、日志、历史记录、导出工具
├── api/ # FastAPI接口、OpenClaw对接
├── test/ # 精度测试、对标BA II Plus
├── requirements.txt # 依赖
└── main.py # 入口
五、完整二次开发代码(可直接部署)
1. requirements.txt
txt
# 核心计算
numpy>=1.24.0
scipy>=1.10.0
pandas>=2.0.0
# Web
fastapi>=0.104.0
uvicorn>=0.24.0
streamlit>=1.28.0
# 导出
openpyxl>=3.1.0
reportlab>=4.0.0
# 工具
loguru>=0.7.2
python-dotenv>=1.0.0
2. config/settings.py
python
运行
import os
from dotenv import load_dotenv
load_dotenv()
# 精度设置(对标专业计算器)
PRECISION = 15
ROUND_DECIMALS = 6
# 默认参数
DEFAULT_RATE = 0.05
DEFAULT_PERIODS = 10
DEFAULT_COMPOUND = 12 # 月复利
# API
API_HOST = "0.0.0.0"
API_PORT = 8110
# 导出路径
EXPORT_DIR = "./export"
3. core/tvm.py(货币时间价值内核)
python
运行
import numpy_financial as nufin
from config.settings import PRECISION
class TVMCalculator:
@staticmethod
def pv(rate, nper, pmt, fv=0, due=0):
"""现值 PV"""
return round(nufin.pv(rate, nper, pmt, fv, due), PRECISION)
@staticmethod
def fv(rate, nper, pmt, pv=0, due=0):
"""终值 FV"""
return round(nufin.fv(rate, nper, pmt, pv, due), PRECISION)
@staticmethod
def pmt(rate, nper, pv, fv=0, due=0):
"""年金 PMT"""
return round(nufin.pmt(rate, nper, pv, fv, due), PRECISION)
@staticmethod
def nper(rate, pmt, pv, fv=0, due=0):
"""期数 N"""
return round(nufin.nper(rate, pmt, pv, fv, due), PRECISION)
@staticmethod
def rate(nper, pmt, pv, fv=0, due=0):
"""利率 I/Y"""
return round(nufin.rate(nper, pmt, pv, fv, due), PRECISION)
@staticmethod
def compound_rate(nominal_rate, periods):
"""名义→实际利率 EAR"""
return round((1 + nominal_rate/periods)**periods - 1, PRECISION)
tvm = TVMCalculator()
4. core/cashflow.py(NPV/IRR/MIRR 内核)
python
运行
import numpy_financial as nufin
import numpy as np
from config.settings import PRECISION
class CashFlowCalculator:
@staticmethod
def npv(rate, cashflows):
"""净现值 NPV(支持无限现金流)"""
return round(nufin.npv(rate, cashflows), PRECISION)
@staticmethod
def irr(cashflows):
"""内部收益率 IRR"""
return round(nufin.irr(cashflows), PRECISION)
@staticmethod
def mirr(cashflows, rate, reinvest_rate=None):
"""修正内部收益率 MIRR"""
if reinvest_rate is None:
reinvest_rate = rate
return round(nufin.mirr(cashflows, rate, reinvest_rate), PRECISION)
@staticmethod
def payback(cashflows):
"""回收期"""
cum = np.cumsum(cashflows)
for i, val in enumerate(cum):
if val >= 0:
return round(i + 1 - cum[i-1]/cashflows[i], PRECISION) if i>0 else 0
return None
cf = CashFlowCalculator()
5. core/bond.py(债券 / 久期 / 凸性)
python
运行
import numpy as np
from config.settings import PRECISION
class BondCalculator:
@staticmethod
def bond_price(face, coupon_rate, ytm, years, freq=2):
"""债券定价"""
coupon = face * coupon_rate / freq
periods = years * freq
price = 0
for t in range(1, periods+1):
price += coupon / (1 + ytm/freq)**t
price += face / (1 + ytm/freq)**periods
return round(price, PRECISION)
@staticmethod
def modified_duration(face, coupon_rate, ytm, years, freq=2):
"""修正久期"""
coupon = face * coupon_rate / freq
periods = years * freq
dur = 0
for t in range(1, periods+1):
pv = coupon / (1 + ytm/freq)**t
dur += t * pv
dur += periods * face / (1 + ytm/freq)**periods
price = BondCalculator.bond_price(face, coupon_rate, ytm, years, freq)
return round(dur / price / freq, PRECISION)
bond = BondCalculator()
6. core/risk_metrics.py(风控 / 量化指标)
python
运行
import numpy as np
from config.settings import PRECISION
class RiskCalculator:
@staticmethod
def sharpe_ratio(returns, risk_free=0.03):
"""夏普比率"""
mean_ret = np.mean(returns)
std_ret = np.std(returns)
return round((mean_ret - risk_free) / std_ret * np.sqrt(252), PRECISION)
@staticmethod
def max_drawdown(prices):
"""最大回撤"""
peak = np.maximum.accumulate(prices)
drawdown = (prices - peak) / peak
return round(np.min(drawdown), PRECISION)
@staticmethod
def volatility(returns, annual=252):
"""年化波动率"""
return round(np.std(returns) * np.sqrt(annual), PRECISION)
risk = RiskCalculator()
7. api/route.py(FastAPI 接口 + OpenClaw 对接)
python
运行
from fastapi import FastAPI, Query
from core.tvm import tvm
from core.cashflow import cf
from core.bond import bond
from core.risk_metrics import risk
app = FastAPI(title="Financial Calculator Pro — 高级金融计算器")
# TVM
@app.get("/tvm/pv")
def pv(rate: float, nper: int, pmt: float, fv: float=0):
return {"pv": tvm.pv(rate, nper, pmt, fv)}
@app.get("/tvm/fv")
def fv(rate: float, nper: int, pmt: float, pv: float=0):
return {"fv": tvm.fv(rate, nper, pmt, pv)}
# 现金流
@app.get("/cashflow/npv")
def npv(rate: float, cashflows: str):
cf_list = [float(x) for x in cashflows.split(",")]
return {"npv": cf.npv(rate, cf_list)}
@app.get("/cashflow/irr")
def irr(cashflows: str):
cf_list = [float(x) for x in cashflows.split(",")]
return {"irr": cf.irr(cf_list)}
# 债券
@app.get("/bond/price")
def bond_price(face: float=1000, coupon: float=0.05, ytm: float=0.06, years: int=10):
return {"price": bond.bond_price(face, coupon, ytm, years)}
# 风控
@app.get("/risk/sharpe")
def sharpe(returns: str, rf: float=0.03):
ret_list = [float(x) for x in returns.split(",")]
return {"sharpe": risk.sharpe_ratio(ret_list, rf)}
@app.get("/health")
def health():
return {"service": "Financial Calculator Pro", "status": "running"}
8. cli/calculate.py(命令行极速计算)
python
运行
import argparse
from core.tvm import tvm
from core.cashflow import cf
parser = argparse.ArgumentParser(description="Financial Calculator Pro CLI")
parser.add_argument("func", choices=["pv","fv","pmt","npv","irr"])
parser.add_argument("args", nargs="*", type=float)
if __name__ == "__main__":
args = parser.parse_args()
if args.func == "pv":
print(tvm.pv(*args.args))
elif args.func == "fv":
print(tvm.fv(*args.args))
elif args.func == "npv":
print(cf.npv(args.args[0], args.args[1:]))
elif args.func == "irr":
print(cf.irr(args.args))
9. web/app.py(Streamlit Web 交互式界面)
python
运行
import streamlit as st
from core.tvm import tvm
from core.cashflow import cf
from core.bond import bond
st.set_page_config(page_title="Financial Calculator Pro", layout="wide")
st.title("💰 Financial Calculator Pro — 高级金融计算器")
tab1, tab2, tab3, tab4 = st.tabs(["TVM货币时间价值","现金流NPV/IRR","债券定价","风控指标"])
with tab1:
st.subheader("TVM 现值/终值/年金")
col1,col2=st.columns(2)
rate=col1.number_input("年利率",0.0,1.0,0.05)
nper=col2.number_input("期数",1,100,10)
pmt=col1.number_input("年金",0.0,1000000.0,1000.0)
pv=col2.number_input("现值",0.0,1000000.0,0.0)
if st.button("计算 FV"):
st.success(f"终值 FV = {tvm.fv(rate,nper,pmt,pv):.6f}")
with tab2:
st.subheader("现金流 NPV/IRR")
rate=st.number_input("折现率",0.0,1.0,0.05)
cashflows=st.text_input("现金流(逗号分隔)", "-1000,200,300,400,500")
cf_list=[float(x) for x in cashflows.split(",")]
if st.button("计算 NPV/IRR"):
st.success(f"NPV = {cf.npv(rate,cf_list):.6f} | IRR = {cf.irr(cf_list):.6f}")
with tab3:
st.subheader("债券定价")
face=st.number_input("面值",100,10000,1000)
coupon=st.number_input("票面利率",0.0,1.0,0.05)
ytm=st.number_input("到期收益率",0.0,1.0,0.06)
years=st.number_input("期限",1,30,10)
if st.button("计算债券价格"):
st.success(f"债券价格 = {bond.bond_price(face,coupon,ytm,years):.6f}")
10. main.py(项目入口)
python
运行
import uvicorn
from api.route import app
from config.settings import API_HOST, API_PORT
from utils.logger import get_logger
logger = get_logger()
if __name__ == "__main__":
logger.info("Financial Calculator Pro 启动成功")
uvicorn.run(app, host=API_HOST, port=API_PORT)
六、特色改造落地说明
- 专业硬件全复刻 + 量化增强 1:1 复刻 BA II Plus Pro 全部金融函数,新增夏普、波动率、回撤、杠杆、融资成本等量化指标,15 位高精度,对标专业硬件。
- 无限现金流 + 批量情景计算 突破硬件 32 笔现金流限制,支持无限笔不规则现金流;批量多利率 / 多期限 / 多情景对比,一键生成结果表。
- OpenClaw 全链路打通 计算结果直接输出给Backtest Expert策略参数、Finance因子、Stock Monitor监控、Remotion视频、WeChat MP CN研报分发。
- Web+CLI 双端 + 离线引擎 Web 交互式大屏(双行显示、引导输入)、CLI 极速计算、本地离线引擎,毫秒响应、数据安全。
- 自定义公式 + 插件扩展 支持自定义金融公式、函数库、脚本批量计算,热加载扩展,无需改源码。
- 审计日志 + 全格式导出 完整计算日志、参数回溯、版本记录;导出Excel/CSV/PDF/JSON,适配合规审计。
七、使用示例
1. 启动服务
bash
运行
python main.py
# Web: http://127.0.0.1:8501
# API: http://127.0.0.1:8110
2. CLI 命令行
bash
运行
# 计算FV
python cli/calculate.py fv 0.05 10 1000
# 计算NPV
python cli/calculate.py npv 0.05 -1000 200 300 400 500
3. API 调用
plaintext
http://127.0.0.1:8110/tvm/fv?rate=0.05&nper=10&pmt=1000
八、二次开发拓展方向
- 完整折旧 / 摊销表生成 + 导出
- 期权定价(BS 模型)、希腊值、期货定价
- CFA/FRM 考试模式、题库集成、公式记忆
- 多语言、暗色模式、皮肤自定义
- 本地历史记录云端同步、团队共享计算模板
- 对接实盘交易 API,一键计算交易参数、保证金、爆仓价