一句话理解:像 LLM 理解语言一样理解 K 线——Kronos 把金融时间序列"翻译"成 token,用 next-token-prediction 范式做零样本预测。
读完本文你将了解:Kronos 的核心架构 | 5 分钟上手预测 | 技术原理深度拆解 | 适用场景与局限
🎯 这个项目解决什么问题?
金融时间序列预测长期以来是个"手艺活"——传统方法需要针对每个交易品种单独训练模型,从 ARIMA 到 LSTM 再到 Transformer,每换一个标的就要重新调参、重新训练。更麻烦的是,这些模型在跨市场、跨品种的泛化能力极差:在 BTC 上训练的好模型,换到 A 股上就水土不服。
Kronos 想做的事情很直白:能不能像 LLM 预训练那样,先在一个巨大的多市场 K 线语料上预训练一个基础模型,然后零样本(zero-shot)泛化到任意市场?
答案是:能,而且效果出奇的好。在公开基准上,Kronos 的价格序列预测 RankIC 比最好的 TSFM 高 93%,比最好的非预训练基线高 87%;波动率预测 MAE 降低 9%,合成 K 线生成 fidelity 提升 22%。
这个项目已被AAAI 2026接收,代码和模型权重完全开源。
🔧 快速上手(动手环节)
安装
pipinstall-rrequirements.txt# 依赖: torch, pandas, numpy, huggingface_hub, einops, tqdm5 行代码做预测
Kronos 提供了KronosPredictor封装类,从加载模型到输出预测只需几行:
importpandasaspdfrommodelimportKronos,KronosTokenizer,KronosPredictor# 1. 加载预训练模型和分词器tokenizer=KronosTokenizer.from_pretrained("NeoQuasar/Kronos-Tokenizer-base")model=Kronos.from_pretrained("NeoQuasar/Kronos-small")# 2. 创建预测器predictor=KronosPredictor(model,tokenizer,max_context=512)# 3. 准备数据(必须有 open/high/low/close 列)df=pd.read_csv("./data/BTC_5min.csv")df['timestamps']=pd.to_datetime(df['timestamps'])lookback=400# 用过去 400 根 K 线pred_len=120# 预测未来 120 根x_df=df.loc[:lookback-1,['open','high','low','close','volume','amount']]x_timestamp=df.loc[:lookback-1,'timestamps']y_timestamp=df.loc[lookback:lookback+pred_len-1,'timestamps']# 4. 预测pred_df=predictor.predict(df=x_df,x_timestamp=x_timestamp,y_timestamp=y_timestamp,pred_len=pred_len,T=1.0,top_p=0.9)print(pred_df.head())输出是一张完整的未来 K 线表——open, high, low, close, volume, amount,可以直接对接你的交易策略。
⚙️ 技术原理
Kronos 的核心创新在于两阶段架构:
第一阶段:专用 Tokenizer
金融 K 线和自然语言有个根本差异:语言是离散的(词汇表有限),K 线是连续的(价格是浮点数)。Kronos 的突破口是设计了一个层次化二元球面量化器(Binary Spherical Quantizer),将 OHLCV 连续数据量化为两级离散 token:
- s1 token(粗粒度):捕捉整体趋势方向——涨、跌、盘整
- s2 token(细粒度):在 s1 确定的趋势内,描述具体的价格波动细节
这种层次化设计借鉴了 VQ-VAE 的思想,但 Kronos 在量化方式上做了关键改进:使用**球面量化(spherical quantization)**替代传统的欧氏距离量化,在高维空间中获得更好的保真度。
第二阶段:自回归 Transformer
量化后的 token 序列被送入一个 decoder-only Transformer,训练目标就是标准的next-token-prediction——给定历史 token 序列,预测下一个 token。
这里有个精妙的设计:DependencyAwareLayer(依赖感知层)。s2 的预测不仅依赖历史序列,还依赖当前步骤预测出的 s1 token。也就是说,Kronos 先决定"接下来是涨还是跌",再决定"具体涨多少",形成层次化决策链。
预训练数据
Kronos 在45 个全球交易所、超过 120 亿条 K 线记录上预训练。这个数据规模在金融时间序列领域是空前的——之前的 TSFM 通常只在一个市场或有限品种上训练。这种跨市场、跨品种的预训练是 Kronos 零样本泛化能力的根本来源。
🏗️ 架构分析
Kronos 提供 4 个规格的模型:
| 模型 | Tokenizer | 上下文长度 | 参数量 | 开源 |
|---|---|---|---|---|
| Kronos-mini | Tokenizer-2k | 2048 | 4.1M | ✅ |
| Kronos-small | Tokenizer-base | 512 | 24.7M | ✅ |
| Kronos-base | Tokenizer-base | 512 | 102.3M | ✅ |
| Kronos-large | Tokenizer-base | 512 | 499.2M | ❌ |
| 选型建议: |
- 快速验证:用 Kronos-small(24.7M 参数),几秒钟出结果
- 严肃交易:用 Kronos-base(102.3M),效果更好但需要 GPU
- 超大上下文:Kronos-mini 支持 2048 上下文,适合长周期分析
✅ 优缺点 & 适用场景
优势
- 真正的零样本:同一模型直接用在 BTC、A 股、外汇上,无需 fine-tune
- 层次化输出:同时输出粗粒度趋势 + 细粒度波动,信息量大
- 开源可商用:MIT 协议,模型权重完全开放
- 社区热度高:33.5K stars,AAAI 2026 论文支撑
局限性
- 低流动性失效:论文承认,在低流动性时段(如小市值币种),Kronos 的预测能力显著下降
- 上下文限制:small/base 模型只有 512 上下文窗口,长周期分析受限
- 波动率预测精度:虽然 MAE 降低 9%,但极端事件(黑天鹅)的预测仍然不可靠
- 无因果推断:Kronos 只能预测"会发生什么",不能解释"为什么"
适用场景
| 场景 | 推荐度 | 说明 |
|---|---|---|
| 量化策略信号 | ⭐⭐⭐⭐⭐ | RankIC 提升 93%,直接增强选股/选币因子 |
| 波动率建模 | ⭐⭐⭐⭐ | MAE 降低 9%,适合期权定价场景 |
| 合成数据生成 | ⭐⭐⭐⭐ | 22% fidelity 提升,可用于回测数据增强 |
| 高频交易 | ⭐⭐⭐ | 需要自行 fine-tune 到 tick 级别 |
| 黑天鹅预警 | ⭐⭐ | 低频事件仍超出当前能力范围 |
总结
Kronos 代表了一个方向:金融时间序列正在经历类似 NLP 从统计模型到 LLM 的范式跃迁。它的两阶段架构(专用 tokenizer + 自回归 Transformer)在逻辑上是自洽的——先离散化连续数据,再用语言模型的方式建模。120 亿条 K 线的预训练规模让它在零样本场景下展现出压倒性优势。
如果你是量化研究员或金融数据科学家,Kronos 值得你花一个下午跑一遍示例代码——你可能会对"零样本 K 线预测"这件事改观。
💡下一步:试试用 Kronos 预测你关注的交易品种,对比传统 ARIMA/LSTM 的效果。模型的零样本能力是否在标普 500 和山寨币上同样出色?答案可能会让你惊讶。
📎项目地址:https://github.com/shiyu-coder/Kronos
📄论文:https://arxiv.org/abs/2508.02739(已被 AAAI 2026 接收)