Skip to content

windmilla820/fund-visualization

Repository files navigation

公募基金可视化平台

基于财新数据(CXDA)API 的公募基金数据可视化 Web 应用,支持基金搜索、净值走势、收益对比、K 线行情、资产配置、重仓股票等多维度分析。


功能概览

1. 基金搜索

  • 支持按基金代码(如 000001)或基金名称(如 华夏)搜索
  • 搜索结果展示基金名称、代码、类型
  • 提供热门基金快捷入口:华夏成长、易方达中小盘、沪深300ETF、白酒指数

2. 净值走势图

  • 展示单位净值与累计净值双轴折线图
  • 支持自定义日期范围查询
  • 快捷选择:近 30 天 / 90 天 / 180 天 / 1 年
  • 底部滑动条支持区间缩放

3. 收益对比

  • 多周期收益对比柱状图:近 1 周 / 近 1 月 / 近 1 季 / 近 1 年
  • 同时展示净值增长率与收益率
  • 涨跌颜色区分(红涨绿跌)

4. K 线行情

  • 标准 K 线图(开盘、收盘、最高、最低)
  • 下方成交量柱状图联动
  • 支持时间范围筛选
  • 仅上市基金(如 ETF)支持此功能

5. 资产配置

  • 饼图:各类资产占净值比例
  • 柱状图:各类资产市值分布
  • 自动过滤占比极低的类别,避免图表杂乱

6. 重仓股票

  • 水平柱状图展示前 10 大重仓股
  • 显示股票名称、代码、占净值比例、市值

7. 基金指数

  • 支持搜索基金指数
  • 多周期走势切换:周 / 月 / 季 / 年
  • 展示收盘价、最高价、最低价

8. 其他功能

  • 主题切换:支持亮色 / 暗色主题,偏好本地持久化
  • 响应式布局:适配桌面和移动端
  • 加载状态:数据请求时展示 loading 动画
  • 空数据处理:API 无数据或失败时显示友好提示

查询日志系统

所有用户操作和 API 调用均被记录,支持双写存储。

存储位置

类型 路径 说明
JSON 日志 logs/query_log.jsonl 每行一条 JSON,方便文本查看
SQLite 数据库 logs/query_log.db 结构化存储,支持 SQL 查询分析

记录的 API 调用

每次后端 API 请求自动记录:

字段 说明
ts 时间戳
method 请求方法(GET/POST)
path 接口路径
query_args 请求参数
api_skill 对应的财新 API skill 名
fund_code 基金代码
status_code 响应状态码
duration_ms 耗时(毫秒)
error 错误信息

记录的前端用户行为

动作标识 说明
search 搜索基金
select_fund 从搜索结果选择基金
quick_select 点击热门基金快捷按钮
switch_tab 切换图表标签页
nav_range 净值图切换时间范围
kline_range K 线图切换时间范围
index_search 搜索基金指数
toggle_theme 切换主题

SQLite 查询示例

-- 查看最近 20 条 API 调用
SELECT ts, path, api_skill, fund_code, status_code, duration_ms
FROM api_log ORDER BY id DESC LIMIT 20;

-- 统计各接口调用次数
SELECT api_skill, COUNT(*) as cnt, AVG(duration_ms) as avg_ms
FROM api_log WHERE api_skill IS NOT NULL
GROUP BY api_skill ORDER BY cnt DESC;

-- 查看用户行为分布
SELECT action, COUNT(*) as cnt
FROM user_action_log GROUP BY action ORDER BY cnt DESC;

-- 查看某天的操作记录
SELECT * FROM user_action_log WHERE ts LIKE '2026-05-24%';

调用的财新 API(Skill)

接口路由 财新 Skill 用途
/api/fund/search getDFundBasicInfoByCond-G 基金基本信息查询
/api/fund/nav getDFundNetValByCond-G 基金净值数据
/api/fund/performance getFundNvPerfWeekByCond-G 周收益表现
/api/fund/performance getFundNvPerfMonthByCond-G 月收益表现
/api/fund/performance getFundNvPerfQtrByCond-G 季度收益表现
/api/fund/performance getFundNvPerfYearByCond-G 年度收益表现
/api/fund/kline getFundDayQuoByCond-G 上市基金日行情
/api/fund/asset-alloc getDFundPfAssetAlloc1ByCond-G 资产配置
/api/fund/stock-holding getDFundPfStkAlloc1ByCond-G 重仓股票持仓
/api/index/search getIndCodeInfo3ByCond-G 基金指数信息
/api/index/trend getFundIndexMarWeekByCond-G 指数周行情
/api/index/trend getFundIndexMarMonthByCond-G 指数月行情
/api/index/trend getFundIndexMarQtrByCond-G 指数季行情
/api/index/trend getFundIndexMarYearByCond-G 指数年行情
/api/fund/market-perf getDFundMarFerfByCond-G 上市基金多周期行情

