Kronos:面向金融市场的开源基础模型全解析

金融市场的数据从来都不简单。每天都有成千上万的价格波动、成交量、买卖单交织在一起,形成了一幅看似随机却暗藏规律的图景。对量化研究者和数据科学家来说,如何从这些复杂的 K 线(Candlestick,K-line)数据中挖掘价值,一直是一个长期存在的挑战。

在这样的背景下,Kronos 应运而生。它是第一个专门面向金融市场 K 线数据的开源基础模型,由团队基于来自 45 个全球交易所的数据训练而成,试图让机器真正“听懂”市场的语言。

为什么会有 Kronos?

市面上的时间序列预测模型(TSFM,Time Series Foundation Models)很多,但金融数据的特点让它们往往“水土不服”:


  • 高噪声:金融数据天生噪声多,很多时候走势并不遵循一般的规律。

  • 非平稳性:价格序列会随着市场环境的变化而变化。

  • 多维度:不仅有开盘价、收盘价,还有成交量、成交额等多个维度。

Kronos 的特别之处在于,它提出了一种两阶段的框架:

  1. Tokenizer 阶段:把连续的、多维度的 K 线数据(OHLCV)转化成 分层离散 token,让模型能处理。
  2. Transformer 阶段:用大规模自回归 Transformer 来建模这些 token 序列。

换句话说,Kronos 就像一个“语言翻译器”,先把金融数据翻译成它能理解的“词汇”,再用强大的语言模型去学习规律。这种方法让 Kronos 成为一个能够统一处理多种量化任务的基础模型。


Kronos 模型家族

Kronos 提供了多个版本,适配不同的算力和应用需求。下面的表格总结了它们的特点:

模型名称 Tokenizer 上下文长度 参数量 开源情况
Kronos-mini Tokenizer-2k 2048 4.1M NeoQuasar/Kronos-mini
Kronos-small Tokenizer-base 512 24.7M NeoQuasar/Kronos-small
Kronos-base Tokenizer-base 512 102.3M NeoQuasar/Kronos-base
Kronos-large Tokenizer-base 512 499.2M ❌ 暂未开放

不同版本在参数量、性能和可用性上各有侧重。如果你刚入门,可以先尝试 Kronos-mini;如果想在实际研究中使用,可以选择 Kronos-smallKronos-base


如何快速上手 Kronos?

很多读者关心的第一个问题是:如何用 Kronos 预测市场?

Kronos 提供了一个非常方便的 KronosPredictor 类,能帮助你从原始数据一步步走到预测结果。

1. 安装依赖

首先,确保你安装了 Python 3.10+,并运行:

pip install -r requirements.txt

2. 加载模型与 Tokenizer

from model import Kronos, KronosTokenizer, KronosPredictor

tokenizer = KronosTokenizer.from_pretrained("NeoQuasar/Kronos-Tokenizer-base")
model = Kronos.from_pretrained("NeoQuasar/Kronos-small")

3. 初始化预测器

predictor = KronosPredictor(model, tokenizer, device="cuda:0", max_context=512)

4. 准备输入数据

输入需要包含历史的 K 线数据:

import pandas as pd

df = pd.read_csv("./data/XSHG_5min_600977.csv")
df['timestamps'] = pd.to_datetime(df['timestamps'])

lookback = 400
pred_len = 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']

5. 生成预测结果

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,
    sample_count=1
)

print(pred_df.head())

输出会是一个包含未来 openhighlowclosevolumeamount 的 DataFrame。

6. 可视化

运行官方示例脚本,就能得到类似下图的预测效果图:


如何在自己的数据上微调 Kronos?

如果你不满足于直接用预训练模型,可以尝试在自己的数据上做 微调(Finetuning)。官方给出了一个完整的流程,并以中国 A 股市场为例。

微调步骤总览

  1. 配置实验参数:设置数据路径、保存路径、训练超参数等。
  2. 准备数据:用 Qlib 工具预处理,划分训练/验证/测试集。
  3. 模型微调:先微调 Tokenizer,再微调预测器。
  4. 回测评估:检验模型在历史数据上的表现。

核心命令示例

# 数据预处理
python finetune/qlib_data_preprocess.py

# 微调 Tokenizer
torchrun --standalone --nproc_per_node=2 finetune/train_tokenizer.py

# 微调 Predictor
torchrun --standalone --nproc_per_node=2 finetune/train_predictor.py

# 回测
python finetune/qlib_test.py --device cuda:0

运行后,你会得到类似这样的回测曲线:


常见问题(FAQ)

Kronos 适合哪些人使用?


  • 量化研究人员

  • 数据科学家

  • 对金融时间序列预测感兴趣的学生或工程师

Kronos 支持哪些市场的数据?

它是基于 45 个全球交易所的数据训练的,覆盖面非常广泛。你也可以在本地数据上继续微调。

预测结果能直接用来交易吗?

不能直接用于实盘。模型的预测结果是 原始信号,在真实交易中通常需要结合投资组合优化、风险控制等方法。

为什么要先微调 Tokenizer?

不同市场的数据分布差异很大,微调 Tokenizer 能让模型更好地理解目标市场的“语言习惯”。


结语

Kronos 的出现,不只是又一个时间序列模型,而是一个专门为金融市场设计的“基础设施”。它提供了一个新的视角:把金融数据当成一种“语言”去理解和建模。这让更多研究者和开发者可以站在一个统一的基础上,探索量化研究的无限可能。