FundQuant 基金量化助手 - 项目技术文档#
文档版本: v1.0
生成日期: 2026-04-16
维护状态: 活跃开发中
- 项目概述
- 系统架构
- 部署环境
- 项目结构
- 数据库设计
- 前端功能
- 后端API
- 核心模块
- 第三方服务
- 运维指南
- 备份恢复
1. 项目概述#
1.1 项目简介#
FundQuant 是一款基于 Flask 的基金量化助手系统,提供持仓管理、智能推荐、AI分析、飞书推送等功能。
1.2 访问信息#
2. 系统架构#
2.1 架构图#
┌─────────────────────────────────────────────────────────────┐
│ 用户浏览器 │
└─────────────────────────────────────────────────────────────┘
│
▼
┌─────────────────────────────────────────────────────────────┐
│ Nginx (443 SSL) │
│ ┌─────────────┐ ┌─────────────┐ ┌─────────────────────┐ │
│ │ / (前台) │ │ /api/ │ │ /admin/ │ │
│ │ → 8080 │ │ → 8080 │ │ → 8081 │ │
│ └─────────────┘ └─────────────┘ └─────────────────────┘ │
└─────────────────────────────────────────────────────────────┘
│
┌───────────────┴───────────────┐
▼ ▼
┌─────────────────────────┐ ┌─────────────────────────┐
│ Flask App (8080) │ │ Flask Admin (8081) │
│ 前台Web应用 │ │ 管理后台 │
│ - web_new.py │ │ - admin.py │
│ - 持仓展示 │ │ - 持仓管理 │
│ - 智能推荐 │ │ - AI模型配置 │
│ - AI分析报告 │ │ - 飞书推送 │
└─────────────────────────┘ │ - 系统设置 │
│ │ - 操作日志 │
└─────────────────┴─────────────────────────┘
│ │
▼ ▼
┌─────────────────────────────────────────────────────────────┐
│ MySQL 数据库 │
│ 主机: localhost | 端口: 3306 | 数据库: funds │
└─────────────────────────────────────────────────────────────┘
2.2 端口分配#
| 端口 | 服务 | 说明 |
|---|
| 80 | Nginx | HTTP 重定向到 HTTPS |
| 443 | Nginx | HTTPS 入口,SSL证书 |
| 8080 | Flask (web_new.py) | 前台Web应用 |
| 8081 | Flask (admin.py) | 管理后台 |
3. 部署环境#
3.1 服务器信息#
| 项目 | 信息 |
|---|
| 服务器IP | 42.192.112.148 |
| SSH端口 | 22 |
| SSH用户 | root |
| SSH密码 | Kylin123456@ |
3.2 基础软件#
| 软件 | 版本/说明 |
|---|
| 操作系统 | Linux |
| Python | 3.x (虚拟环境: venv) |
| Nginx | 反向代理 + SSL |
| MySQL | 5.7+/8.0 |
| SSL证书 | Let’s Encrypt |
3.3 Python依赖#
pyyaml>=6.0
requests>=2.28.0
flask>=2.3.0
pymysql>=1.0.0
4. 项目结构#
/www/wwwroot/funds.imoons.cn/
├── app/ # 前台Web应用
│ ├── web_new.py # 主应用 (端口8080)
│ ├── templates/
│ │ └── index.html # 前台页面
│ └── static/ # 静态资源
│
├── admin/ # 管理后台
│ ├── admin.py # 主应用 (端口8081)
│ ├── routes/ # 路由蓝图
│ │ ├── auth.py # 认证
│ │ ├── holdings.py # 持仓管理
│ │ ├── ai_models.py # AI模型配置
│ │ ├── feishu.py # 飞书推送
│ │ ├── api_manage.py # API管理
│ │ ├── settings.py # 系统设置
│ │ └── operation_logs.py # 操作日志
│ ├── services/ # 业务逻辑
│ ├── templates/ # 管理后台页面
│ │ ├── dashboard.html
│ │ ├── holdings.html
│ │ ├── ai_models.html
│ │ ├── feishu.html
│ │ ├── api_manage.html
│ │ ├── settings.html
│ │ └── operation_logs.html
│ └── utils/
│ └── db.py # 数据库连接
│
├── core/ # 核心业务模块
│ ├── fund_api.py # 基金数据API
│ ├── holdings.py # 持仓管理
│ ├── recommender.py # 智能推荐引擎
│ ├── enhanced_analyzer.py # AI增强分析
│ ├── feishu_pusher.py # 飞书推送
│ ├── news_analyzer.py # 资讯分析
│ └── ai_client.py # AI客户端
│
├── data/ # 数据目录
│ └── actual_navs.json # 实际净值数据
│
├── venv/ # Python虚拟环境
│
├── config.yaml # 主配置文件
├── .env # 环境变量
├── requirements.txt # Python依赖
└── templates -> admin/templates # 符号链接 (Flask模板路径)
5. 数据库设计#
5.1 数据库连接#
{
'host': '127.0.0.1',
'port': 3306,
'user': 'funds',
'password': '6NZ7Hp2Z5YWShARJ',
'database': 'funds',
'charset': 'utf8mb4'
}
5.2 数据表#
| 表名 | 说明 | 记录数 |
|---|
| holdings | 持仓管理 | 15 |
| ai_models | AI模型配置 | 1 |
| feishu_settings | 飞书推送配置 | 1 |
| system_settings | 系统设置 | 5 |
| operation_logs | 操作日志 | 5 |
| login_logs | 登录日志 | ~50 |
| admins | 管理员账户 | 1 |
5.3 表结构详情#
holdings (持仓表)#
CREATE TABLE holdings (
id INT AUTO_INCREMENT PRIMARY KEY,
code VARCHAR(20) NOT NULL UNIQUE, -- 基金代码
name VARCHAR(100), -- 基金名称
shares DECIMAL(10,4), -- 持有份额
cost DECIMAL(10,4), -- 持仓成本
amount DECIMAL(12,2), -- 持仓金额
note TEXT, -- 备注
created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
updated_at DATETIME ON UPDATE CURRENT_TIMESTAMP
);
ai_models (AI模型表)#
CREATE TABLE ai_models (
id INT AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(50), -- 模型名称
provider VARCHAR(30), -- 提供商
api_key VARCHAR(200), -- API密钥
base_url VARCHAR(200), -- API地址
model VARCHAR(50), -- 模型名称
is_default BOOLEAN DEFAULT FALSE, -- 是否默认
created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
updated_at DATETIME ON UPDATE CURRENT_TIMESTAMP
);
feishu_settings (飞书配置表)#
CREATE TABLE feishu_settings (
id INT AUTO_INCREMENT PRIMARY KEY,
webhook_url VARCHAR(500), -- Webhook地址
secret_key VARCHAR(200), -- 密钥
enabled BOOLEAN DEFAULT FALSE, -- 是否启用
auto_push BOOLEAN DEFAULT FALSE, -- 自动推送
push_hour INT DEFAULT 22, -- 推送时间(小时)
created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
updated_at DATETIME ON UPDATE CURRENT_TIMESTAMP
);
system_settings (系统设置表)#
CREATE TABLE system_settings (
id INT AUTO_INCREMENT PRIMARY KEY,
setting_key VARCHAR(100) UNIQUE, -- 设置键
setting_value TEXT, -- 设置值
setting_type VARCHAR(20), -- 类型: string/int/bool/json
remark VARCHAR(200), -- 备注
created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
updated_at DATETIME ON UPDATE CURRENT_TIMESTAMP
);
admins (管理员表)#
CREATE TABLE admins (
id INT AUTO_INCREMENT PRIMARY KEY,
username VARCHAR(50) UNIQUE, -- 用户名
password VARCHAR(200), -- 密码(bcrypt加密)
nickname VARCHAR(50), -- 昵称
role VARCHAR(20) DEFAULT 'admin', -- 角色
created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
last_login DATETIME
);
6. 前端功能#
6.1 前台页面 (/)#
| 功能 | 说明 |
|---|
| 持仓概览 | 显示所有持仓及盈亏 |
| 基金详情 | 点击基金查看历史净值 |
| AI分析 | 一键生成AI量化分析报告 |
| 智能推荐 | 多种推荐策略推荐基金 |
6.2 管理后台 (/admin)#
| 页面 | 功能 |
|---|
| 仪表盘 | 持仓概览、快速入口 |
| 持仓管理 | 添加/编辑/删除持仓 |
| AI模型 | 配置AI分析模型 |
| 飞书推送 | 配置飞书Webhook推送 |
| API管理 | 管理外部API配置 |
| 系统设置 | 系统参数配置 |
| 操作日志 | 查看操作记录 |
6.3 导航菜单 (统一7项)#
1. 首页概览 → /admin/
2. 持仓管理 → /admin/holdings
3. AI模型 → /admin/models
4. 飞书推送 → /admin/feishu
5. API管理 → /admin/apis
6. 系统设置 → /admin/settings
7. 操作日志 → /admin/logs
7. 后端API#
7.1 前台API (端口8080)#
持仓相关#
| 方法 | 路由 | 说明 |
|---|
| GET | /api/holdings | 获取持仓列表 |
| POST | /api/holdings | 添加持仓 |
| PUT | /api/holdings/{code} | 更新持仓 |
| DELETE | /api/holdings/{code} | 删除持仓 |
基金相关#
| 方法 | 路由 | 说明 |
|---|
| GET | /api/fund/{code} | 获取基金详情和历史净值 |
| GET | /api/analyze/{code} | AI量化分析报告 |
推荐相关#
| 方法 | 路由 | 说明 |
|---|
| GET | /api/recommend | 智能推荐基金 |
| GET | /api/recommend/portfolio | 持仓分析 |
| GET | /api/recommend/similar | 查找相似基金 |
7.2 管理后台API (端口8081)#
认证相关#
| 方法 | 路由 | 说明 |
|---|
| POST | /admin/api/auth/login | 登录 |
| POST | /admin/api/auth/logout | 登出 |
| GET | /admin/api/auth/info | 获取用户信息 |
| POST | /admin/api/auth/password | 修改密码 |
持仓管理#
| 方法 | 路由 | 说明 |
|---|
| GET | /admin/api/holdings/list | 持仓列表 |
| POST | /admin/api/holdings | 添加持仓 |
| PUT | /admin/api/holdings/{id} | 更新持仓 |
| DELETE | /admin/api/holdings/{id} | 删除持仓 |
| POST | /admin/api/holdings/batch-delete | 批量删除 |
| GET | /admin/api/holdings/export | 导出Excel |
AI模型#
| 方法 | 路由 | 说明 |
|---|
| GET | /admin/api/models/list | 模型列表 |
| POST | /admin/api/models | 添加模型 |
| PUT | /admin/api/models/{id} | 更新模型 |
| DELETE | /admin/api/models/{id} | 删除模型 |
| POST | /admin/api/models/{id}/test | 测试模型 |
| POST | /admin/api/models/{id}/default | 设为默认 |
飞书推送#
| 方法 | 路由 | 说明 |
|---|
| GET | /admin/api/feishu/settings | 获取配置 |
| POST | /admin/api/feishu/settings | 保存配置 |
| POST | /admin/api/feishu/test | 发送测试消息 |
系统设置#
| 方法 | 路由 | 说明 |
|---|
| GET | /admin/api/settings/settings/list | 设置列表 |
| POST | /admin/api/settings/settings | 添加设置 |
| PUT | /admin/api/settings/settings/item/{key} | 更新设置 |
| DELETE | /admin/api/settings/settings/item/{key} | 删除设置 |
操作日志#
| 方法 | 路由 | 说明 |
|---|
| GET | /admin/api/logs/logs/operation/list | 日志列表 |
| GET | /admin/api/logs/logs/operation/modules | 模块列表 |
8. 核心模块#
8.1 基金API (core/fund_api.py)#
数据来源:天天基金网
# 实时行情
get_realtime_quote(code)
# 历史净值
get_historical_nav(code, days=90)
8.2 智能推荐 (core/recommender.py)#
推荐策略#
| 策略 | 说明 |
|---|
| MOMENTUM | 动量策略 - 追涨 |
| CONTRARIAN | 反转策略 - 抄底 |
| LOW_VOLATILITY | 低波动策略 |
| HIGH_SHARPE | 高夏普策略 |
| DIVERSIFICATION | 分散化策略 |
基金池#
| 类别 | 数量 | 示例 |
|---|
| 宽基指数 | 15+ | 沪深300ETF、创业板ETF |
| 行业主题 | 20+ | 医疗、新能源、消费 |
| 债券稳健 | 8+ | 纯债、可转债 |
| QDII海外 | 8+ | 纳斯达克、港股 |
8.3 AI分析 (core/enhanced_analyzer.py)#
支持多种AI模型进行量化分析,自动生成分析报告。
9. 第三方服务#
9.1 数据源#
9.2 AI服务#
9.3 通知服务#
10. 运维指南#
10.1 服务管理#
# 重启前台应用 (8080)
pkill -f 'python.*web_new'
cd /www/wwwroot/funds.imoons.cn/app
nohup /www/wwwroot/funds.imoons.cn/venv/bin/python web_new.py > /tmp/flask.log 2>&1 &
# 重启管理后台 (8081)
pkill -f 'python.*admin'
cd /www/wwwroot/funds.imoons.cn
nohup /www/wwwroot/funds.imoons.cn/venv/bin/python admin/admin.py > /tmp/admin.log 2>&1 &
# 重启Nginx
nginx -s reload
10.2 日志位置#
| 日志 | 路径 |
|---|
| Nginx访问日志 | /www/wwwlogs/funds.imoons.cn.log |
| Nginx错误日志 | /www/wwwlogs/funds.imoons.cn.error.log |
| Flask日志 | /tmp/flask.log, /tmp/admin.log |
10.3 Nginx配置#
配置文件: /www/server/nginx/conf/vhost/funds.imoons.cn.conf
server {
server_name funds.imoons.cn;
root /www/wwwroot/funds.imoons.cn/app/templates;
# 前台 → 8080
location / {
proxy_pass http://127.0.0.1:8080;
}
# 管理后台 → 8081
location /admin {
proxy_pass http://127.0.0.1:8081;
}
# API → 8080
location /api/ {
proxy_pass http://127.0.0.1:8080/api/;
}
listen 443 ssl;
ssl_certificate /etc/letsencrypt/live/funds.imoons.cn/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/funds.imoons.cn/privkey.pem;
}
11. 备份恢复#
11.1 备份位置#
/www/backup/funds/full_backup_YYYYMMDD_HHMMSS.tar.gz
11.2 备份内容#
database.sql.gz - MySQL数据库完整备份
code.tar.gz - 完整代码备份
manifest.json - 备份清单
README.txt - 恢复说明
11.3 恢复步骤#
# 1. 解压备份包
tar -xzf full_backup_20260416_102528.tar.gz
# 2. 恢复数据库
gunzip < database.sql.gz | mysql -u funds -p6NZ7Hp2Z5YWShARJ funds
# 3. 恢复代码
mv /www/wwwroot/funds.imoons.cn /www/wwwroot/funds.imoons.cn.bak
tar -xzf code.tar.gz -C /www/wwwroot/
# 4. 重启服务
pkill -f 'python.*web_new'
pkill -f 'python.*admin'
cd /www/wwwroot/funds.imoons.cn/app
nohup /www/wwwroot/funds.imoons.cn/venv/bin/python web_new.py > /tmp/flask.log 2>&1 &
cd /www/wwwroot/funds.imoons.cn
nohup /www/wwwroot/funds.imoons.cn/venv/bin/python admin/admin.py > /tmp/admin.log 2>&1 &
nginx -s reload
A. 默认账户#
B. 快速命令#
# 查看服务状态
ps aux | grep python
# 查看端口占用
netstat -tlnp | grep 808
# 测试API
curl -s http://127.0.0.1:8080/api/holdings
# 查看日志
tail -f /tmp/flask.log
tail -f /tmp/admin.log
C. 项目维护者#
- 开发者: FundQuant Team
- 最后更新: 2026-04-16
本文档由系统自动生成,如有问题请联系开发者。