A股短线交易复盘报告系统 是一个自动化的A股市场分析和报告生成系统,专为短线交易者设计。系统每日自动生成早盘和午盘两份复盘报告,帮助交易者快速了解市场动态、热点板块、龙头个股和次日交易策略。
- 涨停分析: 自动统计涨停股票、计算封板率、识别涨停题材分类
- 板块轮动: 识别当日热点板块,分析资金流向和轮动逻辑
- 指数分析: 主要指数走势(上证、深证、创业板、北证)、技术面支撑阻力
- 龙头识别: 识别趋势龙头、连板龙头、高换手率龙头
- 涨停原因分析: 基于OpenAI/Anthropic LLM分析个股涨停原因
- 交易策略生成: AI生成次日选股方向、择时建议、风险控制措施
- 规则匹配后备: 当AI服务不可用时自动降级到规则引擎
- HTML报告: 响应式网页版报告,支持浏览器查看和打印
- PDF报告: 高保真PDF格式,支持分享和归档
- 卡片消息: 钉钉/飞书机器人卡片推送,实时通知交易决策
- 定时调度: APScheduler基础的自动化执行,支持交易日判断
- 早盘报告: 11:30自动生成早盘市场快览
- 午盘报告: 15:00自动生成全天复盘和次日策略
- 异常处理: 自动重试、失败降级、详细日志记录
AstockReviewReport/
├── src/
│ ├── config/ # 配置管理
│ │ └── settings.py # 全局配置 (Pydantic BaseSettings)
│ ├── data/ # 数据采集
│ │ ├── tushare_client.py # Tushare API
│ │ ├── jiuyan_client.py # 韭研公社数据
│ │ └── schedule.py # 定时任务调度
│ ├── analysis/ # 数据分析
│ │ ├── limit_up_analyzer.py # 涨停分析
│ │ ├── sector_analyzer.py # 板块分析
│ │ ├── index_analyzer.py # 指数分析
│ │ └── leader_selector.py # 龙头识别
│ ├── ai/ # AI分析
│ │ ├── reason_analyzer.py # 涨停原因分析
│ │ └── strategy_generator.py # 策略生成
│ ├── report/ # 报告生成
│ │ ├── html_generator.py # HTML报告
│ │ ├── pdf_generator.py # PDF报告
│ │ └── card_formatter.py # 卡片格式
│ ├── notifier/ # 推送通知
│ │ ├── dingtalk.py # 钉钉机器人
│ │ └── feishu.py # 飞书机器人
│ └── utils/ # 工具库
│ └── logger.py # 日志管理
├── tests/ # 测试套件
│ ├── unit/ # 单元测试
│ └── integration/ # 集成测试
├── templates/ # HTML模板
├── output/ # 输出目录
│ ├── html/ # HTML报告
│ └── pdf/ # PDF报告
├── main.py # 程序入口
├── requirements.txt # 依赖包
├── pytest.ini # pytest配置
└── .env.example # 环境变量示例
- Python 3.8+
- pip (Python包管理器)
# 克隆仓库
git clone <repository-url>
cd AstockReviewReport
# 创建虚拟环境(推荐)
python3 -m venv venv
source venv/bin/activate # macOS/Linux
# 或
venv\Scripts\activate # Windows
# 安装依赖
pip install -r requirements.txt复制 .env.example 为 .env 并配置必需的参数:
cp .env.example .env编辑 .env 文件,配置以下必需参数:
# 必需:Tushare API Token (从 https://tushare.pro 获取)
TUSHARE_TOKEN=your_tushare_token_here
# 韭研公社数据(可选)
JIUYAN_COOKIE=your_cookie_here
JIUYAN_TOKEN=your_token_here
# 可选:OpenAI API Key (用于AI分析)
OPENAI_API_KEY=sk-...
OPENAI_MODEL=gpt-4
# 或者:Anthropic API Key (用于AI分析)
ANTHROPIC_API_KEY=sk-ant-...
# 可选:钉钉机器人Webhook
DINGTALK_WEBHOOK=https://oapi.dingtalk.com/robot/send?access_token=...
DINGTALK_SECRET=your_secret_here
# 可选:飞书机器人Webhook
FEISHU_WEBHOOK=https://open.feishu.cn/open-apis/bot/v2/hook/...# 生成测试报告(当天的早盘和午盘报告)
python main.py --test
# 只生成早盘报告
python main.py --morning
# 只生成午盘报告
python main.py --afternoon
# 为指定日期生成报告
python main.py --morning --date 2024-01-15
# 测试推送通知配置
python main.py --push-test# 启动定时任务守护进程
# 每个交易日的11:30生成早盘报告,15:00生成午盘报告
python main.py --daemon# 生成当日所有报告(早盘+午盘)
python main.py --test
# 生成特定类型报告
python main.py --morning # 仅早盘
python main.py --afternoon # 仅午盘
# 为历史日期生成报告
python main.py --morning --date 2024-01-10
python main.py --afternoon --date 2024-01-10
# 指定日期生成两份报告
python main.py --test --date 2024-01-10from main import ReportGenerator
generator = ReportGenerator()
# 生成早盘报告
result = generator.generate_morning_report(date='2024-01-15')
if result['success']:
print(f"早盘报告已生成")
else:
print(f"生成失败: {result.get('error')}")
# 生成午盘报告
result = generator.generate_afternoon_report(date='2024-01-15')# 启动定时任务(在后台运行)
python main.py --daemon
# 按Ctrl+C停止# 编辑crontab
crontab -e
# 添加以下行(每个交易日11:30和15:00执行)
30 11 * * 1-5 /path/to/python /path/to/AstockReviewReport/main.py --morning
0 15 * * 1-5 /path/to/python /path/to/AstockReviewReport/main.py --afternoon# 构建镜像(需要Dockerfile)
docker build -t astockreport .
# 运行容器
docker run -d \
-e TUSHARE_TOKEN=your_token \
-e DINGTALK_WEBHOOK=your_webhook \
-v $(pwd)/output:/app/output \
astockreport python main.py --daemon- 创建钉钉自定义机器人
- 获取Webhook URL和密钥
- 配置
.env:DINGTALK_WEBHOOK=https://oapi.dingtalk.com/robot/send?access_token=xxxx DINGTALK_SECRET=your_secret
- 测试:
python main.py --push-test
- 创建飞书机器人
- 获取Webhook URL
- 配置
.env:FEISHU_WEBHOOK=https://open.feishu.cn/open-apis/bot/v2/hook/xxxx
- 测试:
python main.py --push-test
在 templates/ 目录中创建自定义HTML模板:
templates/
├── morning_report.html # 早盘报告模板
└── afternoon_report.html # 午盘报告模板
模板使用Jinja2语法,可用变量:
date: 报告日期index_data: 指数数据limit_up_data: 涨停数据sector_data: 板块数据news: 新闻列表strategy: 交易策略(午盘报告)
| 数据类型 | 源 | 说明 |
|---|---|---|
| 指数行情 | Tushare | 上证、深证、创业板、北证 |
| 股票基本信息 | Tushare | 上市公司代码、名称、上市日期 |
| 涨停数据 | Tushare | 当日涨停列表 |
| 资金流向 | Tushare | 个股、板块资金数据 |
| 涨停分析 | 韭研公社 | 涨停原因、题材分类、连板梯队 |
| AI分析 | OpenAI/Anthropic | GPT/Claude模型 |
详见 配置指南
详见 API参考文档
详见 部署指南
# 运行所有测试
pytest
# 运行特定测试文件
pytest tests/unit/test_config.py
# 运行特定测试类
pytest tests/unit/test_config.py::TestSettings
# 显示详细输出
pytest -v
# 生成覆盖率报告
pytest --cov=src tests/# 检查Python语法
python3 -m py_compile src/**/*.py
# 运行linter(需要安装)
pip install flake8
flake8 src/解决方案: 检查 .env 文件中是否配置了 TUSHARE_TOKEN
# 验证配置
grep TUSHARE_TOKEN .env
# 如果为空,从 https://tushare.pro 获取token并配置解决方案: PDF生成可选,但如需启用需要安装系统依赖
# macOS
brew install libffi libpango
# Ubuntu/Debian
sudo apt-get install libpango-1.0-0 libpango-1.0-common libpangoft2-1.0-0
# 然后重新安装Python依赖
pip install --upgrade weasyprint解决方案: 系统使用Tushare交易日历,如有问题检查网络连接或API配额
# 测试数据连接
python3 -c "from src.data.tushare_client import TushareClient; client = TushareClient(); print(client.is_trading_day())"解决方案: 检查Webhook URL和网络连接
# 测试推送
python main.py --push-test
# 查看日志
tail -f logs/app.log系统日志保存在 logs/app.log,包含所有运行信息:
# 查看实时日志
tail -f logs/app.log
# 查看特定级别的日志
grep ERROR logs/app.log
grep WARNING logs/app.log- 数据缓存: 系统自动缓存API调用结果,减少请求
- 异步处理: 使用asyncio处理并发请求(计划中)
- 懒加载: 模块按需加载,减少内存占用
- 连接池: 复用HTTP连接
-
API密钥保护
- 不要在代码中硬编码密钥
- 使用
.env文件存储敏感信息 - 不要将
.env提交到版本控制
-
网络安全
- 确保Webhook URL安全
- 使用钉钉签名验证
- 定期更新依赖包
-
数据安全
- 报告数据本地存储
- 支持加密传输(HTTPS)
- 遵循数据保护法规
MIT License - 详见 LICENSE
欢迎提交Issue和Pull Request!
Q: 系统支持A+H股吗? A: 目前仅支持A股(沪深京交易所)。
Q: 能否自定义报告内容?
A: 可以。在 templates/ 目录创建自定义Jinja2模板。
Q: 历史数据如何保存?
A: 报告自动保存在 output/ 目录,支持HTML和PDF格式。
Q: 可以用于量化交易吗? A: 可以。通过API接口获取分析结果用于策略回测。
- 提交Issue: GitHub Issues
- 讨论: GitHub Discussions
感谢以下开源项目的支持:
- Tushare - 数据接口
- Jinja2 - 模板引擎
- APScheduler - 定时任务
- Pydantic - 数据验证
最后更新: 2026-03-14 当前版本: 1.0.0 维护状态: 活跃