# kronos-ext **Repository Path**: bb188641864/kronos-ext ## Basic Information - **Project Name**: kronos-ext - **Description**: AI k线预测 - **Primary Language**: Unknown - **License**: MIT - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2026-05-06 - **Last Updated**: 2026-05-06 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README

Kronos:金融市场语言的基础模型

Hugging Face Live Demo Last Commit GitHub Stars GitHub Forks License
Deutsch | Español | Français | 日本語 | 한국어 | Português | Русский | 中文

> Kronos 是**首个开源的基础模型**,专注于金融 K 线(蜡烛图), > 训练数据覆盖全球 **45 家以上交易所**。 ## 📰 新闻动态 * 🚩 **[2025.11.10]** Kronos 已被 AAAI 2026 录用。 * 🚩 **[2025.08.17]** 我们发布了微调脚本!欢迎使用这些脚本来让 Kronos 适配你自己的任务。 * 🚩 **[2025.08.02]** 我们的论文现已发布于 [arXiv](https://arxiv.org/abs/2508.02739)!

## 📜 简介 **Kronos** 是一系列仅解码器(decoder-only)的基础模型家族,专为金融市场"语言"——K 线序列——而预训练。与通用时间序列基础模型(TSFM)不同,Kronos 专为处理金融数据独特的高噪声特征而设计。它采用了一种新颖的两阶段框架: 1. 一个专用的分词器(tokenizer)首先将连续的、多维的 K 线数据(OHLCV)量化为**分层离散 token**。 2. 一个大型自回归 Transformer 随后在这些 token 上进行预训练,使其能够作为统一模型服务于多种量化任务。

