Skip to content

ertuil/fundviewer

Repository files navigation

FundViewer (version 3)

这个世界不能没有"基金估值"。一个保留基金估值功能的自选基金看板。

支持自选基金列表、基金实时估值、基金详情分享、基金持仓查看、历史净值走势图等功能。

V3 新特性

  • 全面异步并发 — 数据采集层并发优化,基金详情 6 源并行、实时估值 5 因子并行
  • 📈 ECharts 图表 — 今日估值趋势图、历史净值走势图(支持 1月/3月/6月/1年/全部切换)
  • 🏗️ 模块化架构data_sources/ 按领域拆分(指数/基金/持仓/股票/债券),取代原有的 1922 行单文件
  • 💾 持久化缓存 — 内存 + 磁盘双层缓存,进程重启不丢失
  • 🌐 Vue 3 SPA 前端 — 骨架屏加载、30 秒自动轮询、分块渲染,页面响应更快
  • 🔌 API 兼容/api/v1/* 接口完全保留,新增 /api/v2/* 优化接口

技术栈

层面 技术
后端框架 FastAPI + Uvicorn
数据采集 httpx (异步),akshare 1.18
缓存 内存 LRU-TTL + 磁盘 pickle 持久化
前端 Vue 3 + Vite + Pinia + Vue Router
图表 ECharts + vue-echarts
部署 Docker / Docker Compose

快速启动

方式一:Docker Compose(推荐)

docker compose up -d

方式二:本地开发

# 1. 安装依赖
uv sync

# 2. 构建前端
cd frontend && npm install && npm run build && cd ..

# 3. 启动服务
uv run python main.py

启动后访问 http://localhost:8600

配置

通过环境变量配置(或编辑 config.py):

变量 默认值 说明
host 0.0.0.0 监听地址
port 8600 监听端口
users admin:admin 用户列表(逗号分隔,每项 用户名:密码
max_favour 10 最大自选基金数量
base_url http://localhost:8600 部署域名(用于分享链接)

数据源

已验证可用的接口(共 13 个):

  • 东方财富 / 天天基金 — 指数、A股/港股/美股行情、基金净值、持仓、评级、申购信息
  • 雪球 / 蛋卷基金 — 基金详情(基金经理、历史业绩排名)
  • 中国债券信息网 — 中债新综合指数
  • 集思录 — 可转债等权指数

所有数据源均内置降级策略(fallback chain),单源故障不影响整体服务。

API 接口

v1(兼容旧版)

端点 说明
GET /api/v1/index 大盘指数
GET /api/v1/fund_info/{code} 基金基本信息
GET /api/v1/evaluate/{code} 基金实时估值
GET /api/v1/realtime 实时行情因子

v2(SPA 优化)

端点 说明
GET /api/v2/index 大盘指数(英文 camelCase)
GET /api/v2/fund/{code}/info 基金详情
GET /api/v2/fund/{code}/eval 实时估值(含持仓分解)
GET /api/v2/fund/{code}/hold 持仓明细
GET /api/v2/fund/{code}/nav-history 历史净值
GET /api/v2/market/overview 市场概览
GET /api/v2/admin/verify 数据源健康检查

测试

uv run pytest tests/ -v

演示截图

主页面看板 基金详情/估值看板

About

这个世界不能没有“基金估值”。一个保留基金估值功能的自选基金看板。

Topics

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors