stock_good 是一个本地全栈智能选股研究平台样例,目标不是直接给出买卖指令,而是把“数据接入 → 数据治理 → 因子工程 → 模型训练 → 回测评估 → 研究证据 → 模拟盘治理 → Web Research Console”串成可复现、可验证、可解释的研究闭环。
当前 README 不再按开发计划里的 foundation-final acceptance 叙述。仓库中仍保留部分 day* 文件名、脚本名和报告目录,那只是历史开发阶段留下的命名,实际使用时按下面的功能模块和调用方式理解即可。
- 本项目输出研究信号、横截面分数、候选组合、回测报告、风险解释和 RAG 证据,不构成投资建议。
- 任何真实交易前都必须经过授权数据、样本外验证、交易成本/滑点/容量评估、模拟盘、风控约束和人工复核。
- RAG/LLM 只用于证据组织、研究解释和实验假设,不允许把文本结论直接当作交易指令。
先采用“沪深300近三年日频数据”作为主线数据范围:
- 股票池:沪深300,使用点时间成分历史,避免未来成分股和幸存者偏差。
- 时间范围:滚动近三年,以最新可用交易日为结束点。
- 频率:日频为主,只处理 daily OHLCV、成交额、复权因子、指数成分历史、行业/参考维表等。
- 暂不处理:分钟、tick、盘口等高频数据。原因是本地存储优先保证日频闭环,高频数据量更大且通常需要额外供应商授权。
- 配置入口:
configs/universe/csi300.yamlconfigs/data/daily_mvp.yaml
- 数据治理要求:所有真实外部数据源必须绑定
license_id、授权状态、展示策略和导出策略;没有授权时只允许 schema/adapter 占位或 synthetic sample。
推荐真实数据落地范围:
data/
bronze/ 原始授权数据快照,按 trade_date 分区
silver/ 清洗、复权、去异常、对齐交易日后的日频数据
gold/ 因子长表、模型宽表、标签、分数、回测与报告输入
reports/ 验收、模型、回测、RAG、导出 manifest 和运维报告
data_contracts/*.schema.yaml定义行情、财务、公告、新闻、宏观、资金流、因子、标签、信号、回测、RAG claim、导出 manifest 等契约。configs/data/source_license_registry.yaml记录数据源授权、展示和导出边界。/api/licenses展示许可证策略、可用范围、导出限制和治理结果。
- 本地以 Parquet/DuckDB/Spark/Polars 组合完成轻量湖仓 PoC。
- 支持 ODS/Bronze、DWD/Silver、DWS/Gold、ADS/报告层的分层设计。
- 支持 snapshot manifest、数据版本、回填 dry-run 和不可变正式报告快照。
- 当前主线聚焦日频行情;分钟/实时流只保留 PoC 与接口边界,不作为默认数据路径。
- 数据质量检查覆盖缺失、异常、停牌、涨跌停、延迟、quarantine 和质量报告。
- 防泄漏检查覆盖 available_time、prediction_time、point-in-time join、公告/新闻发布时间和全样本归一化风险。
- 血缘记录 source、job、snapshot、report、model、RAG index 等关键节点。
- 当前实现离线因子长表与模型宽表,覆盖价格收益、动量、反转、波动率、流动性、成交量、风险暴露等类别。
- 因子长表:
data/gold/factor_daily_panel_long - 模型宽表:
data/gold/model_feature_matrix_wide - 因子必须带版本、窗口、计算时点、可用时点和 research boundary。
- 预测任务采用横截面选股:在某个交易时点对股票池打分/排序,而不是预测单只股票绝对价格。
- 默认标签方向:5d/10d 未来收益、超额收益、行业中性收益或横截面分位标签。
- baseline 包含 LightGBM 与 Qlib-compatible recorder;高级模型 adapter 覆盖 MASTER、StockMixer、HIST、TRSR 的本地研究候选形态。
- 回测输出包含 IC/RankIC、分位组合、TopK、long-short、换手、交易成本、最大回撤、Sharpe/Calmar、容量和风险暴露。
- 事件侧支持新闻/公告样例、金融文本情绪 baseline、事件因子、市场状态因子和 ablation 报告。
- 关系侧支持行业、概念、价格相关、共现、lead-lag 等关系边,生成 centrality/community 与关系传播因子。
- 图模型和深度模型当前是研究候选 adapter,不等同于官方完整生产训练。
- 支持 paper、factor card、strategy card、experiment card、backtest report、failure case、market review、announcement、news、research note、relation case 等研究资料类型。
- 证据粒度到 claim,包含 citation span、license、event_time、publish_time、available_time、valid_from/valid_to、evidence strength 和 index version。
- as-of 检索默认要求
available_time <= prediction_time;复盘型 hindsight 结论必须显式标注 retrospective。
- 模拟盘只用于研究验证,不连接真实券商下单。
- 报告状态机覆盖 draft、review、approved、exportable、exported、revoked。
- 导出前必须通过 data quality、leakage、license gate、RAG citation、forbidden wording 等门禁。
- 审计日志使用 append-only 语义,导出 manifest 包含 run/data/factor/model/label/RAG source version、watermark、disclaimer、file_hash 和 audit_id。
前端是 Next.js Research Console,后端是 FastAPI。主要页面:
/ 官网首页
/capabilities 能力说明
/methodology 方法论
/data-security 数据与安全边界
/backtest-risk 回测与风险
/rag-evidence RAG 证据说明
/architecture-roadmap 架构路线
/login 登录入口占位
/dashboard 研究总览
/data-quality 数据质量与防泄漏
/lineage 血缘
/lakehouse 湖仓与 snapshot
/spark-jobs Spark/批处理任务
/factors 因子库
/features Feature Store
/scores 模型分数与排序
/backtests 回测与风险
/experiments 实验记录
/realtime 实时/分钟 PoC 状态,默认不作为主线数据
/flink-jobs Flink-style PoC 状态
/graph 股票关系图
/models 模型与高级 adapter
/rag 研究证据
/simulation 模拟盘研究账户
/reports 报告状态机与导出
/ops 运维、配置哈希、回填、备份恢复
/settings/licenses 数据许可证
/settings/users RBAC 用户/角色
/settings/audit 审计日志
backend/ FastAPI 后端与 API 路由
configs/ 项目、环境、股票池、数据、因子、标签、模型、回测、流式和 Spark 配置
data/ 本地数据、样例数据、湖仓分层和生成结果
data_contracts/ 数据契约 schema
deploy/ Docker Compose、代理、监控、备份恢复和 K8s 草案
docs/ 架构、验收、演示脚本、ADR 和风险登记
frontend/ Next.js Research Console
models/ 研究闭环、baseline、高级模型 adapter 和实验输出
ops/ 配置解析、DAG、回填、可观测性、部署与最终验收 payload
quality/ 数据质量、防泄漏、血缘和可信度逻辑
rag/ claim 级 RAG schema、检索、评测和引用卡片
reports/ 验收报告、质量报告、回测报告、RAG 报告和导出 manifest
scripts/ 一键验收、数据流水线、运维和 smoke 脚本
simulation/ 模拟盘、风控、RBAC、license/report governance
spark/ Spark 本地批处理与因子物化任务
tests/ pytest 测试
warehouse_schema/ 数仓表结构草案
以下命令假设在 Windows Git Bash/MSYS 环境中运行,路径使用 /c/Users/...。
cd /c/Users/blankxxc/Desktop/work_space/stock_good
uv sync
cd frontend
npm install如果本机已经有项目虚拟环境,也可以直接使用:
./.venv/Scripts/python.exe --versioncd /c/Users/blankxxc/Desktop/work_space/stock_good
./.venv/Scripts/python.exe -m uvicorn backend.app.main:app --host 127.0.0.1 --port 8000健康检查:
curl http://127.0.0.1:8000/health常用 API:
GET /health
GET /api/dashboard
GET /api/data-quality
GET /api/lineage
GET /api/lakehouse
GET /api/spark-jobs
GET /api/factors
GET /api/features
GET /api/scores
GET /api/backtests
GET /api/experiments
GET /api/realtime
GET /api/flink-jobs
GET /api/graph
GET /api/models
GET /api/rag
GET /api/simulation
GET /api/reports
GET /api/ops
GET /api/orchestration
GET /api/backfill
GET /api/observability
GET /api/deployment
GET /api/final-acceptance
GET /api/licenses
GET /api/admin
GET /api/audit
调用示例:
curl http://127.0.0.1:8000/api/factors
curl http://127.0.0.1:8000/api/backtests
curl http://127.0.0.1:8000/api/rag
curl http://127.0.0.1:8000/api/opsPython 内部调用示例:
from fastapi.testclient import TestClient
from backend.app.main import app
client = TestClient(app)
print(client.get("/health").json())
print(client.get("/api/factors").json())cd /c/Users/blankxxc/Desktop/work_space/stock_good/frontend
npm run validate:routes
npm run dev浏览器打开:
http://127.0.0.1:3000/
生产构建:
cd /c/Users/blankxxc/Desktop/work_space/stock_good/frontend
npm run build当前主线以沪深300近三年日频为目标口径。仓库里的样例脚本会生成/验证本地可复现样例数据;接入真实授权数据时,应把 adapter 替换为正式数据源,同时保持相同 schema、license gate 和 snapshot manifest。
cd /c/Users/blankxxc/Desktop/work_space/stock_good
./.venv/Scripts/python.exe scripts/run_lakehouse_pipeline.py
./.venv/Scripts/python.exe spark/jobs/bronze_to_silver_market_daily.py
./.venv/Scripts/python.exe spark/jobs/bronze_to_silver_reference.py
./.venv/Scripts/python.exe spark/jobs/silver_to_gold_base_panels.py说明:这些脚本名中仍包含历史阶段命名,但它们现在代表“日频批处理/湖仓/基础面板”入口,不需要按开发天数理解。
轻量核心验收:
cd /c/Users/blankxxc/Desktop/work_space/stock_good
./.venv/Scripts/python.exe scripts/check_final_acceptance_acceptance.py
./.venv/Scripts/python.exe -m pytest tests/test_governance_simulation_simulation_governance.py tests/test_ops_deployment_ops_deployment.py tests/test_final_acceptance_final_acceptance.py -q完整 pytest:
cd /c/Users/blankxxc/Desktop/work_space/stock_good
./.venv/Scripts/python.exe -m pytest -q前端验证:
cd /c/Users/blankxxc/Desktop/work_space/stock_good/frontend
npm run validate:routes
npm run buildDocker Compose 配置检查:
cd /c/Users/blankxxc/Desktop/work_space/stock_good
docker compose -f deploy/docker/docker-compose.yml config --services备份恢复 smoke:
cd /c/Users/blankxxc/Desktop/work_space/stock_good
sh deploy/backup/backup_ops_deployment.sh --smoke
sh deploy/backup/restore_ops_deployment.sh --smoke沪深300近三年日频落地时,优先保证以下字段:
symbol, trade_date, open, high, low, close, volume, amount, adj_factor,
index_code, membership_start_date, membership_end_date,
industry_code, industry_name, available_time, source, license_id
接入顺序建议:
- 准备沪深300点时间成分历史,不要用当前成分股倒推历史。
- 准备近三年日频 OHLCV 与成交额。
- 准备复权因子,明确前复权/后复权/不复权口径。
- 准备行业/指数/交易日历等参考维表。
- 写入 Bronze 原始层,保留 source、ingest_time、license_id 和原始文件 hash。
- 清洗到 Silver,处理缺失、停牌、涨跌停、异常值、交易日对齐。
- 生成 Gold 因子长表、模型宽表、标签和回测输入。
- 跑防泄漏、质量、许可证和 snapshot manifest 检查。
- 只在通过门禁后进入模型训练、回测、RAG 解释和报告导出。
分钟频率后续再处理时,需要单独扩展:
- 存储容量预算和分区策略;
- 供应商授权与展示/导出限制;
- Kafka/Flink 或离线分钟批处理路径;
- online/offline feature consistency 检查;
- 更严格的交易成本、滑点、延迟和容量评估。
- 主配置:
configs/base.yaml - 股票池:
configs/universe/csi300.yaml - 数据集:
configs/data/daily_mvp.yaml - 因子:
configs/factor/alpha_mvp_v001.yaml - 标签:
configs/label/label_5d_10d_v001.yaml - 模型:
configs/model/lightgbm_baseline.yaml - 回测:
configs/backtest/top50_weekly_vwap.yaml - 编排:
ops/ops_deployment_ops.py使用prefect-local语义生成 DAG、config hash、backfill dry-run、observability 和 deployment payload。
/api/ops、/api/orchestration、/api/backfill、/api/observability、/api/deployment 可用于查看运维状态。
- 不要提交真实 API key、token、账号密码、数据供应商凭证或未授权原始数据。
- 不要把单次回测、单一年份、单个随机种子或明星模型结果写成收益承诺。
- 不要使用未来指数成分、未来公告发布时间、全样本归一化或同收盘价交易假设。
- 导出报告必须附带研究边界、数据版本、模型版本、回测区间、风险提示、license gate 和 export manifest。
- 用授权数据源替换 synthetic adapter,先只跑沪深300近三年日频。
- 为真实数据新增数据导入脚本或 adapter,并保持现有 schema 与 license gate。
- 把 Web Console 的数据口径文案统一改成“沪深300近三年日频”。
- 完成日频闭环后,再评估分钟数据的存储、授权、流式架构和运维成本。
- 在真实数据上重新跑全量防泄漏、质量、回测、RAG 引用和导出门禁。