shiyu-coder / Kronos

shiyu-coder/Kronos

open_in_new前往仓库

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

项目概览

项目概述

Kronos 是一个面向金融市场的开源基础模型,专注于处理金融K线(蜡烛图)数据。它是首个针对金融K线序列设计的开源基础模型,在超过45个全球交易所的数据上进行训练。Kronos 采用解码器架构,通过两阶段框架:首先使用专门的标记器将连续的、多维的K线数据(OHLCV)量化为层次化的离散标记,然后在大规模自回归Transformer上进行预训练,使其能够统一处理多种量化任务。

核心功能

  • 金融K线预测:基于历史K线数据(开盘价、最高价、最低价、收盘价,可选成交量和成交额)进行未来价格走势的预测。
  • 概率性预测:支持通过温度参数(T)、核采样(top_p)和样本数量(sample_count)控制采样过程,生成多条预测路径并取平均,提供概率性预测结果。
  • 批量预测:提供 predict_batch 方法,支持对多个时间序列进行并行预测,提高处理效率。
  • 模型微调:提供完整的微调流程,包括标记器和预测器的微调脚本,支持用户在自己的数据集上进行适配(如A股市场)。
  • 回测评估:提供基于Qlib的回测脚本,用于评估微调后模型的性能。
  • 在线演示:提供实时演示页面,展示BTC/USDT交易对未来24小时的预测结果。

适用与不适用场景

适用场景:

  • 金融时间序列预测,特别是基于K线数据的短期价格走势预测。
  • 量化研究中的信号生成,可作为策略开发的输入。
  • 多资产预测场景,支持批量处理多个交易对或股票。
  • 学术研究,用于探索金融领域的基础模型。

不适用场景:

  • 非金融领域的时间序列预测(如天气、能源等),因为模型专门针对金融数据设计。
  • 高频交易或超短期预测(如秒级),模型上下文长度有限(最大512或2048),可能不适合极短周期。
  • 生产级量化交易系统:项目明确说明微调流程是演示性质,并非生产就绪,需要额外的组合优化和风险管理。
  • 需要长期预测(如数月或数年)的场景,模型可能不擅长。

技术架构与依赖

  • 架构:解码器-only Transformer,采用两阶段框架:专门的标记器(Tokenizer)将OHLCV数据量化为层次化离散标记,然后预训练自回归Transformer。
  • 模型系列:提供多个规模的预训练模型,包括Kronos-mini(4.1M参数)、Kronos-small(24.7M)、Kronos-base(102.3M)和Kronos-large(499.2M,未开源)。
  • 依赖:Python 3.10+,主要依赖包括PyTorch、pandas、transformers等(具体见requirements.txt)。微调流程还依赖Qlib(pyqlib)。
  • 硬件:训练和微调建议使用GPU,支持多GPU训练(torchrun)。

安装与快速开始

  1. 安装Python 3.10+,然后安装依赖:
    pip install -r requirements.txt
    
  2. 从Hugging Face Hub加载预训练模型和标记器:
    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, max_context=512)
    
  4. 准备输入数据(DataFrame包含open, high, low, close列,可选volume和amount),并调用predict方法生成预测。

典型使用方法

以下是一个简单的预测示例:

import pandas as pd
from model import Kronos, KronosTokenizer, KronosPredictor

# 加载模型和标记器
tokenizer = KronosTokenizer.from_pretrained("NeoQuasar/Kronos-Tokenizer-base")
model = Kronos.from_pretrained("NeoQuasar/Kronos-small")
predictor = KronosPredictor(model, tokenizer, max_context=512)

# 加载数据
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']

# 生成预测
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())

对于批量预测,使用 predict_batch 方法,要求所有序列具有相同的lookback和pred_len。

配置与部署要点

  • 上下文长度:Kronos-small和Kronos-base的最大上下文为512,Kronos-mini为2048。输入数据长度(lookback)建议不超过此限制,预测器会自动截断。
  • 微调配置:所有微调设置集中在 finetune/config.py 中,需修改路径(如qlib_data_path、dataset_path、save_path等)和超参数(如epochs、batch_size)。
  • 多GPU训练:微调脚本使用torchrun进行多GPU训练,需指定GPU数量。
  • 部署:模型可从Hugging Face Hub加载,适合在本地或云端GPU环境部署。在线演示使用GitHub Pages,但生产部署需自行搭建服务。
  • 数据要求:输入DataFrame必须包含open、high、low、close列,volume和amount可选,缺失时自动填充为零。

限制、风险与许可证

  • 限制:模型上下文长度有限,可能不适合超长序列;微调流程是演示性质,非生产就绪;模型仅针对金融K线数据,泛化到其他领域可能效果不佳。
  • 风险:金融预测具有高度不确定性,模型输出不应作为投资建议;回测结果可能过拟合,实际交易需考虑交易成本、滑点等。
  • 许可证:项目采用MIT许可证,允许自由使用、修改和分发。

官方链接

信息来源和分析时间