TECH

FundQuant 基金量化助手 - 项目技术文档 v1.0

13 章 13KB: 系统架构、模块设计、数据库、接口、部署、监控, FundQuant 基金量化助手的完整技术全景。

#FundQuant#基金#量化#架构

FundQuant 基金量化助手 - 项目技术文档#

文档版本: v1.0
生成日期: 2026-04-16
维护状态: 活跃开发中


目录#

  1. 项目概述
  2. 系统架构
  3. 部署环境
  4. 项目结构
  5. 数据库设计
  6. 前端功能
  7. 后端API
  8. 核心模块
  9. 第三方服务
  10. 运维指南
  11. 备份恢复

1. 项目概述#

1.1 项目简介#

FundQuant 是一款基于 Flask 的基金量化助手系统,提供持仓管理、智能推荐、AI分析、飞书推送等功能。

1.2 访问信息#

项目地址
前台网站https://funds.imoons.cn
管理后台https://funds.imoons.cn/admin
管理后台登录admin / admin123

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 端口分配#

端口服务说明
80NginxHTTP 重定向到 HTTPS
443NginxHTTPS 入口,SSL证书
8080Flask (web_new.py)前台Web应用
8081Flask (admin.py)管理后台

3. 部署环境#

3.1 服务器信息#

项目信息
服务器IP42.192.112.148
SSH端口22
SSH用户root
SSH密码Kylin123456@

3.2 基础软件#

软件版本/说明
操作系统Linux
Python3.x (虚拟环境: venv)
Nginx反向代理 + SSL
MySQL5.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_modelsAI模型配置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 数据源#

服务用途
天天基金网 API基金净值、行情数据

9.2 AI服务#

服务用途
MiniMaxAI量化分析

9.3 通知服务#

服务用途
飞书 Webhook推送分析报告

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. 默认账户#

系统用户名密码
管理后台adminadmin123

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

本文档由系统自动生成,如有问题请联系开发者。

📑 文章目录(44 节)
  1. FundQuant 基金量化助手 - 项目技术文档#
  2. 目录#
  3. 1. 项目概述#
  4. 1.1 项目简介#
  5. 1.2 访问信息#
  6. 2. 系统架构#
  7. 2.1 架构图#
  8. 2.2 端口分配#
  9. 3. 部署环境#
  10. 3.1 服务器信息#
  11. 3.2 基础软件#
  12. 3.3 Python依赖#
  13. 4. 项目结构#
  14. 5. 数据库设计#
  15. 5.1 数据库连接#
  16. 5.2 数据表#
  17. 5.3 表结构详情#
  18. 6. 前端功能#
  19. 6.1 前台页面 (/)#
  20. 6.2 管理后台 (/admin)#
  21. 6.3 导航菜单 (统一7项)#
  22. 7. 后端API#
  23. 7.1 前台API (端口8080)#
  24. 7.2 管理后台API (端口8081)#
  25. 8. 核心模块#
  26. 8.1 基金API (core/fund_api.py)#
  27. 8.2 智能推荐 (core/recommender.py)#
  28. 8.3 AI分析 (core/enhanced_analyzer.py)#
  29. 9. 第三方服务#
  30. 9.1 数据源#
  31. 9.2 AI服务#
  32. 9.3 通知服务#
  33. 10. 运维指南#
  34. 10.1 服务管理#
  35. 10.2 日志位置#
  36. 10.3 Nginx配置#
  37. 11. 备份恢复#
  38. 11.1 备份位置#
  39. 11.2 备份内容#
  40. 11.3 恢复步骤#
  41. 附录#
  42. A. 默认账户#
  43. B. 快速命令#
  44. C. 项目维护者#

← 回到首页

评论

评论功能未启用。在 .env 中配置 4 个 PUBLIC_GISCUS_* 变量即可启用。

📋 30 秒开通步骤
  1. 打开 github.com/apps/giscus → Install → 选 iiiiber/blog-comments
  2. 打开 giscus.app/zh-CN
  3. 仓库填 iiiiber/blog-comments,页面分类选 General
  4. 把页面生成的 data-repodata-repo-iddata-categorydata-category-id 4 个值填到 .env
  5. 重启 npm run dev,评论区自动出现