数据来源:财新数据 CXDA(http://cxapi.ccxe.com.cn/cxda)


技术架构

┌─────────────┐     ┌──────────────┐     ┌──────────────┐     ┌──────────────┐
│   浏览器     │────→│    Nginx     │────→│   Gunicorn   │────→│  Flask App   │
│  ECharts    │     │  (反向代理)   │     │  (WSGI服务器) │     │  (Python)    │
└─────────────┘     └──────────────┘     └──────────────┘     └──────┬───────┘
                                                                     │
                                              ┌──────────────────────┼──────────────┐
                                              ↓                      ↓              ↓
                                     ┌──────────────┐    ┌───────────────┐  ┌──────────────┐
                                     │ cxda_client  │    │ query_logger  │  │  mock_data   │
                                     │ (财新API对接) │    │ (日志记录)     │  │ (模拟数据)    │
                                     └──────────────┘    └───────────────┘  └──────────────┘

技术栈

层级 技术
前端 HTML5 + CSS3 + JavaScript (ES6+) + ECharts
后端 Python + Flask
生产服务器 Gunicorn (WSGI) + systemd
数据源 财新数据 CXDA REST API
日志存储 SQLite + JSONL 文件
部署环境 阿里云 ECS (CentOS)

项目结构

fund-visualization/
├── app.py                  # Flask 主应用(路由、API 中间件)
├── cxda_client.py          # 财新 API 客户端(认证、请求、解码)
├── mock_data.py            # 模拟数据生成器
├── query_logger.py         # 查询日志模块(SQLite + JSONL 双写)
├── deploy.sh               # 一键部署脚本
├── requirements.txt        # Python 依赖
├── .env                    # 环境变量配置(API KEY)
├── templates/
│   └── index.html          # 主页面模板
├── static/
│   ├── css/
│   │   └── style.css       # 样式(亮/暗主题)
│   └── js/
│       └── app.js          # 前端逻辑(图表渲染、交互、埋点)
└── logs/
    ├── query_log.jsonl     # JSON 行日志
    └── query_log.db        # SQLite 数据库

部署方案

本地开发

cd fund-visualization
pip install -r requirements.txt
python app.py
# 访问 http://127.0.0.1:5000

服务器部署(阿里云 ECS)

前置条件:阿里云 ECS 实例,CentOS/Ubuntu 系统

部署方式

  1. 通过 WinSCP 上传项目文件夹至服务器 /root/fund-visualization/
  2. 执行一键部署脚本:
 bash /root/fund-visualization/deploy.sh
  1. 阿里云安全组放行 5000 端口(TCP 入方向)

部署脚本自动完成

  • 检测并安装 Python3 环境
  • 创建虚拟环境并安装依赖
  • 配置 systemd 服务(开机自启 + 崩溃自动重启)
  • 开放防火墙端口
  • 启动服务并输出访问地址

服务管理命令

systemctl status fund-viz     # 查看状态
systemctl restart fund-viz    # 重启
systemctl stop fund-viz       # 停止
journalctl -u fund-viz -f     # 实时日志

与现有网站共存

本应用使用独立端口(5000),与现有 80 端口的网站互不影响:

应用 端口 地址
现有网站 80 http://你的服务器IP
基金可视化平台 5000 http://你的服务器IP:5000

配置说明

环境变量(.env)

# 财新数据 API 密钥(必填)
CXDA_USER_KEY=你的API密钥

# API 基础地址
BASE_URL=http://cxapi.ccxe.com.cn/cxda

# Token 缓存(自动管理,请勿手动修改)
AUTH_TOKEN=
AUTH_TOKEN_EXPIRE=
  • 配置了 CXDA_USER_KEY → 使用财新真实数据
  • 未配置 → 自动降级为模拟数据模式

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors