- Stock Analyzer 是一个开源、生产级的股票分析系统,专为个人投资者和量化开发者设计
- 本项目代码全部由OpenClaw提供的AI Agent能力完成,仍在不断自我进化中...
- ✅ 插件化架构 - 数据源/AI/报告插件动态加载
- ✅ 多数据源支持 - Tushare/AKShare/OpenBB/Local,自动降级熔断
- ✅ 完整技术分析 - MA/EMA/MACD/RSI/布林带等20+指标
- ✅ 预测验证体系 - 预测记录、准确率计算、排行榜
- ✅ 双格式报告 - Markdown/PDF 专业报告
- ✅ 交互式图表 - ECharts K线图、MACD、RSI可视化
- ✅ 模块化架构 - 清晰的分层设计,易于扩展
- ✅ 高测试覆盖 - 100%测试通过率,90%+代码覆盖率
- ✅ Web 前端 - Streamlit 交互式界面
- ✅ AI 增强 - OpenAI/Claude 多模型支持
- ✅ 生产就绪 - 熔断器、缓存、重试机制、健康检查
# 分析恒瑞医药
python stock_analyzer.py 600276.SH --output both
# 分析中芯国际
python stock_analyzer.py 688981.SH --output html生成报告示例:
| 项目 | 要求 |
|---|---|
| Python | 3.11+ |
| 操作系统 | Linux / macOS / Windows |
| 内存 | ≥2GB |
| 磁盘 | ≥1GB |
# 克隆项目
git clone https://github.com/howhow/stock-analyzer.git
cd stock-analyzer
# 创建虚拟环境
make venv
# 安装依赖
make install
# 配置 Tushare Token
cp .env.example .env
# 编辑 .env,填入你的 TUSHARE_TOKEN# 基本用法
python stock_analyzer.py 600276.SH
# 输出两种格式
python stock_analyzer.py 600276.SH --output both
# 指定分析天数
python stock_analyzer.py 600276.SH --days 180
# 仅技术分析
python stock_analyzer.py 600276.SH --type technical
# 指定输出目录
python stock_analyzer.py 600276.SH --output-dir ./my-reports# HTML 报告(浏览器打开)
open local_analyze_report/600276.SH/600276.SH_2026-04-08.html
# Markdown 报告
cat local_analyze_report/600276.SH/600276.SH_2026-04-08.md| 数据源 | 类型 | 权限 | 特点 |
|---|---|---|---|
| Tushare | 主数据源 | 需Token | 数据全面,权限分级 |
| AKShare | 备用数据源 | 免费 | 无需Token,自动降级 |
智能降级策略:
- Tushare 失败 → 自动切换 AKShare
- 熔断器保护 → 避免雪崩效应
- 健康检查 → 实时监控数据源状态
| 维度 | 指标 | 说明 |
|---|---|---|
| 技术面 | MA5/MA20/EMA | 趋势判断 |
| MACD | 动量指标 | |
| RSI(14) | 超买超卖 | |
| 布林带 | 波动区间 | |
| ATR | 波动率 | |
| 基本面 | 财务数据 | 盈利能力 |
| 估值指标 | PE/PB/ROE | |
| 交易信号 | 多空判断 | 入场时机 |
| 支撑压力位 | 价格区间 |
内容包含:
- 📈 K线图 - ECharts 交互式图表
- 📊 技术指标 - MACD、RSI、成交量
- 🎯 综合评分 - 100分制评分系统
- 💡 投资建议 - 买入/持有/减持/卖出
⚠️ 风险提示 - VaR、最大回撤、波动率
特点:
- 响应式设计,支持移动端
- 交互式图表,支持缩放、悬停
- 专业金融配色,一目了然
特点:
- 结构化表格
- JSON 元数据
- 易于解析
- 可集成到自动化流程
综合评分 = 基本面评分 × 40% + 技术面评分 × 60%
| 评分范围 | 建议 | 说明 |
|---|---|---|
| 70-100 | 买入 | 强烈看多信号 |
| 60-70 | 持有偏多 | 有上涨潜力 |
| 50-60 | 持有 | 观望为主 |
| 40-50 | 减持 | 风险较大 |
| 0-40 | 卖出 | 强烈看空 |
stock-analyzer/
├── stock_analyzer.py # 统一命令行入口
├── app/
│ ├── analysis/ # 分析引擎
│ │ ├── system.py # 系统级分析
│ │ ├── indicators/ # 技术指标计算
│ │ │ ├── trend.py # MA/EMA/MACD
│ │ │ ├── momentum.py # RSI
│ │ │ ├── volatility.py # ATR/布林带
│ │ │ └── volume.py # 成交量指标
│ │ └── base.py # 分析基类
│ ├── data/ # 数据层
│ │ ├── tushare_client.py # Tushare 客户端
│ │ ├── akshare_client.py # AKShare 客户端
│ │ ├── data_fetcher.py # 数据协调器
│ │ ├── health_check.py # 健康检查
│ │ └── preprocessor.py # 数据预处理
│ ├── report/ # 报告生成
│ │ ├── generator.py # HTML 报告生成器
│ │ ├── markdown_report.py # Markdown 报告生成器
│ │ └── templates/ # HTML 模板
│ ├── models/ # 数据模型
│ │ ├── stock.py # 股票模型
│ │ └── analysis.py # 分析结果模型
│ ├── core/ # 核心组件
│ │ ├── cache.py # 缓存管理
│ │ ├── circuit_breaker.py # 熔断器
│ │ └── config.py # 配置管理
│ └── utils/ # 工具函数
│ ├── logger.py # 日志系统
│ └── field_mapper.py # 字段映射
├── tests/ # 测试代码
│ ├── unit/ # 单元测试
│ ├── integration/ # 集成测试
│ └── regression/ # 回归测试
├── docs/ # 文档
│ ├── USER_GUIDE.md # 用户文档
│ ├── CHANGELOG.md # 更新日志
│ └── modules/ # 模块文档
├── scripts/ # 工具脚本
├── config/ # 配置文件
├── requirements.txt # 生产依赖
├── requirements-dev.txt # 开发依赖
├── Makefile # 构建命令
└── README.md # 项目说明
创建 .env 文件:
# Tushare API Token(必需)
TUSHARE_TOKEN=your_token_here
# AKShare 配置(可选)
AKSHARE_TIMEOUT=15
AKSHARE_MAX_RETRIES=3
# 分析配置(可选)
ANALYSIS_DAYS=120
ANALYSIS_MIN_DAYS=20
# Redis 配置(可选,用于缓存)
REDIS_URL=redis://localhost:6379/0- 访问 Tushare官网
- 注册账号(免费)
- 登录后,进入「个人中心」→「接口Token」
- 复制 Token
免费版权限:
- 每日 8000 次调用
- 日K线数据(需120+积分)
- 基础财务数据
Ubuntu/Debian:
sudo apt-get update
sudo apt-get install -y python3-dev build-essential
cd /tmp
curl -L -O http://prdownloads.sourceforge.net/ta-lib/ta-lib-0.4.0-src.tar.gz
tar -xzf ta-lib-0.4.0-src.tar.gz
cd ta-lib
./configure --prefix=/usr
make
sudo make install
sudo ldconfigmacOS:
brew install ta-lib
⚠️ 预览状态: Docker 部署为预览功能,建议优先使用本地部署方式。我们已提供完整配置,但尚未在所有环境验证。
| 工具 | 版本要求 | 检查命令 |
|---|---|---|
| Docker | 20.10+ | docker --version |
| Docker Compose | 2.0+ | docker-compose --version |
安装 Docker:
- macOS: Docker Desktop
- Windows: Docker Desktop
- Linux: Docker Engine
# 1. 克隆项目
git clone https://github.com/howhow/stock-analyzer.git
cd stock-analyzer
# 2. 配置环境变量
cp .env.example .env
# 编辑 .env,填写 TUSHARE_TOKEN、POSTGRES_PASSWORD 等
# 3. 启动开发环境
make docker
# 或生产环境
make docker-prod| 服务 | 地址 |
|---|---|
| 后端 API | http://localhost:8000 |
| 前端界面 | http://localhost:8501 |
| API 文档 | http://localhost:8000/docs |
| PostgreSQL | localhost:5432 |
| Redis | localhost:6379 |
# 启动服务
make docker
# 生产环境启动
make docker-prod
# 停止服务
make docker-stop
# 查看日志
make docker-logs
# 清理资源
make docker-clean┌─────────────┐ ┌─────────────┐
│ Frontend │────▶│ Backend │
│ (Streamlit) │ │ (FastAPI) │
│ :8501 │ │ :8000 │
└─────────────┘ └──────┬──────┘
│
┌────────────┼────────────┐
│ │ │
▼ ▼ ▼
┌─────────┐ ┌─────────┐ ┌─────────┐
│PostgreSQL│ │ Redis │ │ Celery │
│ :5432 │ │ :6379 │ │ Worker │
└─────────┘ └─────────┘ └─────────┘
| 变量 | 必需 | 说明 |
|---|---|---|
| TUSHARE_TOKEN | ✅ | Tushare API Token |
| POSTGRES_PASSWORD | ✅ | PostgreSQL 密码 |
| ENCRYPTION_KEY | ✅ | API Key 加密密钥 |
| APP_SECRET_KEY | ✅ | 应用安全密钥 |
| OPENAI_API_KEY | ❌ | OpenAI API Key(AI 分析) |
| ANTHROPIC_API_KEY | ❌ | Anthropic API Key(AI 分析) |
| 命令 | 说明 |
|---|---|
make help |
显示帮助信息 |
make venv |
创建虚拟环境 |
make install |
安装依赖 |
make check-deps |
检查依赖状态 |
make test |
运行测试 + 覆盖率 |
make lint |
代码质量检查 |
make format |
格式化代码 |
make clean |
清理缓存文件 |
make clean-all |
清理虚拟环境 |
| 指标 | 数值 |
|---|---|
| 总测试数 | 716 |
| 通过率 | 100% (716 passed) |
| 失败数 | 0 |
| 代码覆盖率 | 80.93% |
| 关键模块覆盖率 | 94%+ |
# 运行所有测试
make test
# 或手动运行
local_venv/bin/python3 -m pytest tests/ -v --cov=app --cov-report=html
# 运行特定测试
local_venv/bin/python3 -m pytest tests/unit/test_data_fetcher.py -v
# 查看覆盖率报告
open htmlcov/index.html- ✅ Redis 缓存(可选)
- ✅ 熔断器保护
- ✅ 异步数据获取
- ✅ 数据预处理
- 🔲 批量股票分析
- 🔲 历史数据本地存储
- 🔲 WebSocket 实时推送
- ✅ Web 前端(Streamlit)
- ✅ AI 增强分析(OpenAI/Claude)
- ✅ 测试覆盖率提升至 86.71%
- ✅ 用户配置 API
- ✅ 安全模块增强
- ✅ 多数据源支持
- ✅ 技术分析完整实现
- ✅ HTML/Markdown 报告
- ✅ 交互式图表
- ✅ 高测试覆盖率
- 🔲 机器学习预测
- 🔲 实时监控告警
- 🔲 多账户管理
- 🔲 策略市场
欢迎贡献代码、报告问题或提出建议!
- Fork 项目
- 创建特性分支 (
git checkout -b feature/AmazingFeature) - 提交更改 (
git commit -m 'Add some AmazingFeature') - 推送到分支 (
git push origin feature/AmazingFeature) - 创建 Pull Request
代码规范:
- 使用 Black 格式化代码
- 通过 mypy 类型检查
- 测试覆盖率不低于 80%
问题描述:AKShare 调用东方财富数据接口时可能失败,原因:
- 东方财富对爬虫和 API 调用管控严格
- 频繁访问会触发反爬机制
- 网络波动导致连接中断
影响范围:
- 股票基本信息获取失败
- 财务数据获取失败
解决方案:
- 推荐:使用 Tushare Pro(需要积分权限)
- 降低 AKShare 调用频率
- 等待一段时间后重试
错误示例:
akshare_get_stock_info_failed: ('Connection aborted.', RemoteDisconnected('Remote end closed connection without response'))
系统行为:
- Tushare 失败 → 自动降级到 AKShare
- AKShare 失败 → 返回空数据,系统继续运行
- 财务数据获取失败 → 自动退化为纯技术面分析
问题描述:免费版 Tushare Token 权限有限:
- 每分钟最多访问 1 次接口
- 部分财务数据需要更高级别积分
解决方案:
- 升级 Tushare 积分等级
- 使用 AKShare 作为备用数据源
本项目采用 MIT 许可证 - 详见 LICENSE 文件
- GitHub Issues: 提交 Bug 报告或功能建议
- Pull Requests: 欢迎贡献代码
本系统生成的分析报告仅供参考,不构成任何投资建议。股市有风险,投资需谨慎。
- 所有分析基于历史数据,不保证未来表现
- 技术指标存在滞后性,需结合基本面分析
- 请根据自身风险承受能力做出投资决策
⭐ 如果这个项目对你有帮助,请给一个 Star ⭐