Kronos:面向金融市场的开源基础模型全解析
金融市场的数据从来都不简单。每天都有成千上万的价格波动、成交量、买卖单交织在一起,形成了一幅看似随机却暗藏规律的图景。对量化研究者和数据科学家来说,如何从这些复杂的 K 线(Candlestick,K-line)数据中挖掘价值,一直是一个长期存在的挑战。
在这样的背景下,Kronos 应运而生。它是第一个专门面向金融市场 K 线数据的开源基础模型,由团队基于来自 45 个全球交易所的数据训练而成,试图让机器真正“听懂”市场的语言。
为什么会有 Kronos?
市面上的时间序列预测模型(TSFM,Time Series Foundation Models)很多,但金融数据的特点让它们往往“水土不服”:
- •
高噪声:金融数据天生噪声多,很多时候走势并不遵循一般的规律。 - •
非平稳性:价格序列会随着市场环境的变化而变化。 - •
多维度:不仅有开盘价、收盘价,还有成交量、成交额等多个维度。
Kronos 的特别之处在于,它提出了一种两阶段的框架:
-
Tokenizer 阶段:把连续的、多维度的 K 线数据(OHLCV)转化成 分层离散 token,让模型能处理。 -
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-small 或 Kronos-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())
输出会是一个包含未来 open
、high
、low
、close
、volume
和 amount
的 DataFrame。
6. 可视化
运行官方示例脚本,就能得到类似下图的预测效果图:
如何在自己的数据上微调 Kronos?
如果你不满足于直接用预训练模型,可以尝试在自己的数据上做 微调(Finetuning)。官方给出了一个完整的流程,并以中国 A 股市场为例。
微调步骤总览
-
配置实验参数:设置数据路径、保存路径、训练超参数等。 -
准备数据:用 Qlib 工具预处理,划分训练/验证/测试集。 -
模型微调:先微调 Tokenizer,再微调预测器。 -
回测评估:检验模型在历史数据上的表现。
核心命令示例
# 数据预处理
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 的出现,不只是又一个时间序列模型,而是一个专门为金融市场设计的“基础设施”。它提供了一个新的视角:把金融数据当成一种“语言”去理解和建模。这让更多研究者和开发者可以站在一个统一的基础上,探索量化研究的无限可能。