构建一个纯监控、不下单的短线股票推荐系统,每日盘后结合板块、题材、情绪、连板梯队等数据,利用深度学习模型与**大语言模型(DeepSeek)**共同产生次日买入建议及详细理由,辅助人工决策。
- 不下单,只推荐:每日盘后输出 3~5 只潜力股 + 逻辑 + 风险提示。
- 数据闭环:从数据采集、特征工程、模型推理到结果跟踪,全流程自动可回测。
- AI 深度参与:传统 ML 提供量化概率;大模型负责整合多源信息生成人类可读理由。
- 实战可检验:所有信号严格无未来信息,支持历史回测与滚动评估。
[外部金融数据源]
│
▼
[数据采集层] ──── AKShare 拉取盘后涨停、情绪、板块数据
│
▼
[存储层] ─────── MySQL(开发环境)/ SQLite(快速试跑) + SQLAlchemy
│
▼
[特征工程] ───── 从原始数据计算封板强度、换手率、连板高度、情绪分数等因子
│
├─→ [传统 ML 模型] LightGBM 分类器 → 次日涨停概率(量化分数)
│
└─→ [市场状态文本化] + 候选股特征 + 概率分数
│
▼
[DeepSeek API] ──── 生成最终推荐股票及自然语言理由
│
▼
[推荐结果存储] ──── 存入推荐表,记录模型评分与大模型理由
│
▼
[模拟跟踪引擎] ──── 次日计算推荐股的最高/收盘收益,自动入库
│
▼
[Streamlit 看板] ── 展示当日推荐、历史表现、数据监控
关键原则:
- 所有数据在当日 15:00 后采集,绝不使用次日信息。
- 大模型仅用于“推理 + 解释”,不直接获取金融数据。
- 系统可划分独立模块,每个模块均可单独测试、调度。
先跑通全流程闭环,再迭代精度。详见 docs/mvp.md。
MVP 不做:实时行情、复杂深度学习(GNN/Transformer)、高频分钟级特征、爬虫文本(龙虎榜/舆情)、多年历史回测。
MVP 要做:盘后涨停数据 → 日级特征 → LightGBM 评分 → DeepSeek 推荐 3~5 只 → 次日收益跟踪 → Streamlit 看板。
| 层级 | 技术 | 说明 |
|---|---|---|
| 开发语言 | Python 3.11+ | 量化/AI 生态无可替代 |
| 数据获取 | AKShare | 开源、免费、覆盖涨停/情绪/板块 |
| 数据库 ORM | SQLAlchemy | 支持 MySQL / SQLite 无缝切换 |
| 数据库(MVP 默认) | SQLite | 零配置,个人开发直接跑 |
| 数据库(进阶) | MySQL 8.0 | 数据量大时切换 |
| 数据处理 | Pandas, NumPy | 特征计算与清洗 |
| 传统机器学习 | LightGBM, scikit-learn | 强基线模型,特征重要性分析 |
| 深度学习(进阶) | PyTorch | 可选,用于序列/图等高级建模 |
| 大模型 API | DeepSeek (Chat) | 生成推荐逻辑与理由 |
| 前端展示 | Streamlit | 轻量看板,快速验证 |
| 任务调度 | APScheduler | 定时触发每日流程 |
| 版本控制 | Git + DVC(后续引入) | 代码与模型权重管理 |
| 日志与监控 | Python logging | 关键步骤记录,异常报警 |
每个模块的详细实现方案见 docs/mvp.md。
- data_fetcher.py – 获取涨停板池、昨日涨停表现、涨跌家数、板块涨停统计。
- data_saver.py – 数据清洗、去重、存入数据库。
- db.py – 数据库模型定义与初始化。
- features.py – 计算个股特征(封板时间、封单占比、换手率、连板高度、板块强度)。
- label_builder.py – 依据次日涨停表生成标签(涨停/非涨停)。
- train_model.py – 滚动窗口训练 LightGBM 分类器,保存模型及特征重要性。
- predict_model.py – 对今日涨停池进行概率预测,写入数据库。
- prompt_builder.py – 将市场概况、候选股(Top 20)特征及概率组合成自然语言 Prompt。
- llm_recommend.py – 调用 DeepSeek API,解析结构化推荐结果存储。
- tracker.py – 盘后计算前一日推荐股的最高收益、收盘收益并入库。
- streamlit_app.py – 可视化看板:今日推荐、历史胜率与收益曲线。
- scheduler.py – 每天 15:45 自动执行上述流程(交易日下午)。
- config.py – 统一管理数据库连接、API Key、调度时间等配置。
每个模块均可独立运行,支持通过 if __name__ == "__main__": 进行本地测试。
MVP 阶段默认使用 SQLite,零配置即可运行:
# 数据库 - MVP 默认 SQLite(零配置)
SQLITE_PATH=stock_data.db
# 或切换 MySQL(可选)
# MYSQL_URL=mysql+pymysql://root:password@localhost:3306/stock_db?charset=utf8mb4
# DeepSeek API Key
DEEPSEEK_API_KEY=sk-xxxxx
# 其他可选
SCHEDULE_TIME=15:45
AKSHARE_RETRY_COUNT=3
LOG_LEVEL=INFOpip install -r requirements.txtrequirements.txt 内容(示例):
pandas
numpy
akshare
sqlalchemy
pymysql
lightgbm
scikit-learn
streamlit
python-dotenv
requests
apscheduler
seaborn
matplotlib
stock_advisor/
├── README.md
├── docs/
│ └── mvp.md # MVP 开发详细文档
├── requirements.txt
├── .env.example
├── config.py
├── db.py
├── data_fetcher.py
├── data_saver.py
├── features.py
├── label_builder.py
├── train_model.py
├── predict_model.py
├── prompt_builder.py
├── llm_recommend.py
├── tracker.py
├── scheduler.py
├── streamlit_app.py
├── tests/ # 单元测试(Pytest)
├── models/ # 训练好的 LightGBM / PyTorch 模型
├── logs/ # 日志文件
├── notebooks/ # Jupyter 探索性分析
└── utils/ # 公共工具函数
本项目的代码生成工作将大量依靠 AI 工具(Superpowers 等)。以下是协作准则,所有输出代码必须遵守:
- 模块单一职责:每个
.py文件仅负责一个明确功能。 - 清晰接口:所有公共函数/类包含完整 type hints 和 docstring。
- 可独立执行:每个模块下方都有
if __name__ == "__main__":测试片段。 - 显式异常处理:所有网络请求、数据库操作用 try-except 包裹,记录日志。
- 无未来信息:特征计算时严禁使用当日收盘后才可确定的数据。
- 配置集中:所有可变参数通过
config.py或环境变量读取,不硬编码。 - 格式规范:遵循 PEP8,股票代码统一为 6 位字符串(例如 '000001')。
- 数据库交互:统一使用 SQLAlchemy ORM,支持一键切换 MySQL/SQLite。
- 单元测试:每一个新模块需附
tests/test_xxx.py,使用 pytest 框架。
每次开发新模块时,AI 应:
- 阅读现有的
db.py、config.py,确保接口兼容。 - 输出模块代码 + 独立测试片段 + 简要使用说明。
- 如果涉及数据格式变化,同步更新相关模块。
详细分解见 docs/mvp.md 第六节。
- 环境搭建 -> 编写
config.py,db.py,初始化数据库。 - 数据管道 ->
data_fetcher.py,data_saver.py,跑通第一份涨停数据入库。 - 特征与标签 ->
features.py,label_builder.py,构建训练数据集。 - 基础模型 ->
train_model.py,predict_model.py,得到第一版概率分数。 - LLM 集成 ->
prompt_builder.py,llm_recommend.py,获得带理由的推荐。 - 跟踪展示 ->
tracker.py,streamlit_app.py,可视化闭环。 - 自动化 ->
scheduler.py,每日无人值守运行。
这七个阶段可以顺序推进,也可以根据 AI 能力并行开发独立模块。每个阶段的验证标准参考 MVP 文档。