Kronos 模型深度测评:首个开源 K 线基础模型,在 A 股上到底能不能用?
先说结论
我花了三天时间(2026-08-11 ~ 08-13),在一台 RTX 4060 Laptop 8GB 上,对 Kronos 做了八轮零样本(未微调)回测。
Kronos 是首个开源金融 K 线基础模型,AAAI 2026 论文。
结论:Kronos-small / Kronos-base 对 A 股的短期方向预测基本没有实用价值。
方向准确率 ≈ 抛硬币,甚至低于 3 行代码的动量规则;绝对点位全面输给"预测不变"的 naive 基线。瓶颈在任务/信号本身,不在模型容量。
更准确地说,Kronos 的真实身份应该是——一个"金融序列表征器",而不是"预测器"。
下面是完整测试过程和我的主观评价。
1. Kronos 是什么
Kronos 是 shiyu-coder/Kronos 发布的首个开源金融 K 线基础模型。
- 预训练语料:45+ 全球交易所、超 120 亿根 K 线
- 主力频率:5 分钟(1 根 K 线 = 1 个 token,
max_context=512)
它的技术框架分两步:
- 专用 Tokenizer(BSQuantizer):把 OHLCV 数据量化为层级离散 token(粗 + 细),本质是 Transformer 自编码器的"重建";
- 自回归预训练:在这串 token 上做 next-token prediction。
关键点:它的训练目标是"重建 + 延续",不是"预测方向"。 这正是后面所有测试结论的总根源。
模型家族(Hugging Face 开源):
- Kronos-small:24.7M,context 512
- Kronos-base:102.3M,context 512
- Kronos-large:499.2M(未开源)
论文:arXiv:2508.02739,AAAI 2026 收录。
2. 为什么测它
我的项目想评估 Kronos 在 A 股上的真实预测能力,作为微调(方向 B)的基线。
早期日线指数回测发现:逐日方向准确率 ≈ 50%(随机),预测与实际近乎不相关。
当时推测"日线退化主因是分布外"——模型预训练在 5min,日线尺度形态规律不成立。
后续测试正是为了验证这个假设,并逐步排除其他解释。
3. 测试设计(方法论)
Walk-forward 滚动回测
把每只标的最近 900 根 K 线切成 100 个滑动窗口,每个窗口用前 400 根预测未来 5 根:
[ lookback=400 ] [ pred=5 ]
▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓│◄──预测──►│
▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓│◄───────►│ ← 每次右移 5 根
参数(八轮完全一致,保证可比):
- LOOKBACK / STEP / PRED_LEN:400 / 5 / 5
- N_STEPS:100(每标的回测步数)
- sample_count / T / top_p:20 / 1.0 / 0.9(20 条采样路径取均值)
- seed:42(固定可复现)
指标:
- 5步/5日累计方向准确率(主指标)——与 50% 随机基线对比
- 逐K线方向准确率(辅指标)——每根预测涨跌方向 vs 实际
- MAE / MAPE——绝对点位误差,与 naive 基线(预测=窗口末收盘)对比
- 简单方向基线——动量续延 / 均值回归规则
数据:
- 日线指数:7 个中证指数,csindex(akshare),2005-2026
- 日线个股:10 只 A 股,baostock,2019-2026
- 5min 个股:同 10 只,baostock,2024-2026
10 只个股覆盖白酒、保险、银行、公用、家电、新能源、有色。
数据源坑:EastMoney 分钟接口本机被断连;baostock 分钟线仅支持个股;5min 仅回溯 2024-01。
4. 八轮测试:完整过程
测试一:日线指数(7 指数,Kronos-small)
| 指数 | 5日方向% | 逐日方向% |
|---|---|---|
| 中证红利 000922 | 59.0 | 54.2 |
| 300非银 H30035 | 56.0 | 52.2 |
| 红利低波全收益 H20269 | 55.0 | 49.0 |
| 沪深300 000300 | 52.0 | 50.6 |
| 中证红利低波动 H30269 | 52.0 | 49.8 |
| 中证现金流 932365 | 44.0 | 47.4 |
| 中证500 000905 | 40.0 | 47.8 |
| 均值 | 51.1 | 50.1 |
发现:红利/防守类(59/56/55%)明显高于随机,成长/宽基(40/44%)低于随机;绝对点位全部不如 naive。
测试二:日线级别诊断
- 逐日方向均值 50.1%,不随 horizon 改善(day1~day5 全在 50% 附近)
- 预测与实际相关系数 0.072(≈0,基本无关)
- 预测偏保守:预测 |涨跌| 中位数只有实际的 0.74 倍
初步判断:可能是"分布外"(模型预训练在 5min,日线不适用)。
测试三:5min 个股(10 只)——关键转折
为验证"分布外假设",用**预训练频率(5min,分布内)**跑同一基准。
| 标的 | 5根方向% | 逐根方向% |
|---|---|---|
| 美的集团 000333 | 55.0 | 47.8 |
| 五粮液 000858 | 54.0 | 46.0 |
| 中国平安 601318 | 54.0 | 45.4 |
| 招商银行 600036 | 53.0 | 49.4 |
| 长江电力 600900 | 47.0 | 46.0 |
| 紫金矿业 601899 | 46.0 | 48.2 |
| 比亚迪 002594 | 46.0 | 49.2 |
| 贵州茅台 600519 | 41.0 | 48.8 |
| 工商银行 601398 | 40.0 | 38.0 |
| 宁德时代 300750 | 39.0 | 46.4 |
| 均值 | 47.5 | 46.5 |
发现(关键转折):5min 是预训练分布内,方向准确率反而更低(46.5%),低于日线。假设"日线退化=分布外"不成立。
测试四:同标的日线对照(10 只)
为排除"个股 vs 指数"混淆,对同 10 只股票加跑日线对照。
均值:49.9%(5日)/ 49.6%(逐日)。
发现:同标的日线方向 ≈ 随机;5min(46.5%)< 日线个股(49.6%)< 日线指数(50.1%)——信号来自标的不同(越细噪声越大),不是模型能力。
测试五:简单基线诊断(任务本身可不可预测)
核心疑问:方向 ≈ 随机,是"模型没学到东西",还是"任务本身难"?
用 3 行代码的动量/回归规则测:
- 日线指数:回归 L1 53.0%(Kronos 51.1%,随机 50%)
- 日线个股:动量 L10 53.3%(Kronos 49.9%,随机 50%)
- 5min 个股:动量 L1 50.1%(Kronos 47.5%,随机 50%)
逐标的对比(日线):Kronos 在 16/17 个标的上低于该标的最佳简单基线(差 -2 ~ -18 个百分点),唯一例外是中证红利(+2)。
发现:
- 5min 是任务地板:连动量规则都 ≈50%,短期 5min 方向本质不可预测
- 日线有弱信号(~53-57%)且傻规则已捕捉:Kronos 系统性低于动量规则——没学到方向信号
- 之前记功的红利指数 55-59%,其实是数据本身的趋势信号(傻规则同样 57-62%)
测试六:Kronos-base(102.3M)模型规模对照
排除"small 容量不够"的可能,下载 Kronos-base(4 倍参数)重跑:
- 日线指数 5日方向:small 51.1 → base 48.0(基线 ~56)
- 日线个股 5日方向:small 49.9 → base 48.5(基线 53.3)
- 绝对点位:base 更差(茅台 MAPE 3.5% vs 2.3%、五粮液 7.5% vs 3.8%)
发现:增大 4 倍参数不升反降。容量不是瓶颈。
测试七:RankIC 验证(论文核心指标的独立验证)
论文用 IC/RankIC 评估,声称 Kronos-small 价格预测 RankIC ≈ 0.025。
我在 A 股数据上独立重算:
| 数据集 | 逐K线 | 5步累计 | 横截面 |
|---|---|---|---|
| 日线指数(7) | +0.023 | +0.034 | -0.083 |
| 日线个股(10) | +0.011 | +0.031 | -0.007 |
| 5min 个股(10) | +0.029 | +0.004 | -0.022 |
审慎判断:这些 RankIC 不能视为"有信号"的证据:
- 量级太小且不显著:+0.03 远低于量化常用信号阈值;窗口高度重叠,无法拒绝"RankIC=0"
- 横截面不可信:仅 10 只/7 个指数,n≤10 下噪声极大(单日 SE≈0.33)
- 与方向≈随机自洽:RankIC 0.03 隐含的方向准确率仅 ~51%——“和论文量级相近”≠信号真实存在
- 动量对比无效:Kronos +0.031 vs 动量 +0.020 之差也在噪声内
结论:RankIC 在 A 股样本上与零无法区分,按"无可用信号"处理。
测试八:top-k 门控实验(论文核心声称的直接检验)
论文最实际的价值声称是:Kronos 的排序信号选出的 top-k 组合能产生超额收益。
扩大宇宙做门控:CSI 300 成分股确定性抽样 39 只(按代码等距取,避免挑股偏差)。
top-k 组合 5 日实际收益(100 个调仓日平均,含 SE):
| 信号 | 均值 | SE |
|---|---|---|
| Kronos | +0.19% | 0.28% |
| 动量5 | +0.13% | 0.32% |
| 动量10 | +0.53% | 0.35% |
| 随机 | +0.23% | 0.23% |
| 全宇宙(持有) | +0.26% | 0.24% |
横截面 RankIC(39 只):Kronos +0.019 ± 0.024(t≈0.8,不显著);胜率 47%(<50%)。
发现:
- Kronos 排序未转化为组合收益:top-k(+0.19%)低于随机(+0.23%)和全宇宙(+0.26%)
- 39 只横截面 RankIC 与零不可区分——更大更可信的横截面,仍复现不出论文的排序信号
- 动量10 最强(+0.53%)但也不显著
结论:门控失败,无需扩大到全量 CSI 300/800。
5. 汇总与七条核心结论
八轮测试速览:
- 日线指数:方向 51.1%——红利类弱信号,成长类反信号
- 日线诊断:逐日 50.1%——预测与实际无关(corr 0.072)
- 5min 个股:47.5%——分布内反而更差,假设被推翻
- 日线个股同标的:49.9%——≈随机,信号在标的不在模型
- 简单基线诊断:基线 53-57%——任务有弱信号,Kronos 输给傻规则 16/17
- Kronos-base 对照:48.0/48.5%——容量不是瓶颈,更大更差
- RankIC 验证:~0.03——与零不可区分,按无信号处理
- top-k 门控:+0.19% vs 随机 +0.23%——排序未转组合收益,门控失败
七条核心结论:
- 短期方向预测无实用价值:方向准确率都 ≈ 随机(46.5-51.1%),低于 3 行代码的动量规则
- “分布外"假设不成立:5min(分布内)方向反而低于日线
- 瓶颈在任务/信号,不在模型:5min 是任务地板;加大 4 倍参数不升反降
- 绝对点位全面输给 naive:Kronos 预测的是形态而非精确点位
- 论文的 RankIC 信号未复现:RankIC ~0.03 与零不可区分
- 论文的组合声称也未复现(门控失败):Kronos top-k 组合收益低于随机
- 对微调的启示:短期方向微调预期非常保守;更值得评估长周期趋势、重建质量、生成/异常检测等未测面
6. 我的评价:这个模型的实际作用
以下是基于八轮测试的主观判断,与前面的事实性数据分开,供读者独立判断。
6.1 直接回答:它不是什么
- 不是短期方向预测工具:≈抛硬币,系统性低于 3 行代码的动量规则,没有可用的交易价值
- 不是绝对点位预测工具:MAE/MAPE 全面输给 naive 基线;更大的 base 反而更差
- 不是容量问题:24.7M → 102.3M 不升反降,天花板在任务/训练目标
- RankIC 未提供正面证据:量级小、窗口重叠、无显著性支持
6.2 那它是什么:一个"金融序列表征器”,而非"预测器"
Kronos 的预训练目标——BSQuantizer 重建 + 自回归延续——本质是学会"金融序列如何生成/延续"的表征,而不是"未来会怎样"的判别能力。
Kronos 学到的是"K 线长什么样、通常怎么走",而不是"明天往哪走"。
这解释了为什么它在自己的"舒适区"(5min)方向也 ≈ 随机——短尺度方向信号本身弱,而它的训练目标根本没被设计来捕捉方向。
6.3 分层价值判断
- 交易信号(短期方向):低价值——≈随机、输给动量、base 不救、RankIC 与零不可区分
- 低频辅助因子(日线红利指数):弱价值(可选)——55-59% 是零样本下最接近可用的信号,需组合其他因子、稳健性待验证
- 特征提取 / 重建:未验证,可能是真价值——tokenizer 重建、跨市场表征未测
- 数据生成 / 异常检测:未验证,值得测——“生成器"训练目标与用途最匹配
- 研究 / 技术资产:有价值——首个开源 K 线基础模型,架构有参考意义
- 微调底座:预期保守——若微调仍是短期方向,天花板低;转向长周期/风格/形态才有意义
6.4 一句话结论
Kronos 不适合作为"A 股涨跌预测器"直接使用——它可能的(未证实的)价值在"表征与生成金融序列”,而不是"判别方向"。
“表征/生成有价值"只是基于训练目标(重建+延续)的推测,尚无实测证据;实测能确认的只有"判别方向不可用”。
如果项目目标是交易预测,应放弃在短期方向上继续投入,转向:
- 日线红利指数的低频弱信号(组合其他因子)
- 若仍想用 Kronos,转去评估重建/生成/长周期能力(先验证再谈价值)
- 或者直接改用更简单的规则模型
6.5 这个判断可能错在哪
诚实起见,列出我的评价可能失效的条件:
- 未测它的优势区:若重建/生成质量显著好,则"表征器"定位成立,但低估了它的价值;若重建也平庸,则它连好表征器都算不上
- 未测微调:若下游任务(行业/风格分类、长周期趋势)微调后显著有效,说明特征可迁移,评价需上调
- A 股只是预训练市场之一:美股/外汇等其他市场的零样本表现我没测,不能外推
- 样本局限:只测 10 只大盘股 + 7 个指数,中小市值、极端行情未覆盖
7. 局限
- 窗口不一致:5min 仅回溯 2024-01(~19 交易日);日线窗口 3.6 年。对比受窗口差异影响
- 样本量小:单只 5 步累计方向 SE≈5%,个别数字不可过度解读
- 标的选择:10 只大盘股 + 39 只 CSI 300,未覆盖中小市值
- “最佳基线"偏高:逐标的挑最优规则(样本内),但固定动量 L10(53.3%)同样高于 Kronos,结论稳健
- 门控未计交易成本:测试八为零成本(对模型更宽松),Kronos 仍未跑赢随机;计入 0.15% 成本只会更差
- 未测微调:全部为零样本
- 未测能力面:tokenizer 重建、周/月线趋势、市场状态、跨市场迁移、K线生成均未测
8. 复现命令
# 环境:Kronos .venv(推理)/ FenglaiIndex .venv(抓数据)
# 数据抓取
/home/zs/Develop/FenglaiIndex/.venv/bin/python examples/fetch_index_data.py
/home/zs/Develop/FenglaiIndex/.venv/bin/python examples/fetch_a_share_min.py
# 基准测试(--model small|base)
.venv/bin/python examples/benchmark_indices.py
.venv/bin/python examples/benchmark_minute.py --freq 5m
.venv/bin/python examples/benchmark_minute.py --freq d
# 简单方向基线诊断
.venv/bin/python examples/baseline_direction.py
# RankIC 验证(复用 benchmark 明细,无需重跑推理)
.venv/bin/python examples/rankic_test.py
# top-k 门控实验(CSI300 抽样 39 只)
/home/zs/Develop/FenglaiIndex/.venv/bin/python examples/fetch_universe_daily.py
.venv/bin/python examples/topk_gate.py
完整测试报告与复现代码见 github.com/zsdfbb/Kronos。
这篇文章是「风来的躺平日志」关于 AI 模型实测的一篇记录。我对 Kronos 的判断可能错,但测试过程是透明可复现的——数据摆在这里,结论留给读者自己下。
后续如果测了重建/生成/长周期方向,我会再更新。