Kronos:金融市场语言的基础模型-开源码库社区-开源分享-6协议-村兔网

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

 

Kronos 是第一个金融烛台(K 线)的开源基础模型, 根据来自超过 45 个全球交易所的数据进行训练。

📰 新闻

  • 🚩 [2025.08.17] 发布微调脚本!查看它们以使 Kronos 适应您自己的任务。
  • 🚩 [2025.08.02] 我们的论文现已在arXiv上发布!

📜 介绍

Kronos 是一系列仅解码器的基础模型,专门针对金融市场的“语言”(K 线序列)进行了预训练。与通用 TSFM 不同,Kronos 旨在处理财务数据的独特、高噪声特性。它利用了一个新颖的两阶段框架:

  1. 专门的分词器首先将连续的多维 K 线数据 (OHLCV) 量化为分层离散标记
  2. 然后,在这些标记上预训练一个大型的自回归 Transformer,使其能够作为不同定量任务的统一模型。

图片[1]-Kronos:金融市场语言的基础模型-开源码库社区-开源分享-6协议-村兔网

✨ 现场演示

我们设置了一个现场演示来可视化 Kronos 的预测结果。该网页展示了未来 24 小时内 BTC/USDT 交易对的预测。

👉 在此处访问现场演示

📦 模型动物园

我们发布了一系列具有不同容量的预训练模型,以满足不同的计算和应用需求。所有型号都可以从 Hugging Face Hub 轻松访问。

分词器 上下文长度 参数 开源
克罗诺斯迷你 Kronos-分词器-2k 2048 4.1米 ✅ 新类星体/克罗诺斯迷你
克罗诺斯-小 Kronos-分词器-base 512 24.7 米 ✅ 新类星体/克罗诺斯-小
克罗诺斯基地 Kronos-分词器-base 512 102.3 米 ✅ 新类星体/克罗诺斯基地
克罗诺斯-大 Kronos-分词器-base 512 499.2米

🚀 开始

安装

  1. 安装 Python 3.10+,然后安装依赖项:
pip install -r requirements.txt

📈 进行预测

使用该类使用 Kronos 进行预测非常简单。它处理数据预处理、规范化、预测和逆规范化,让您只需几行代码即可从原始数据获得预测。KronosPredictor

重要提示:for 和是 512。这是模型可以处理的最大序列长度。为了获得最佳性能,建议您的输入数据长度(即 )不要超过此限制。将自动处理较长上下文的截断。max_contextKronos-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']volumeamount
  • x_timestamp:与 中的历史数据相对应的 pandas 系列时间戳。df
  • y_timestamp:要预测的未来时间段的 pandas 时间戳系列。
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. 生成预测

调用该方法以生成预测。您可以使用 、 和 等参数控制抽样过程,以进行概率预测。predictTtop_psample_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,其中包含由您提供的索引的 、 、 和 的预测值。predictopenhighlowclosevolumeamounty_timestamp

为了高效处理多个时间序列,Kronos 提供了一种可以同时对多个数据集进行并行预测的方法。当您需要一次预测多个资产或时间段时,这特别有用。predict_batch

# Prepare multiple datasets for batch prediction
df_list = [df1, df2, df3]  # List of DataFrames
x_timestamp_list = [x_ts1, x_ts2, x_ts3]  # List of historical timestamps
y_timestamp_list = [y_ts1, y_ts2, y_ts3]  # List of future timestamps

# Generate batch predictions
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 contains prediction results in the same order as input
for i, pred_df in enumerate(pred_df_list):
    print(f"Predictions for series {i}:")
    print(pred_df.head())

批量预测的重要要求:

  • 所有系列必须具有相同的历史长度(回溯窗口)
  • 所有序列必须具有相同的预测长度 (pred_len)
  • 每个 DataFrame 必须包含所需的列:['open', 'high', 'low', 'close']
  • volume列是可选的,如果缺少,将用零填充amount

该方法利用 GPU 并行性进行高效处理,并自动独立处理每个系列的归一化和非规范化。predict_batch

5. 示例和可视化

