用Kronos预测股价:金融时序模型的配置、微调与回测指南
【免费下载链接】KronosKronos: A Foundation Model for the Language of Financial Markets项目地址: https://gitcode.com/GitHub_Trending/kronos14/Kronos
你手上有一只股票的历史K线,想看接下来一段时间的价格走势。Kronos 是一个面向金融K线的开源基础模型,能对 OHLCV 时序做预测,并支持微调和回测评估。想用最少步骤跑通预测、训练和回测,这篇文章就是写给你的。
📊 先看效果
上图是Kronos对5分钟K线的预测结果:蓝色是真实值,红色是模型输出。可以看到预测曲线跟住了真实走势的大方向,量价两个子图一起给出。
这是微调后模型的回测图:横轴是时间,纵轴是累计收益率。两条线分别代表模型策略和基准指数,差值就是模型带来的超额收益。
动手前30秒检查
| 检查项 | 要求 | 说明 |
|---|---|---|
| Python | 3.10 及以上 | 官方脚本的最低要求 |
| 依赖 | requirements.txt | 含 PyTorch ≥ 2.0、NumPy、Pandas 等 |
| Qlib | pip install pyqlib | 仅走 A 股 Qlib 数据路线时需要 |
| 算力 | CPU 可预测,CUDA 更佳 | 微调支持torchrun多卡 |
| 模型规格 | mini 4.1M / small 24.7M / base 102.3M | small 和 base 最大上下文 512,mini 为 2048 |
🚀 路线A|十分钟跑通示例
最小路径只有三步:
git clone https://gitcode.com/GitHub_Trending/kronos14/Kronos cd Kronos pip install -r requirements.txt然后运行示例脚本:
python examples/prediction_example.py示例脚本里做了这几件事:加载 tokenizer 和Kronos-small模型、切出 400 个历史点作为输入、预测未来 120 个点、画图对比。注意脚本默认从examples/data/XSHG_5min_600977.csv读数据,换成自己的 CSV 时记得改路径,并保留timestamps、open、high、low、close这几列。
预测参数建议从T=1.0、top_p=0.9、sample_count=1开始,含义分别是采样温度、核采样概率、生成路径数(多条会取平均)。
⚙️ 路线B|用自己的数据训练
数据格式与预处理
CSV 数据需要这些列,volume、amount没有可以填 0:
| 列名 | 含义 |
|---|---|
timestamps | 时间戳 |
open/high/low/close | OHLC 价格 |
volume/amount | 成交量、成交额(可选) |
仓库里有一个标准样例可以对照格式:data/HK_ali_09988_kline_5min_all.csv。
Qlib 路线(finetune/ 目录)额外跑一次预处理脚本,它会把原始行情切成训练/验证/测试三份 pickle:
python finetune/qlib_data_preprocess.py训练与微调
两条路线都能微调,顺序都是先 tokenizer、再 predictor。
Qlib 路线(多卡用torchrun,把NUM_GPUS换成你的卡数):
torchrun --standalone --nproc_per_node=NUM_GPUS finetune/train_tokenizer.py torchrun --standalone --nproc_per_node=NUM_GPUS finetune/train_predictor.py对应脚本是 train_tokenizer.py 和 train_predictor.py。
CSV 路线更简单,finetune_csv/ 目录里一条命令顺序训练两个模块:
cd finetune_csv python train_sequential.py --config configs/config_ali09988_candle-5min.yaml关键参数怎么选
Qlib 路线的默认值集中在 finetune/config.py:
| 参数 | 默认值 | 含义 |
|---|---|---|
lookback_window | 90(CSV 示例用 512) | 输入的历史步数 |
predict_window | 10(CSV 示例用 48) | 预测的未来步数 |
max_context | 512 | 模型上下文长度上限 |
epochs | 30 | 训练轮数 |
batch_size | 50 | 每卡批次大小 |
tokenizer_learning_rate | 2e-4 | tokenizer 学习率 |
predictor_learning_rate | 4e-5 | predictor 学习率 |
记忆点:lookback_window别超过max_context,学习率 predictor 要比 tokenizer 小一个量级。
📋 效果怎么评估
预测输出是一个 DataFrame,包含open、high、low、close、volume、amount,索引就是你在y_timestamp里给的未来时间戳。可以直接画线,也可以和真实值逐项对比误差。
回测看两点:
- 累计收益率曲线:qlib_test.py 会打印策略对基准(CSI300 对应
SH000300)的超额收益,并出图。 - 回测参数:默认持有 50 只(
backtest_n_symbol_hold)、每日剔除 5 只(backtest_n_symbol_drop)、最少持有 5 天(backtest_hold_thresh),推理时T=0.6、sample_count=5,即多条采样路径取平均。
注意官方提示:这条回测流程是演示用的简化 top-K 策略,不是生产级量化系统,别把曲线直接当成实盘收益。
🌐 进阶
- Web 界面:webui/ 基于 Flask,
cd webui && python run.py后访问http://localhost:7070,浏览器里选数据、选窗口、看预测。 - 批量预测:
predictor.predict_batch可一次并行预测多只股票,要求各序列的lookback和pred_len一致,参考 prediction_batch_example.py。 - 自定义数据:Qlib 路线的
QlibDataset只是示例,换数据源时自行调整加载与切分逻辑。
避坑速查表
| 现象 | 可能原因 | 解决办法 |
|---|---|---|
| 训练显存不足 | batch_size过大 | 调小批次,或用accumulation_steps做梯度累积 |
| 训练速度慢 | 用了 CPU 或单卡 | 装 CUDA 版 PyTorch,用torchrun多卡或 DDP |
| 模型加载失败 | 首次需从 Hugging Face 下载 | 先手动下好模型,配置里填本地路径 |
| WebUI 端口被占用 | 7070 已被使用 | 修改 webui/app.py 里的端口号 |
| 预测曲线不稳定 | 数据缺列或训练不足 | 核对 OHLCV 列完整性,适当增加epochs |
先跑一遍路线 A 的示例确认环境没问题,再用你自己的数据走路线 B。更多细节见 README 和 finetune_csv/README_CN.md。
【免费下载链接】KronosKronos: A Foundation Model for the Language of Financial Markets项目地址: https://gitcode.com/GitHub_Trending/kronos14/Kronos
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考