# etf-dashboard **Repository Path**: smallraise/etf-dashboard ## Basic Information - **Project Name**: etf-dashboard - **Description**: No description available - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2026-06-05 - **Last Updated**: 2026-07-06 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README ## A股数据看板 — 市场情报可视化系统 基于 React + FastAPI 构建的 A 股市场数据可视化平台,集成宽基 ETF 监控、连板梯队分析和 AI 智能复盘三大核心模块。暗色科技风主题,数据实时刷新,响应式布局适配桌面和移动端。 --- ### 快速启动 #### 环境要求 | 依赖 | 最低版本 | 说明 | |------|---------|------| | Python | 3.10+ | 后端运行环境 | | Node.js | 18+ | 前端构建工具链 | | pip | 最新版 | Python 包管理 | | npm | 8+ | Node 包管理 | #### 第一步:安装后端依赖 ```bash pip install fastapi uvicorn akshare pandas ``` #### 第二步:安装前端依赖 ```bash npm install ``` #### 第三步:启动后端服务 ```bash python server/main.py ``` 后端启动后访问 `http://localhost:8000`,API 文档自动生成在 `http://localhost:8000/docs`。 #### 第四步:启动前端开发服务器 新开一个终端窗口: ```bash npm run dev ``` Vite 会在 `http://localhost:5173`(或下一个可用端口)启动开发服务器。打开浏览器访问该地址即可使用。 > **提示:** 如果你的系统配置了代理(如 Clash),后端代码开头已内置了代理绕过逻辑(`NO_PROXY=*`),通常无需额外配置。如遇网络问题,请确保代理工具允许 localhost 直连。 --- ### 功能模块 #### 1. 宽基 ETF 监控 监控 8 只核心宽基 ETF 的量价走势,并自动检测国家队操作信号。 **监控标的:** 上证50、沪深300、中证500、中证1000、创业板指、科创50、中证800、创业板50 **核心功能:** - 日 K 收盘价走势叠加图,支持 1M / 3M / 6M / 1Y / 全部五档时间周期切换 - 各 ETF 日成交额柱状图,可切换查看不同标的 - 量价信号自动检测:吸筹(放量滞跌)、出货(放量暴涨)、突破(极端放量) - 信号时间线面板,按日期倒序展示近期预警 - ETF 份额/规模快照卡片 - 自由开关任意 ETF 的显示/隐藏 **信号检测算法:** 以 20 日成交量均线为基准,量比超过 2.5 倍视为异常放量,结合价格变动方向(±2% 横盘 / >3% 大涨)判定信号类型。 #### 2. 连板梯队 每日涨停板的结构化展示,按连板高度分层,统计行业分布和历史趋势。 **核心功能:** - 今日最高板数醒目展示 - 涨停梯队分层视图(首板 → N 板),高位股标注 - 每只涨停股显示:名称、代码、所属行业、价格、首次封板时间 - 涨停行业分布 TOP12 横向柱状图 - 每日最高连板数趋势图(折线 + 面积叠加) - 支持刷新和日期切换 **数据来源:** 东方财富涨停池 API(`stock_zt_pool_em`),数据保留约 15 个交易日,趋势采用逐日回扫策略获取。 #### 3. AI 复盘总参谋 基于量价行为模型和情绪周期引擎,自动生成结构化市场复盘报告。 **情绪周期引擎:** - 综合评分 0-100:涨跌停家数比、炸板率、连板溢价率、成交量水位 - 五阶段判定:冰点期 → 混沌期 → 修复期 → 高潮期 → 过热期 - ECharts 仪表盘可视化情绪温度计 - 六项核心指标卡片:涨停数、跌停数、炸板率、量比、连板溢价、成交额 **量价行为识别:** 扫描全部宽基 ETF 日线数据,检测四种经典量价结构: | 模式 | 触发条件 | 市场含义 | |------|---------|---------| | 停止行为 | 连跌后放量但价格不跌 | 潜在主力承接 | | 无供应测试 | 上涨回调中成交量极度萎缩 | 抛压枯竭,洗盘尾声 | | 派发特征 | 高位巨量震荡但重心不上移 | 主力出货迹象 | | 拉升信号 | 放量突破,价格加速上行 | 趋势确认 | **ECharts K 线主图:** 蜡烛图 + 成交量柱状图双轴联动,AI 识别的量价行为以菱形/三角/方块标记直接渲染在图表上,支持滑动缩放和 6 只 ETF 切换。 **资金流向桑基图:** 基于 ETF 量价数据推算板块资金净流入,叠加涨停行业热度,以桑基图展示主力资金和游资/散户在各板块间的博弈流向。 **AI 复盘报告:** 聚合所有分析数据,自动生成包含市场总结、量价行为解读、资金流向分析和风险提示的结构化报告。 --- ### 项目结构 ``` etf-dashboard/ ├── server/ │ └── main.py # FastAPI 后端,所有 API 端点 ├── src/ │ ├── main.jsx # React 应用入口 │ ├── App.jsx # 主布局:侧边栏导航 + 页面路由 │ ├── ETFMonitor.jsx # 宽基 ETF 监控页面 │ ├── LianBanLadder.jsx # 连板梯队页面 │ ├── AIReview.jsx # AI 复盘页面(ECharts 可视化) │ ├── index.css # 全局样式:暗色主题、动画、组件 │ └── App.css # 应用级样式 ├── index.html # HTML 入口(加载 Google Fonts) ├── vite.config.js # Vite 构建配置 ├── tailwind.config.js # Tailwind CSS 主题配置 ├── postcss.config.js # PostCSS 配置 ├── package.json # Node 依赖 └── README.md # 本文档 ``` --- ### 技术栈 **前端:** React 19 + Vite 8 + Tailwind CSS 3 + Recharts 3 + ECharts 6 **后端:** Python 3 + FastAPI + AKShare + Pandas **数据源:** 新浪财经(ETF 日线数据)、东方财富(涨停池数据) **字体:** Outfit(UI 文本)+ JetBrains Mono(数字/代码) --- ### API 接口文档 后端启动后访问 `http://localhost:8000/docs` 可查看交互式 Swagger UI。以下是所有端点: #### ETF 数据 | 端点 | 说明 | |------|------| | `GET /api/etf/config` | ETF 配置信息(代码、名称、颜色) | | `GET /api/etf/prices` | 历史收盘价(支持 daily/weekly/monthly) | | `GET /api/etf/daily` | 日频完整数据(收盘价 + 成交额 + 成交量) | | `GET /api/etf/volume` | 成交额数据(按月聚合,单位亿元) | | `GET /api/etf/scale` | ETF 份额/规模快照 | | `GET /api/etf/signals` | 量价信号检测(吸筹/出货/突破) | #### 连板梯队 | 端点 | 说明 | |------|------| | `GET /api/zt/today` | 当日连板梯队 | | `GET /api/zt/trend` | 最高连板数历史趋势 | | `GET /api/zt/history` | 指定日期的连板快照 | #### AI 复盘 | 端点 | 说明 | |------|------| | `GET /api/ai/sentiment` | 情绪周期引擎(评分 0-100 + 阶段判定) | | `GET /api/ai/volume-price` | 量价行为识别(停止/无供应/派发/拉升) | | `GET /api/ai/fund-flow` | 板块资金流向 + 桑基图数据 | | `GET /api/ai/kline` | 带量价标记的 K 线数据(参数: symbol, start_date) | | `GET /api/ai/report` | AI 复盘报告(聚合所有数据) | --- ### 已知限制与注意事项 **数据源限制:** 东方财富 API 在部分网络环境下可能被封锁(返回 RemoteDisconnected)。ETF 历史数据使用新浪财经源,稳定性较好。涨停池数据依赖东方财富,如遇问题可检查网络连通性。 **数据保留期:** 涨停池 API 仅保留约 15 个交易日的数据,更久远的历史趋势通过逐日回扫获取,首次加载较慢。 **缓存策略:** 大部分接口采用 30 分钟缓存,趋势数据 2 小时缓存,交易日查询 4 小时缓存。点击页面刷新按钮可强制更新。 **AI 复盘报告:** 当前使用规则引擎和模板化生成,未接入大语言模型。如需接入 OpenAI 或本地 Ollama,可扩展 `/api/ai/report` 端点。 --- ### 生产部署 ```bash # 构建前端静态文件 npm run build # 将 dist/ 目录部署到任意静态托管服务(Nginx、Vercel、Cloudflare Pages 等) # 后端使用 uvicorn 启动,建议配合 systemd 或 Docker 做进程管理 uvicorn server.main:app --host 0.0.0.0 --port 8000 ``` 生产环境中建议将前端 `API` 常量改为相对路径或通过环境变量配置,并在 Nginx 层做反向代理将 `/api` 请求转发到后端。