一个零运行时依赖的静态投资计算工具,包含固定收益估算、指数历史定投回测、多指数对比、场内 ETF 历史溢价追踪和随手可用的涨跌幅速算,可直接部署到 Cloudflare Workers 静态资源托管。
在线体验: https://dca-calculator.mrhanlu224.workers.dev/
- 首次投入的底仓从投资开始时参与复利
- 每月定投资金默认按月初投入
- 年化收益率转换为等效月化收益率并按月复利
- 年管理费率转换为等效月费率并按月扣除
- 展示总本金、期末金额、累计收益、总收益率和累计管理费
- 展示逐年本金、资产、收益和累计管理费明细
- 响应式布局,适配桌面和手机
- 使用价格指数月末收盘数据回测历史定投
- 内置 6 个常用指数,覆盖美国宽基、科技和中国大中盘、科创板
- 支持在共同月份中对比多个指数的标准化累计表现、历史回撤和年化波动
- 通过注册表扩展新指数,不需要修改回测页面或计算引擎
- 页面展示数据来源和数据截止日期
- 追踪标普 500 与纳斯达克 100 场内 ETF 的历史溢价,可切换 1 个月、3 个月、1 年和全部区间
- 展示最新溢价、历史分位数和 P10/P25/中位数/P75/P90,并标记同组当前溢价较低的 ETF
- ETF 采用注册表驱动,后续增加同类 ETF 无需修改页面逻辑
- 四个页面均提供右下角悬浮涨跌幅速算,桌面端使用悬浮面板,手机端使用底部抽屉
- 涨跌幅速算支持金额、价格和指数点位,数值最多显示 4 位小数,百分比固定显示 2 位小数
- 最近 5 次涨跌幅计算保存在当前设备,支持点击记录回填和一键清空
| 页面 | 路径 | 用途 |
|---|---|---|
| 固定收益估算 | / |
按固定年化收益率和管理费率估算定投结果 |
| 历史指数回测 | /backtest/ |
使用指数月末历史数据回测一笔底仓加每月定投 |
| 指数对比 | /compare/ |
对比多个指数的累计表现、回撤和波动 |
| ETF 溢价 | /etf-premium/ |
查看标普 500 与纳斯达克 100 场内 ETF 的历史溢价和分位数 |
任意页面右下角的 % 按钮都可以打开涨跌幅速算。输入起始数值和当前数值后,点击“计算涨跌幅”或按回车即可得到数值变化和百分比变化。
最近 5 次成功计算使用浏览器 localStorage 保存在当前设备,不会上传到服务器。连续进行完全相同的计算时不会重复添加记录。
推荐在项目目录启动本地静态服务器:
python3 -m http.server 4173 --directory public然后访问 http://localhost:4173。
可访问以下页面:
- 固定收益估算:
http://localhost:4173/ - 历史指数回测:
http://localhost:4173/backtest/ - 指数对比:
http://localhost:4173/compare/ - ETF 溢价:
http://localhost:4173/etf-premium/
项目使用静态数据,网站运行时不请求第三方行情接口。指数月度数据和 ETF 日度数据需要更新时手动执行:
npm run data:update
npm run data:checknpm run data:update 会依次更新指数和 ETF;也可使用 npm run data:update:index 或 npm run data:update:etf 单独更新。更新后提交 public/data/ 下发生变化的文件即可。
- 指数 CSV 导入和扩展方法见 指数历史数据维护文档
- ETF 免费数据源、CSV 兜底和注册表扩展方法见 ETF 溢价数据维护文档
当前内置:标普500、纳斯达克100、沪深300、中证500、中证A500和科创50。
运行计算和数据测试:
npm test将仓库推送到 GitHub 后,在 Cloudflare 的 Workers & Pages 中选择 Pages,并导入该 GitHub 仓库。
构建设置:
| 配置项 | 值 |
|---|---|
| Production branch | main |
| Build command | exit 0 |
| Build output directory | public |
Cloudflare Pages 会在每次推送到 main 后自动部署,并为 Pull Request 创建预览环境。历史数据也是普通静态文件,不需要配置 D1、R2 或 Pages Functions。
涨跌幅速算采用:
数值变化 = 当前数值 - 起始数值
涨跌幅 = (当前数值 - 起始数值) / 起始数值 × 100%
起始数值必须大于 0,当前数值不能小于 0。
ETF 页面展示的是相对上一已公布基金净值的历史溢价,不是盘中 IOPV 溢价:
历史溢价率 = (ETF 当日收盘价 / 交易日前最近一次已公布单位净值 - 1) × 100%
净值日期必须早于交易日;两者相隔超过 7 个自然日的数据会被剔除。该指标适合比较同一组 ETF 在历史中的相对位置,但不代表次日实时溢价,也不构成交易建议。
固定收益估算的月化收益率采用以下方式从年化收益率换算:
月化收益率 = (1 + 年化收益率)^(1/12) - 1
等效月管理费率采用:
月管理费率 = 1 - (1 - 年管理费率)^(1/12)
底仓在第 0 个月投入;每月定投在月初发生。每月先计算投资收益,再从当期资产中扣除管理费;累计管理费为投资期内每月实际扣费之和。若使用的收益率已经扣除管理费,应将管理费率设为 0,避免重复扣费。计算结果是固定收益率假设下的估算,不代表实际投资回报。