一个基于 Streamlit 和 MySQL 的专业股票数据分析平台,提供股票数据查询、技术指标分析、投资组合管理等功能。
A professional stock data analysis platform based on Streamlit and MySQL, providing stock data query, technical indicator analysis, portfolio management and other functions.
- 用户注册与登录: 安全的用户注册和登录功能
- 密码加密: 使用 bcrypt 进行密码哈希加密
- 会话管理: 基于 Streamlit session_state 的会话管理
- 权限控制: 用户访问权限控制
- 实时数据展示: 显示股票的实时价格和基本信息
- 历史数据查询: 支持自定义时间范围的历史数据查询
- 技术指标计算:
- 移动平均线 (MA): 5 日、10 日、20 日、60 日
- 相对强弱指数 (RSI): 14 日
- MACD 指标: 12,26,9 参数
- 布林带 (Bollinger Bands): 20 日
- K 线图展示: 交互式 K 线图和技术指标图表
- 组合创建: 创建和管理多个投资组合
- 持仓分析: 详细的持仓分析和收益计算
- 风险评估: 投资组合风险指标计算
- 收益率分析:
- 总收益率计算
- 年化收益率
- 最大回撤分析
- 夏普比率计算
- 市场指数: 主要市场指数实时显示
- 热门股票: 热门股票排行榜
- 涨跌幅统计: 市场涨跌幅分布统计
- 成交量分析: 市场成交量趋势分析
┌─────────────────┐ ┌─────────────────┐ ┌─────────────────┐
│ Streamlit │ │ Business │ │ MySQL │
│ Frontend │◄──►│ Logic Layer │◄──►│ Database │
│ (用户界面) │ │ (业务逻辑) │ │ (数据存储) │
└─────────────────┘ └─────────────────┘ └─────────────────┘
- 前端框架: Streamlit 1.28+
- 后端语言: Python 3.11+
- 数据库: MySQL 8.0
- 数据处理: Pandas, NumPy
- 图表库: Plotly
- 容器化: Docker & Docker Compose
- 密码加密: bcrypt
stock-analysis-app/
├── app/ # 应用主目录
│ ├── main.py # 应用入口文件
│ ├── auth/ # 认证模块
│ │ └── login.py # 登录功能
│ ├── models/ # 数据模型
│ │ ├── user.py # 用户模型
│ │ └── stock.py # 股票模型
│ ├── views/ # 页面视图
│ │ ├── dashboard.py # 仪表板
│ │ ├── stock_analysis.py # 股票分析
│ │ └── portfolio_analysis.py # 投资组合分析
│ ├── database/ # 数据库模块
│ │ └── connection.py # 数据库连接
│ └── utils/ # 工具函数
│ └── helpers.py # 辅助函数
├── scripts/ # 脚本目录
│ ├── init_database.sql # 数据库初始化脚本
│ ├── sample_data.sql # 示例数据脚本
│ ├── init_db.py # 数据库初始化Python脚本
│ ├── generate_stock_data.py # 历史数据生成脚本
│ ├── start_local.py # 本地启动脚本
│ ├── startup.py # 容器启动脚本
│ ├── test_system.py # 系统测试脚本
│ ├── quick_verify.py # 快速验证脚本
│ └── start_app.sh # Docker启动脚本
├── config/ # 配置目录
│ └── config.py # 配置文件
├── docker-compose.yml # Docker编排文件
├── Dockerfile # Docker镜像文件
├── requirements.txt # Python依赖
├── DEPLOYMENT_GUIDE.md # 完整部署指南
└── README.md # 项目说明
- Docker 20.10+
- Docker Compose 2.0+
- 4GB+ 可用内存
# 1. 克隆项目
git clone <repository-url>
cd stock-analysis-app
# 2. 启动服务
docker-compose up -d
# 3. 查看服务状态
docker-compose ps
# 4. 查看日志
docker-compose logs -f# 1. 克隆项目
git clone <repository-url>
cd stock-analysis-app
# 2. 使用本地配置启动(数据库名:stock,用户:root)
docker-compose -f docker-compose.local.yml up -d
# 或者使用便捷脚本
python scripts/start_local.py
# 3. 查看服务状态
docker-compose -f docker-compose.local.yml ps
# 4. 停止服务
python scripts/stop_local.py- 应用地址: http://localhost:8501
- 默认账户: admin / admin123
- 本地数据库:
- 主机: localhost:3306
- 数据库: stock
- 用户名: root
- 密码: 123456
- Python 3.11+
- Docker (用于 MySQL)
- Git
# 1. 安装依赖
pip install -r requirements.txt
# 2. 一键启动(自动启动MySQL容器并初始化数据)
python scripts/start_local.py --mode python
# 访问应用: http://localhost:8501
# 账户: admin / admin123# 1. 创建虚拟环境
python -m venv venv
source venv/bin/activate # Linux/Mac
# venv\Scripts\activate # Windows
# 2. 安装依赖
pip install -r requirements.txt
# 3. 启动MySQL容器
docker run -d --name mysql-stock \
-e MYSQL_ROOT_PASSWORD=123456 \
-e MYSQL_DATABASE=stock \
-p 3306:3306 \
mysql:8.0
# 4. 初始化数据库(包含5年历史数据生成)
python scripts/init_db.py
# 5. 启动应用
streamlit run app/main.pyCREATE TABLE users (
id INT AUTO_INCREMENT PRIMARY KEY,
username VARCHAR(50) UNIQUE NOT NULL,
password_hash VARCHAR(255) NOT NULL,
email VARCHAR(100),
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
is_active BOOLEAN DEFAULT TRUE
);CREATE TABLE stocks (
id INT AUTO_INCREMENT PRIMARY KEY,
stock_code VARCHAR(20) UNIQUE NOT NULL,
stock_name VARCHAR(100) NOT NULL,
market VARCHAR(20) NOT NULL,
industry VARCHAR(50),
sector VARCHAR(50),
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
is_active BOOLEAN DEFAULT TRUE
);CREATE TABLE stock_data (
id BIGINT AUTO_INCREMENT PRIMARY KEY,
stock_code VARCHAR(20) NOT NULL,
trade_date DATE NOT NULL,
open_price DECIMAL(10,3) NOT NULL,
high_price DECIMAL(10,3) NOT NULL,
low_price DECIMAL(10,3) NOT NULL,
close_price DECIMAL(10,3) NOT NULL,
volume BIGINT DEFAULT 0,
amount DECIMAL(15,2) DEFAULT 0,
turnover_rate DECIMAL(8,4) DEFAULT 0,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
UNIQUE KEY uk_stock_date (stock_code, trade_date)
);# config/config.py
DATABASE_CONFIG = {
'host': 'localhost', # 数据库主机
'port': 3306, # 数据库端口
'user': 'root', # 数据库用户
'password': '123456', # 数据库密码
'database': 'stock', # 数据库名称(本地环境)
'charset': 'utf8mb4' # 字符集
}# .env 文件
DB_HOST=localhost
DB_PORT=3306
DB_USER=root
DB_PASSWORD=123456
DB_NAME=stock
DEBUG=True# Streamlit 配置
STREAMLIT_CONFIG = {
'server_port': 8501,
'server_address': '0.0.0.0',
'server_max_upload_size': 200,
'theme_base': 'light'
}欢迎贡献代码!请遵循以下步骤:
- Fork 本仓库
- 创建特性分支 (
git checkout -b feature/AmazingFeature) - 提交更改 (
git commit -m 'Add some AmazingFeature') - 推送到分支 (
git push origin feature/AmazingFeature) - 开启 Pull Request
本项目采用 MIT 许可证 - 查看 LICENSE 文件了解详情。
如果您在使用过程中遇到问题,请:
- 操作系统: Ubuntu 22.04 / Windows 10+ / macOS 10.15+
- 内存: 4GB RAM
- 存储: 10GB 可用空间
- 数据库: MySQL 8.0
- 操作系统: Ubuntu 22.04 LTS
- 内存: 8GB RAM
- 存储: 20GB 可用空间
- CPU: 4 核心以上
本项目完全符合以下技术要求:
- ✅ 系统: Ubuntu 22.04
- ✅ 数据库: MySQL 8.0
- ✅ 容器化: Docker + Docker Compose
- ✅ Streamlit 应用: 现代化 Web 界面
- ✅ MySQL 数据库: 完整的数据存储方案
- ✅ 用户登录: 安全的认证系统(演示账户:admin/admin123)
- ✅ 股票分析: 完整的技术指标分析
- ✅ 投资组合: 专业的组合管理功能
- ✅ 单只股票: 日均、月均、年度、历史累计收益率分析
- ✅ 技术指标: 移动平均线、RSI、MACD、布林带等完整技术指标
- ✅ 风险指标: 最大回撤、夏普比率、年化波动率等
- ✅ 投资组合: 真实的组合净值计算和历史表现分析
- ✅ 历史走势: 完整的投资组合净值走势图和月度收益率
- ✅ 一键部署:
docker-compose up -d - ✅ 自动数据生成: 启动时自动生成 5 年完整历史数据
- ✅ 数据持久化: MySQL 数据卷持久化
- ✅ 完整打包: 支持 tar 格式打包
- ✅ 功能验证: 内置测试脚本验证所有功能
# 1. 启动系统
docker-compose up -d
# 2. 等待启动完成(约2-3分钟)
docker-compose logs -f app
# 3. 快速验证功能
python scripts/quick_verify.py
# 4. 访问应用
# 浏览器打开: http://localhost:8501
# 账户: admin / admin123- ✅ 股票详细信息: 包含完整的 5 年历史数据和技术指标
- ✅ 股票分析参数设置: 支持多种时间周期和图表类型
- ✅ 投资组合净值走势: 真实计算的组合净值和表现指标
- ✅ 技术指标分析: MA、RSI、MACD、布林带等完整指标
详细的部署和验证指南请查看:完整部署指南
开发团队: zjj 最后更新: 2025 年 7 月 版本: v1.0.0