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

它的技术框架分两步:

  1. 专用 Tokenizer(BSQuantizer):把 OHLCV 数据量化为层级离散 token(粗 + 细),本质是 Transformer 自编码器的"重建";
  2. 自回归预训练:在这串 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日方向%逐日方向%
中证红利 00092259.054.2
300非银 H3003556.052.2
红利低波全收益 H2026955.049.0
沪深300 00030052.050.6
中证红利低波动 H3026952.049.8
中证现金流 93236544.047.4
中证500 00090540.047.8
均值51.150.1

发现:红利/防守类(59/56/55%)明显高于随机,成长/宽基(40/44%)低于随机;绝对点位全部不如 naive。

测试二:日线级别诊断

  • 逐日方向均值 50.1%,不随 horizon 改善(day1~day5 全在 50% 附近)
  • 预测与实际相关系数 0.072(≈0,基本无关)
  • 预测偏保守:预测 |涨跌| 中位数只有实际的 0.74 倍

初步判断:可能是"分布外"(模型预训练在 5min,日线不适用)。

测试三:5min 个股(10 只)——关键转折

为验证"分布外假设",用**预训练频率(5min,分布内)**跑同一基准。

标的5根方向%逐根方向%
美的集团 00033355.047.8
五粮液 00085854.046.0
中国平安 60131854.045.4
招商银行 60003653.049.4
长江电力 60090047.046.0
紫金矿业 60189946.048.2
比亚迪 00259446.049.2
贵州茅台 60051941.048.8
工商银行 60139840.038.0
宁德时代 30075039.046.4
均值47.546.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)。

发现:

  1. 5min 是任务地板:连动量规则都 ≈50%,短期 5min 方向本质不可预测
  2. 日线有弱信号(~53-57%)且傻规则已捕捉:Kronos 系统性低于动量规则——没学到方向信号
  3. 之前记功的红利指数 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 不能视为"有信号"的证据:

  1. 量级太小且不显著:+0.03 远低于量化常用信号阈值;窗口高度重叠,无法拒绝"RankIC=0"
  2. 横截面不可信:仅 10 只/7 个指数,n≤10 下噪声极大(单日 SE≈0.33)
  3. 与方向≈随机自洽:RankIC 0.03 隐含的方向准确率仅 ~51%——“和论文量级相近”≠信号真实存在
  4. 动量对比无效: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%)。

发现:

  1. Kronos 排序未转化为组合收益:top-k(+0.19%)低于随机(+0.23%)和全宇宙(+0.26%)
  2. 39 只横截面 RankIC 与零不可区分——更大更可信的横截面,仍复现不出论文的排序信号
  3. 动量10 最强(+0.53%)但也不显著

结论门控失败,无需扩大到全量 CSI 300/800。


5. 汇总与七条核心结论

八轮测试速览:

  1. 日线指数:方向 51.1%——红利类弱信号,成长类反信号
  2. 日线诊断:逐日 50.1%——预测与实际无关(corr 0.072)
  3. 5min 个股:47.5%——分布内反而更差,假设被推翻
  4. 日线个股同标的:49.9%——≈随机,信号在标的不在模型
  5. 简单基线诊断:基线 53-57%——任务有弱信号,Kronos 输给傻规则 16/17
  6. Kronos-base 对照:48.0/48.5%——容量不是瓶颈,更大更差
  7. RankIC 验证:~0.03——与零不可区分,按无信号处理
  8. top-k 门控:+0.19% vs 随机 +0.23%——排序未转组合收益,门控失败

七条核心结论:

  1. 短期方向预测无实用价值:方向准确率都 ≈ 随机(46.5-51.1%),低于 3 行代码的动量规则
  2. “分布外"假设不成立:5min(分布内)方向反而低于日线
  3. 瓶颈在任务/信号,不在模型:5min 是任务地板;加大 4 倍参数不升反降
  4. 绝对点位全面输给 naive:Kronos 预测的是形态而非精确点位
  5. 论文的 RankIC 信号未复现:RankIC ~0.03 与零不可区分
  6. 论文的组合声称也未复现(门控失败):Kronos top-k 组合收益低于随机
  7. 对微调的启示:短期方向微调预期非常保守;更值得评估长周期趋势、重建质量、生成/异常检测等未测面

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 股涨跌预测器"直接使用——它可能的(未证实的)价值在"表征与生成金融序列”,而不是"判别方向"。

“表征/生成有价值"只是基于训练目标(重建+延续)的推测,尚无实测证据;实测能确认的只有"判别方向不可用”。

如果项目目标是交易预测,应放弃在短期方向上继续投入,转向:

  1. 日线红利指数的低频弱信号(组合其他因子)
  2. 若仍想用 Kronos,转去评估重建/生成/长周期能力(先验证再谈价值)
  3. 或者直接改用更简单的规则模型

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 的判断可能错,但测试过程是透明可复现的——数据摆在这里,结论留给读者自己下

后续如果测了重建/生成/长周期方向,我会再更新。