Kronos:金融市场语言的基础模型
拥抱脸 现场演示 最后提交 GitHub 星标 GitHub Forks 执照 Kronos 是第一个开源的金融 K 线基础模型,采用来自全球 45 多个交易所的数据进行训练。 📰 新闻 🚩 [2025.08.17]我们发布了用于微调的脚本!快来查看这些脚本,让 Kronos 适应你的任务吧。 🚩 [2025.08.02]我们的论文现在可以在arXiv上查阅了! 📜 简介 Kronos是一系列仅用于解码器的基础模型,专门针对金融市场的“语言”——K 线序列进行了预训练。与通用的 TSFM 模型不同,Kronos 旨在处理金融数据独特的高噪声特性。它采用了一种新颖的两阶段框架: 专门的标记器首先将连续的多维 K 线数据(OHLCV)量化为分层的离散标记。 然后,对这些标记进行大型自回归 Transformer 的预训练,使其能够作为各种定量任务的统一模型。 ✨ 现场演示 我们搭建了一个实时演示平台,以直观呈现 Kronos 的预测结果。该页面展示了未来 24 小时BTC/USDT交易对的预测。 https://github.com/shiyu-coder/Kronos 👉在这里访问现场演示 📦模型动物园 我们发布了一系列不同容量的预训练模型,以满足不同的计算和应用需求。所有模型均可从 Hugging Face Hub 轻松访问。 模型 标记器 上下文长度 参数 开源 克罗诺斯迷你 Kronos-Tokenizer-2k 2048 4.1百万 ✅ NeoQuasar/Kronos-mini Kronos-小 Kronos-Tokenizer-base 512 24.7百万 ✅ NeoQuasar/Kronos-小型 克洛诺斯基地 Kronos-Tokenizer-base 512 1.023亿 ✅ NeoQuasar/Kronos 基础 Kronos-大 Kronos-Tokenizer-base 512 4.992亿 ❌ 🚀 入门 安装 安装 Python 3.10+,然后安装依赖项: pip install -r requirements.txt 📈 做出预测 使用 Kronos 进行预测非常简单KronosPredictor。它能够处理数据预处理、规范化、预测和逆规范化,只需几行代码即可从原始数据获取预测结果。 重要提示:和 的max_context长度为512。这是模型能够处理的最大序列长度。为了获得最佳性能,建议您的输入数据长度(即)不超过此限制。对于较长的上下文, 会自动处理截断。Kronos-smallKronos-baselookbackKronosPredictor 以下是进行首次预测的分步指南。 1.加载标记器和模型 首先,从 Hugging Face Hub 加载预先训练的 Kronos 模型及其相应的标记器。 from model import Kronos, KronosTokenizer, KronosPredictor # Load from Hugging Face Hub tokenizer = KronosTokenizer.from_pretrained("NeoQuasar/Kronos-Tokenizer-base") model = Kronos.from_pretrained("NeoQuasar/Kronos-small") 2.实例化预测器 创建 的实例KronosPredictor,传递模型、标记器和所需设备。 # Initialize the predictor predictor = KronosPredictor(model, tokenizer, device="cuda:0", max_context=512) 3.准备输入数据 该predict方法需要三个主要输入: df:包含历史 K 线数据的 pandas DataFrame。必须包含['open', 'high', 'low', 'close'].volume和amount为可选列。 x_timestamp:pandas中历史数据对应的时间戳系列df。 y_timestamp:您想要预测的未来时期的一系列熊猫时间戳。 import pandas as pd # Load your data df = pd.read_csv("./data/XSHG_5min_600977.csv") df['timestamps'] = pd.to_datetime(df['timestamps']) # Define context window and prediction length lookback = 400 pred_len = 120 # Prepare inputs for the predictor 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. 生成预测 调用该predict方法生成预测。您可以使用T、top_p和等参数控制采样过程,sample_count以进行概率预测。 # Generate predictions pred_df = predictor.predict( df=x_df, x_timestamp=x_timestamp, y_timestamp=y_timestamp, pred_len=pred_len, T=1.0, # Temperature for sampling top_p=0.9, # Nucleus sampling probability sample_count=1 # Number of forecast paths to generate and average ) print("Forecasted Data Head:") print(pred_df.head()) 该方法返回一个 pandas DataFrame ,其中包含您提供的、、、、和的predict预测值(按索引)。openhighlowclosevolumeamounty_timestamp 5.示例和可视化 有关包含数据加载、预测和绘图的完整可运行脚本,请参阅examples/prediction_example.py。 运行此脚本将生成一个图表,比较真实数据与模型的预测,类似于下面所示的图表: 预测示例 此外,我们还提供了一个无需交易量和金额数据即可进行预测的脚本,可在 中找到examples/prediction_wo_vol_example.py。 🔧 基于您自己的数据进行微调(A股市场示例) 我们提供完整的流程,方便您在自己的数据集上对 Kronos 进行微调。作为示例,我们将演示如何使用Qlib准备中国 A 股市场的数据并进行简单的回测。 免责声明:本流程旨在演示微调过程。它是一个简化的示例,并非可用于生产的量化交易系统。稳健的量化策略需要更复杂的技术,例如投资组合优化和风险因子中和,才能实现稳定的Alpha值。 微调过程分为四个主要步骤: 配置:设置路径和超参数。 数据准备:使用 Qlib 处理和拆分数据。 模型微调:微调分词器和预测器模型。 回溯测试:评估微调模型的性能。 先决条件 首先,确保您已requirements.txt安装所有依赖项。 此管道依赖于qlib。请安装它: pip install pyqlib 您需要准备 Qlib 数据。请按照Qlib 官方指南下载并在本地设置数据。示例脚本假设您使用每日频率数据。 步骤 1:配置您的实验 数据、训练和模型路径的所有设置都集中在 中finetune/config.py。在运行任何脚本之前,请根据您的环境修改以下路径: qlib_data_path:本地 Qlib 数据目录的路径。 dataset_path:处理过的训练/验证/测试 pickle 文件的保存目录。 save_path:保存模型检查点的基本目录。 backtest_result_path:回测结果保存目录。 pretrained_tokenizer_path和pretrained_predictor_path:您想要开始的预训练模型的路径(可以是本地路径或 Hugging Face 模型名称)。 您还可以调整其他参数,例如instrument、train_time_range、epochs和 ,batch_size以适合您的特定任务。如果您不使用Comet.ml,请设置use_comet = False。 第 2 步:准备数据集 运行数据预处理脚本。该脚本将从您的 Qlib 目录加载原始市场数据,对其进行处理,将其拆分为训练集、验证集和测试集,并将它们保存为 pickle 文件。 python finetune/qlib_data_preprocess.py 运行后,您将在配置中指定的目录中找到train_data.pkl、、val_data.pkl和。test_data.pkldataset_path 步骤 3:运行微调 微调过程包含两个阶段:先微调标记器,然后微调预测器。这两个训练脚本均设计用于使用 的多 GPU 训练torchrun。 3.1 微调标记器 此步骤将标记器调整为特定域的数据分布。 # Replace NUM_GPUS with the number of GPUs you want to use (e.g., 2) torchrun --standalone --nproc_per_node=NUM_GPUS finetune/train_tokenizer.py 最佳标记器检查点将保存到config.py(源自save_path和tokenizer_save_folder_name)中配置的路径。 3.2 微调预测器 此步骤对预测任务的主要 Kronos 模型进行微调。 # Replace NUM_GPUS with the number of GPUs you want to use (e.g., 2) torchrun --standalone --nproc_per_node=NUM_GPUS finetune/train_predictor.py 最佳预测器检查点将保存到中配置的路径config.py。 步骤 4:通过回测进行评估 最后,运行回测脚本来评估你的微调模型。该脚本会加载模型,在测试集上进行推理,生成预测信号(例如,预测价格变化),并运行一个简单的 Top-K 策略回测。 # Specify the GPU for inference python finetune/qlib_test.py --device cuda:0 该脚本将在您的控制台中输出详细的性能分析,并生成一个图表,显示您的策略相对于基准的累积回报曲线,类似于下图: 回测示例 💡 从演示到生产:重要注意事项 原始信号 vs. 纯 Alpha:本演示中模型生成的信号为原始预测。在实际的量化工作流程中,这些信号通常会被输入到投资组合优化模型中。该模型会施加约束来中和常见风险因子(例如市场 Beta 值、规模和价值等风格因子)的敞口,从而分离出“纯 Alpha”并提升策略的稳健性。 数据处理:以上QlibDataset仅为示例。对于不同的数据源或格式,您需要调整数据加载和预处理逻辑。 策略和回测复杂性:本文使用的简单 Top-K 策略是一个基本的起点。生产级策略通常包含更复杂的逻辑,用于投资组合构建、动态仓位调整和风险管理(例如止损/止盈规则)。此外,高保真回测应精确模拟交易成本、滑点和市场影响,以便更准确地评估实际表现。 📝 AI 生成的注释:请注意,目录中的许多代码注释finetune/是由 AI 助手 (Gemini 2.5 Pro) 生成的,用于解释目的。虽然它们旨在提供帮助,但可能包含不准确之处。我们建议将代码本身视为逻辑的最终来源。 📖 引用 如果您在研究中使用 Kronos,我们将非常感激您引用我们的论文: @misc{shi2025kronos, title={Kronos: A Foundation Model for the Language of Financial Markets}, author={Yu Shi and Zongliang Fu and Shuo Chen and Bohan Zhao and Wei Xu and Changshui Zhang and Jian Li}, year={2025}, eprint={2508.02739}, archivePrefix={arXiv}, primaryClass={q-fin.ST}, url={https://arxiv.org/abs/2508.02739}, } 📜 许可证 该项目已获得MIT 许可。