Kronos:金融市场的语言基础模型
原标题:shiyu-coder/Kronos
Python★ 26,858 stars+402 今日
速览
Kronos 是一个专为金融市场设计的多模态基础模型,能够将价格、成交量、订单簿及新闻文本统一映射到同一语言空间。它支持价格预测、趋势分类、波动率预测及新闻情感分析等多种下游任务,通过预训练实现了对复杂金融时序数据的深度理解与泛化。
AI 深度解读
这是什么
Kronos 是由 shiyu-coder 团队开发的全球首个开源金融 K 线(Candlesticks)基础模型(Foundation Model)。该项目在 GitHub 上已获得 26,858+ Star,并于 2025 年 11 月被 AAAI 2026 接收。
Kronos 是一个基于解码器(Decoder-only)架构的模型家族,专门针对金融市场的“语言”——即 K 线序列进行预训练。其训练数据覆盖全球 45 多个主要交易所,旨在处理金融数据特有的高噪声和非平稳特性。不同于通用的时间序列基础模型(TSFMs),Kronos 通过独特的两阶段框架,将连续的、多维度的 OHLCV(开盘价、最高价、最低价、收盘价、成交量)数据量化为分层离散 Token,进而利用大型自回归 Transformer 进行预训练,使其成为统一处理多种量化任务的基座模型。
解决的问题
传统金融时间序列预测面临以下核心痛点,Kronos 旨在逐一攻克:
- 数据的高噪声与非平稳性:金融数据受宏观政策、市场情绪等多重因素影响,波动剧烈且分布随时间变化。通用模型往往难以捕捉这种复杂的动态特征。
- 多任务统一性缺失:现有的量化模型通常针对单一任务(如仅预测收盘价或仅预测波动率)训练,缺乏通用性。Kronos 试图构建一个统一的模型,能够同时处理预测、分类、异常检测等多种下游任务。
- 连续数据的离散化难题:金融数据是连续且多维的,直接输入 Transformer 效果不佳。Kronos 解决了如何将连续的 OHLCV 数据高效、无损地转化为模型可理解的离散 Token 序列的问题。
- 长序列处理的局限性:许多模型在处理长历史窗口时存在计算瓶颈或信息遗忘问题。Kronos 支持最大 512 的上下文窗口(针对 Small/Base 版本),并能自动处理截断,平衡了计算效率与信息完整性。
核心功能
Kronos 提供了一套完整的从数据预处理到预测、微调及回测的 Pipeline:
- KronosTokenizer:
- 核心组件,负责将连续的 OHLCV 数据量化为分层离散 Token。
- 支持从 Hugging Face Hub 加载预训练的分词器(如
NeoQuasar/Kronos-Tokenizer-base)。
- KronosPredictor:
- 封装了数据预处理、归一化、预测及反归一化的完整流程。
- 单序列预测 (
predict):支持概率性预测,可通过T(温度)、top_p(核采样概率) 和sample_count(生成路径数) 控制采样过程,返回包含 Open, High, Low, Close, Volume, Amount 的 DataFrame。 - 批量预测 (
predict_batch):利用 GPU 并行处理多个时间序列,适用于多资产组合预测。要求输入的历史长度和预测长度一致。
- 微调 Pipeline (Finetuning):
- 提供完整的微调脚本,支持对 Tokenizer 和 Predictor 进行联合或单独微调。
- 集成 Qlib 框架,以中国 A 股市场为例,演示数据准备、模型微调及简单回测的全流程。
- 支持自定义配置(路径、超参数、时间范围等),并兼容 Comet.ml 进行实验追踪。
- 模型家族:
- 提供不同容量的预训练模型(如 Kronos-small, Kronos-base 等),适配不同的算力需求和应用场景。
亮点 / 与同类相比
- 首个金融 K 线基础模型:
- 与通用时间序列模型(如 TimesNet, PatchTST)不同,Kronos 专为金融 OHLCV 数据设计,其 Tokenizer 针对金融数据的分布特性进行了优化,能更好地捕捉价格跳变和成交量异动。
- 两阶段独特架构:
- 先通过专用 Tokenizer 将多维连续数据转化为分层离散 Token,再使用自回归 Transformer 预训练。这种架构既保留了 Transformer 的强大序列建模能力,又解决了金融数据连续性的建模难题。
- 统一的多任务处理能力:
- 无需为不同任务重新训练模型,Kronos 可作为统一基座,通过微调适应预测、分类等多种量化任务。
- 开源与社区支持:
- 代码、预训练模型及微调脚本全部开源。
- 提供可视化 Demo(如 BTC/USDT 24 小时预测),降低使用门槛。
- 已被 AAAI 2026 接收,具备学术背书。
- 灵活的采样与概率预测:
- 支持核采样(Nucleus Sampling)和温度调节,能够生成多条预测路径并取平均,提供更丰富的不确定性估计,而非单一的确定性输出。
适合谁用 / 上手
目标用户:
- 量化研究员/开发者:希望利用最新的基础模型技术提升预测精度,或探索 Transformer 在金融时序数据中的应用。
- 算法交易团队:需要快速构建原型,验证基于深度学习的交易策略。
- 学术研究者:关注时间序列基础模型、金融 AI 交叉领域的研究人员。
上手指南:
-
环境准备:
- 安装 Python 3.10+。
- 安装依赖:
pip install -r requirements.txt。 - 若需微调,需额外安装
pyqlib并准备 Qlib 数据。
-
快速预测示例:
from model import Kronos, KronosTokenizer, KronosPredictor import pandas as pd # 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, volume, amount) 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'] # 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, sample_count=1 ) print(pred_df.head()) -
微调入门:
- 修改
finetune/config.py中的路径和超参数。 - 运行数据预处理脚本:
python finetune/qlib_data_preprocess.py。 - 执行微调与回测脚本(具体命令参考项目文档)。
- 修改
注意事项:
- 输入数据的历史长度(
lookback)不应超过模型的最大上下文窗口(Small/Base 版本为 512)。 - 批量预测时,所有序列的历史长度和预测长度必须一致。
- 微调 Pipeline 仅为演示用途,实际生产环境需结合更复杂的组合优化和风险控制策略。
查看原文 →github.com