## ✨ 在线演示 我们搭建了在线演示来展示 Kronos 的预测结果。网页展示了 **BTC/USDT** 交易对接下来 24 小时的走势预测。 **👉 [在此访问在线演示](https://shiyu-coder.github.io/Kronos-demo/)** ## 📦 模型库 我们发布了一系列不同规模的预训练模型,以适应不同的计算和应用需求。所有模型均可从 Hugging Face Hub 轻松获取。 | 模型 | 分词器 | 上下文长度 | 参数量 | 是否开源 | |----------------|-----------------------------------------------------------------------------------| ---------- | ------ |--------------------------------------------------------------------------| | Kronos-mini | [Kronos-Tokenizer-2k](https://huggingface.co/NeoQuasar/Kronos-Tokenizer-2k) | 2048 | 4.1M | ✅ [NeoQuasar/Kronos-mini](https://huggingface.co/NeoQuasar/Kronos-mini) | | Kronos-small | [Kronos-Tokenizer-base](https://huggingface.co/NeoQuasar/Kronos-Tokenizer-base) | 512 | 24.7M | ✅ [NeoQuasar/Kronos-small](https://huggingface.co/NeoQuasar/Kronos-small) | | Kronos-base | [Kronos-Tokenizer-base](https://huggingface.co/NeoQuasar/Kronos-Tokenizer-base) | 512 | 102.3M | ✅ [NeoQuasar/Kronos-base](https://huggingface.co/NeoQuasar/Kronos-base) | | Kronos-large | [Kronos-Tokenizer-base](https://huggingface.co/NeoQuasar/Kronos-Tokenizer-base) | 512 | 499.2M | ❌ | ## 🚀 快速开始 ### 安装 1. 安装 Python 3.10+,然后安装依赖: ```shell pip install -r requirements.txt ``` ### 📈 进行预测 使用 Kronos 进行预测非常简单。`KronosPredictor` 类会处理数据预处理、归一化、预测和反归一化,让你只需几行代码就能从原始数据得到预测结果。 **重要提示**:`Kronos-small` 和 `Kronos-base` 的 `max_context` 为 **512**。这是模型可以处理的最大序列长度。为了获得最佳性能,建议你的输入数据长度(即 `lookback`)不要超过此限制。`KronosPredictor` 会自动处理更长上下文的截断。 以下是进行首次预测的分步指南。 #### 1. 加载分词器和模型 首先,从 Hugging Face Hub 加载预训练的 Kronos 模型及其对应的分词器。 ```python from model import Kronos, KronosTokenizer, KronosPredictor # 从 Hugging Face Hub 加载 tokenizer = KronosTokenizer.from_pretrained("NeoQuasar/Kronos-Tokenizer-base") model = Kronos.from_pretrained("NeoQuasar/Kronos-small") ``` #### 2. 实例化预测器 创建 `KronosPredictor` 实例,传入模型、分词器和期望的设备。 ```python # 初始化预测器 predictor = KronosPredictor(model, tokenizer, max_context=512) ``` #### 3. 准备输入数据 `predict` 方法需要三个主要输入: - `df`:包含历史 K 线数据的 pandas DataFrame。必须包含列 `['open', 'high', 'low', 'close']`。`volume`(成交量)和 `amount`(成交额)为可选。 - `x_timestamp`:与 `df` 中历史数据对应的 pandas Series 时间戳。 - `y_timestamp`:你想要预测的未来时段的时间戳 pandas Series。 ```python 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'] ``` #### 4. 生成预测 调用 `predict` 方法生成预测。你可以通过 `T`、`top_p` 和 `sample_count` 等参数控制采样过程,实现概率性预测。 ```python # 生成预测 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("预测数据头部:") print(pred_df.head()) ``` `predict` 方法返回一个 pandas DataFrame,包含你提供的 `y_timestamp` 索引下的 `open`、`high`、low`、`close`、`volume` 和 `amount` 的预测值。 对于多个时间序列的高效处理,Kronos 提供了 `predict_batch` 方法,可以同时并行处理多个数据集的预测。当你需要同时预测多个资产或时间段时,这特别有用。 ```python # 准备多个数据集进行批量预测 df_list = [df1, df2, df3] # DataFrame 列表 x_timestamp_list = [x_ts1, x_ts2, x_ts3] # 历史时间戳列表 y_timestamp_list = [y_ts1, y_ts2, y_ts3] # 未来时间戳列表 # 生成批量预测 pred_df_list = predictor.predict_batch( df_list=df_list, x_timestamp_list=x_timestamp_list, y_timestamp_list=y_timestamp_list, pred_len=pred_len, T=1.0, top_p=0.9, sample_count=1, verbose=True ) # pred_df_list 包含与输入顺序一致的预测结果 for i, pred_df in enumerate(pred_df_list): print(f"序列 {i} 的预测结果:") print(pred_df.head()) ``` **批量预测的重要要求:** - 所有序列的历史长度(回看窗口)必须相同 - 所有序列的预测长度(`pred_len`)必须相同 - 每个 DataFrame 必须包含所需列:`['open', 'high', 'low', 'close']` - `volume` 和 `amount` 列为可选,缺失时将用零填充 `predict_batch` 方法利用 GPU 并行能力进行高效处理,并自动为每个序列独立进行归一化和反归一化。 #### 5. 示例与可视化 有关包含数据加载、预测和绘图的完整可运行脚本,请参见 [`examples/prediction_example.py`](examples/prediction_example.py)。 运行此脚本将生成一张对比真实数据与模型预测的图表,如下图所示:

Forecast Example

