# stock_predict **Repository Path**: nicholasgub/stock_predict ## Basic Information - **Project Name**: stock_predict - **Description**: No description available - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: main - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2026-06-19 - **Last Updated**: 2026-06-19 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 股票相对强弱预测基线 这个项目提供一套面向 A 股概念板块的神经网络训练基线,用来根据以下历史信息预测未来相对强弱: - 个股历史日 K - 板块历史日 K - 上证指数历史日 K - 市场平均股价 - 市场广度特征 当前版本的核心升级点: - 模型从 GRU 升级为三路 Transformer - 目标从绝对涨跌改为未来超额收益和横截面相对强弱 - 验证方式从单次切分改为 walk-forward 滚动训练 - 输入加入成交额、换手率、流通市值和市场广度特征 ## 项目结构 ```text stock_predict/ |-- backend/ | |-- app.py | `-- Dockerfile |-- frontend/ | |-- index.html | |-- app.css | |-- app.js | |-- nginx.conf | `-- Dockerfile |-- requirements.txt |-- scripts/ | |-- fetch_akshare_data.py | |-- make_synthetic_data.py | |-- backtest.py | |-- predict_ohlc.py | |-- predict.py | |-- run_webapp.py | |-- train.py | |-- train_ohlc_forecaster.py | `-- train_with_akshare.py |-- data/ | `-- akshare/ `-- src/ `-- stock_predict/ |-- akshare_data.py |-- backtest.py |-- dataset.py |-- features.py |-- forecast_dataset.py |-- forecast_model.py |-- forecast_predict.py |-- forecast_train.py |-- indicators.py |-- model.py |-- predict.py |-- train.py `-- webapp.py ``` ## 训练目标 当前训练不再直接预测“未来涨/跌”,而是输出两个目标: - `future_excess_return` 含义:未来收益率减去同一天股票池等权平均未来收益率 - `future_outperform` 含义:未来超额收益是否进入当日横截面前 30% 这更接近选股和排序问题,而不是简单方向判断。 ## 输入特征 ### 个股特征 - 价格收益率特征 - 振幅、跳空、量能变化 - 成交额变化 - 换手率变化 - 流通市值变化 ### 板块特征 - 板块价格收益率 - 板块振幅与量能特征 - 板块成交额变化 ### 市场特征 - 上证指数价格特征 - 平均股价特征 - 市场广度特征: - 等权收益率 - 上涨家数占比 - 下跌家数占比 - 净上涨占比 - 中位数价格 - 横截面波动率 - 平均换手率 ## 数据格式 ### `stock_prices.csv` 必需字段: - `date` - `symbol` - `sector_id` - `open` - `high` - `low` - `close` - `volume` 推荐字段: - `amount` - `turnover` - `float_market_cap` ### `sector_prices.csv` 必需字段: - `date` - `sector_id` - `open` - `high` - `low` - `close` - `volume` 可选字段: - `amount` - `turnover` ### `market_prices.csv` 必需字段: - `date` - `open` - `high` - `low` - `close` - `volume` 可选字段: - `amount` - `avg_price` ## 安装依赖 ```bash pip install -r requirements.txt ``` ## 从 AKShare 拉取真实数据 ```powershell python scripts/fetch_akshare_data.py ` --boards AI智能体 AI应用 ` --start-date 20240101 ` --end-date 20260619 ` --output-dir data/akshare ``` 当前实现使用混合源: - 概念板块列表、板块历史和板块成分股:同花顺接口 - 个股日线:新浪接口 - 上证指数:新浪 + 腾讯补充成交额 输出文件: - `data/akshare/stock_prices.csv` - `data/akshare/sector_prices.csv` - `data/akshare/market_prices.csv` - `data/akshare/stock_universe.csv` - `data/akshare/fetch_metadata.json` 其中 `stock_universe.csv` 会保存: - `symbol` - `name` - `sector_id` 如果你之前抓过数据但没有股票名称,可以单独回填: ```powershell python scripts/build_stock_universe.py ` --fetch-metadata data/akshare/fetch_metadata.json ` --output-csv data/akshare/stock_universe.csv ` --stock-csv data/akshare/stock_prices.csv ``` ## 直接训练 ```powershell python scripts/train.py ` --stock-csv data/akshare/stock_prices.csv ` --sector-csv data/akshare/sector_prices.csv ` --market-csv data/akshare/market_prices.csv ` --output-dir artifacts/transformer_walk_forward ` --epochs 4 ` --num-walk-forward-folds 3 ` --val-window-days 40 ` --step-days 40 ` --min-train-days 120 ` --train-window-days 200 ``` ## 拉数后直接训练 ```powershell python scripts/train_with_akshare.py ` --boards AI智能体 AI应用 ` --start-date 20240101 ` --end-date 20260619 ` --data-dir data/akshare ` --output-dir artifacts/transformer_walk_forward ``` ## 常用参数 - `--sequence-length` 回看窗口长度 - `--horizon` 预测未来多少个交易日 - `--outperform-threshold` 横截面强势标签阈值,默认前 30% - `--num-walk-forward-folds` walk-forward 折数 - `--train-window-days` 每折训练窗口长度 - `--val-window-days` 每折验证窗口长度 - `--hidden-size` Transformer 隐层维度 - `--num-heads` Transformer 多头数 ## 输出结果 训练后会生成: - `best_model_fold_*.pt` - `history_fold_*.json` - `history_all_folds.json` - `dataset_metadata.json` - `walk_forward_summary.json` 其中 `walk_forward_summary.json` 会汇总每个滚动折的: - 最优验证损失 - 相对强弱准确率 - 超额收益 MAE - RankIC ## 每日预测与选股输出 使用最佳模型做当日预测: ```powershell python scripts/predict.py ` --model-path artifacts/transformer_walk_forward/best_model_fold_1.pt ` --stock-csv data/akshare/stock_prices.csv ` --sector-csv data/akshare/sector_prices.csv ` --market-csv data/akshare/market_prices.csv ` --output-dir artifacts/daily_predictions ` --top-k 10 ``` 可选参数: - `--as-of-date` 指定预测日期,格式 `YYYY-MM-DD` - `--top-k` 输出前多少只股票作为每日选股名单 预测后会输出两份文件: - `daily_selection_YYYY-MM-DD.csv` 包含全部候选股票的分数、超额收益预测和是否入选 - `daily_selection_YYYY-MM-DD.json` 包含当日 top-k 选股摘要 ## 回测脚本 使用训练好的 checkpoint 对历史样本做截面打分,并按固定调仓频率回测 top-k 选股策略: ```powershell python scripts/backtest.py ` --model-path artifacts/transformer_walk_forward/best_model_fold_1.pt ` --stock-csv data/akshare/stock_prices.csv ` --sector-csv data/akshare/sector_prices.csv ` --market-csv data/akshare/market_prices.csv ` --output-dir artifacts/backtests ` --top-k 10 ` --cost-bps 10 ``` 常用参数: - `--start-date` 回测起始日,默认使用 checkpoint 对应折的验证起点 - `--end-date` 回测结束日,默认使用当前可评估样本的最后一天 - `--score-column` 用 `rank_score` 或 `predicted_excess_return` 排序选股 - `--rebalance-every` 调仓步长。默认 `0` 表示使用训练时的 `horizon`,即非重叠持有周期 - `--cost-bps` 每次调仓扣减的单边成本,单位 bps 限制说明: - 当前基线只支持 `rebalance_every >= horizon`,不支持重叠持仓回测 - 交易成本目前按每次调仓固定扣减,尚未建模真实换手 回测后会输出三份文件: - `backtest_daily_YYYY-MM-DD_to_YYYY-MM-DD.csv` 每次调仓的策略收益、基准收益、超额收益和净值曲线 - `backtest_positions_YYYY-MM-DD_to_YYYY-MM-DD.csv` 每次调仓入选的股票、排名、预测分数和对应未来收益 - `backtest_summary_YYYY-MM-DD_to_YYYY-MM-DD.json` 汇总最终净值、最大回撤、命中率、跑赢基准比例等指标 ## 多步 OHLC 预测模型 如果要真正预测未来 5 日或 10 日日 K 线,而不是只输出强弱分数,需要单独训练多步 OHLC 预测模型: ```powershell python scripts/train_ohlc_forecaster.py ` --stock-csv data/akshare/stock_prices.csv ` --sector-csv data/akshare/sector_prices.csv ` --market-csv data/akshare/market_prices.csv ` --output-dir artifacts/ohlc_forecaster ` --sequence-length 30 ` --prediction-length 10 ` --epochs 20 ``` 说明: - 默认训练一个 `10` 日多步模型,系统里既可以取前 `5` 日,也可以取前 `10` 日 - 输入仍然使用个股、板块、市场三路特征 - 输出是未来连续多日的 `open/high/low/close` 路径,不再是单个强弱标签 训练后会生成: - `artifacts/ohlc_forecaster/best_model.pt` - `artifacts/ohlc_forecaster/history.json` - `artifacts/ohlc_forecaster/summary.json` - `artifacts/ohlc_forecaster/dataset_metadata.json` ## 单股 OHLC 预测 训练好模型后,可以直接对单只股票输出未来 5 日或 10 日日 K 线: ```powershell python scripts/predict_ohlc.py ` --model-path artifacts/ohlc_forecaster/best_model.pt ` --stock-csv data/akshare/stock_prices.csv ` --sector-csv data/akshare/sector_prices.csv ` --market-csv data/akshare/market_prices.csv ` --symbol 000988 ` --horizon 5 ` --output-dir artifacts/ohlc_predictions ``` 输出文件: - `forecast__5d.csv` 或 `forecast__10d.csv` - `forecast__5d.json` 或 `forecast__10d.json` ## 前后端分离系统 当前系统已经改为前后端分离模式: - `frontend/` 独立前端工程,使用静态 SPA 方式运行 - `backend/` 独立后端 API 服务,负责数据读取、图表生成、异步预测任务和 WebSocket 推送 系统会显示 AI 板块股票列表;点击股票后可查看: - 历史日 K 线 - 成交量 - 换手率 - MACD 曲线 - KDJ 曲线 - 点击按钮后异步发起的未来 5 日或 10 日预测 K 线 - 基于预测 K 线重新计算后的 MACD / KDJ - 预测过程中的实时进度条 前端不再使用 HTTP 轮询,而是通过 WebSocket 接收任务进度推送。 说明: - 如果不显式传 `--forecast-model-path`,系统会优先尝试自动读取 `artifacts/ohlc_forecaster/best_model.pt` - 系统会优先显示真实股票名称;名称来源优先级是 `stock_universe.csv`,其次是 `stock_prices.csv` 中的 `name` 列 - 未来预测日期目前按工作日外推,不含交易所节假日校准 ## 后端 API 前端默认调用以下接口: - `GET /api/healthz` - `GET /api/sectors` - `GET /api/stocks` - `GET /api/stocks/` - `GET /api/stocks//chart` - `POST /api/predictions` - `GET /api/predictions/` - `WS /ws/predictions/` 异步预测流程: 1. 前端调用 `POST /api/predictions` 提交 `symbol + horizon` 2. 后端创建后台任务并立即返回 `task_id` 3. 前端建立 `WS /ws/predictions/` 连接 4. 后端实时推送 `status/progress/message` 5. 任务完成后,前端自动刷新预测图和预测表格 后端本地启动: ```powershell python backend/app.py ` --stock-csv data/akshare/stock_prices.csv ` --sector-csv data/akshare/sector_prices.csv ` --market-csv data/akshare/market_prices.csv ` --stock-universe-csv data/akshare/stock_universe.csv ` --forecast-model-path artifacts/ohlc_forecaster/best_model.pt ` --host 127.0.0.1 ` --port 8000 ``` ## Docker 运行 推荐用 Docker 同时启动独立前端和独立后端: ```powershell docker compose up --build -d ``` 访问地址: - 前端:`http://127.0.0.1:3000/` - 后端:`http://127.0.0.1:8000/` 说明: - `stock-predict-frontend` 使用 `nginx` 托管独立前端工程,并反向代理 `/api` 与 `/ws` - `stock-predict-backend` 使用 `Flask + WebSocket` 提供独立后端服务 - 后端容器会挂载当前仓库下的 `data/` 和 `artifacts/`,因此会直接复用你本地训练好的模型和数据 - 默认读取: - `data/akshare/stock_prices.csv` - `data/akshare/sector_prices.csv` - `data/akshare/market_prices.csv` - `data/akshare/stock_universe.csv` - `artifacts/ohlc_forecaster/best_model.pt` - 停止容器: ```powershell docker compose down ``` ## 风险提示 这是一套研究基线,不是可直接实盘的交易系统。真正用于交易前,还需要补: - 交易成本和滑点建模 - 停牌与涨跌停约束 - 更长周期和更多市场风格的 walk-forward 验证 - 实盘可用的预测与调仓执行链路