有关包含数据加载、预测和绘图的完整、可运行的脚本,请参阅 examples/prediction_example.py

运行此脚本将生成一个图,将基本实况数据与模型的预测进行比较,类似于如下所示:

Forecast Example

此外,我们还提供了一个脚本,可以在没有数量和数量数据的情况下进行预测,这些数据可以在示例/prediction_wo_vol_example.py中找到。

🔧 根据自己的数据进行优化(A股市场示例)

我们提供了一个完整的管道,用于在您自己的数据集上微调 Kronos。例如,我们演示了如何使用 Qlib 准备来自中国 A 股市场的数据并进行简单的回测。

免責聲明:此管道旨在演示说明微调过程。这是一个简化的示例,而不是一个生产就绪的量化交易系统。稳健的量化策略需要更复杂的技术,例如投资组合优化和风险因素中和,以实现稳定的阿尔法。

微调过程分为四个主要步骤:

  1. 配置:设置路径和超参数。
  2. 数据准备:使用 Qlib 处理和拆分数据。
  3. 模型微调:微调分词器和预测器模型。
  4. 回测:评估微调模型的性能。

先决条件

  1. 首先,确保您已安装所有依赖项。requirements.txt
  2. 此管道依赖于 .请安装:qlib
      pip install pyqlib
  3. 您需要准备 Qlib 数据。按照官方 Qlib 指南在本地下载和设置您的数据。示例脚本假定您使用的是每日频率数据。

步骤 1:配置试验

数据、训练和模型路径的所有设置都集中在 中。在运行任何脚本之前,请根据您的环境修改以下路径finetune/config.py

  • qlib_data_path:本地 Qlib 数据目录的路径。
  • dataset_path:将保存已处理的训练/验证/测试 pickle 文件的目录。
  • save_path:用于保存模型检查点的基本目录。
  • backtest_result_path:用于保存回测结果的目录。
  • pretrained_tokenizer_path和 :要从中开始的预训练模型的路径(可以是本地路径或 Hugging Face 模型名称)。pretrained_predictor_path

您还可以调整其他参数,例如 、 、 和 以适应您的特定任务。如果您不使用 Comet.ml,请设置 .instrumenttrain_time_rangeepochsbatch_sizeuse_comet = False

第 2 步:准备数据集

运行数据预处理脚本。此脚本将从 Qlib 目录加载原始市场数据,对其进行处理,将其拆分为训练集、验证集和测试集,并将它们另存为腌菜文件。

python finetune/qlib_data_preprocess.py

运行后,您将在配置中指定的目录中找到 、 和 。train_data.pklval_data.pkltest_data.pkldataset_path

第 3 步:运行微调

微调过程包括两个阶段:微调分词器,然后是预测器。这两个训练脚本都是为使用 .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.pysave_pathtokenizer_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

该脚本将在您的控制台中输出详细的绩效分析,并生成一个图,显示您的策略相对于基准的累积回报曲线,类似于以下图:

Backtest Example

💡 从演示到生产:重要考虑因素

  • 原始信号与纯 Alpha:此演示中模型生成的信号是原始预测。在现实世界的定量工作流程中,这些信号通常会被输入到投资组合优化模型中。该模型将应用约束来抵消常见风险因素(例如,市场贝塔值、规模和价值等风格因素)的风险敞口,从而隔离“纯阿尔法”并提高策略的稳健性。
  • 数据处理:提供的是一个示例。对于不同的数据源或格式,您需要调整数据加载和预处理逻辑。QlibDataset
  • 策略和回测复杂性:这里使用的简单 top-K 策略是一个基本起点。生产级策略通常包含更复杂的投资组合构建、动态头寸规模和风险管理(例如止损/止盈规则)的逻辑。此外,高保真回测应仔细模拟交易成本、滑点和市场影响,以更准确地估计实际表现。

📝 人工智能生成的注释:请注意,目录中的许多代码注释是由人工智能助手(Gemini 2.5 Pro)出于解释目的生成的。虽然它们旨在提供帮助,但它们可能包含不准确之处。我们建议将代码本身视为逻辑的最终来源。finetune/

 

请登录后发表评论

    没有回复内容