此外,我们还提供了一个不含成交量和成交额数据的预测脚本,请参见 [`examples/prediction_wo_vol_example.py`](examples/prediction_wo_vol_example.py)。 ## 🔧 在你自己的数据上进行微调(以 A 股市场为例) 我们提供了一套完整的流程,用于在你自己的数据集上微调 Kronos。作为示例,我们演示了如何使用 [Qlib](https://github.com/microsoft/qlib) 准备中国 A 股市场的数据并进行简单回测。 > **免责声明:** 本流程旨在作为演示,说明微调的过程。它是一个简化示例,并非生产级的量化交易系统。稳健的量化策略需要更复杂的技术,如投资组合优化和风险因子中性化,才能获得稳定的 alpha。 微调过程分为四个主要步骤: 1. **配置**:设置路径和超参数。 2. **数据准备**:使用 Qlib 处理和拆分数据。 3. **模型微调**:微调分词器和预测器模型。 4. **回测**:评估微调后模型的性能。 ### 前置条件 1. 首先,确保你已安装 `requirements.txt` 中的所有依赖。 2. 本流程依赖于 `qlib`,请安装它: ```shell pip install pyqlib ``` 3. 你需要准备 Qlib 数据。按照 [Qlib 官方指南](https://github.com/microsoft/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](https://www.comet.com/),请设置 `use_comet = False`。 ### 步骤 2:准备数据集 运行数据预处理脚本。该脚本将从你的 Qlib 目录加载原始市场数据,进行处理,拆分为训练集、验证集和测试集,并将它们保存为 pickle 文件。 ```shell python finetune/qlib_data_preprocess.py ``` 运行后,你可以在 `config.py` 中 `dataset_path` 指定的目录中找到 `train_data.pkl`、`val_data.pkl` 和 `test_data.pkl`。 ### 步骤 3:执行微调 微调过程包括两个阶段:微调分词器,然后微调预测器。两个训练脚本都使用 `torchrun` 进行多 GPU 训练。 #### 3.1 微调分词器 此步骤将分词器调整到你特定领域的数据分布。 ```shell # 将 NUM_GPUS 替换为你想使用的 GPU 数量(例如 2) torchrun --standalone --nproc_per_node=NUM_GPUS finetune/train_tokenizer.py ``` 最佳分词器检查点将保存到 `config.py` 中配置的路径(由 `save_path` 和 `tokenizer_save_folder_name` 导出)。 #### 3.2 微调预测器 此步骤将主要的 Kronos 模型微调用于预测任务。 ```shell # 将 NUM_GPUS 替换为你想使用的 GPU 数量(例如 2) torchrun --standalone --nproc_per_node=NUM_GPUS finetune/train_predictor.py ``` 最佳预测器检查点将保存到 `config.py` 中配置的路径。 ### 步骤 4:回测评估 最后,运行回测脚本来评估你微调后的模型。该脚本加载模型,在测试集上进行推理,生成预测信号(例如预测价格变动),并运行简单的 Top-K 策略回测。 ```shell # 指定推理用的 GPU python finetune/qlib_test.py --device cuda:0 ``` 该脚本将在控制台输出详细的性能分析,并生成一张展示你的策略与基准的累计收益曲线的图表,如下图所示:

Backtest Example

### 💡 从演示到生产:重要考量 * **原始信号与纯净 Alpha**:本演示中模型生成的信号是原始预测值。在实际的量化工作流中,这些信号通常会被输入到投资组合优化模型中。该模型将应用约束来中性化常见风险因子(如市场 beta、规模和价值等风格因子)的暴露,从而分离出**"纯净 alpha"**,提高策略的稳健性。 * **数据处理**:所提供的 `QlibDataset` 是一个示例。对于不同的数据源或格式,你需要调整数据加载和预处理逻辑。 * **策略与回测复杂度**:这里使用的简单 Top-K 策略是一个基本的起点。生产级策略通常包含更复杂的逻辑,用于投资组合构建、动态仓位管理和风险管理(例如止损/止盈规则)。此外,高保真回测应仔细建模交易成本、滑点和市场冲击,以更准确地估计真实世界表现。 > **📝 AI 生成注释**:请注意,`finetune/` 目录中的许多代码注释是由 AI 助手(Gemini 2.5 Pro)生成的,用于解释说明。虽然力求有帮助,但可能包含不准确之处。建议将代码本身作为逻辑的最终参考。 ## 📖 引用 如果你在研究中使用了 Kronos,我们希望能引用我们的[论文](https://arxiv.org/abs/2508.02739): ``` @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 许可证](./LICENSE) 授权。