## 项目概述

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+，然后安装依赖：
   ```shell
   pip install -r requirements.txt
   ```
2. 从Hugging Face Hub加载预训练模型和标记器：
   ```python
   from model import Kronos, KronosTokenizer, KronosPredictor
   tokenizer = KronosTokenizer.from_pretrained("NeoQuasar/Kronos-Tokenizer-base")
   model = Kronos.from_pretrained("NeoQuasar/Kronos-small")
   ```
3. 初始化预测器：
   ```python
   predictor = KronosPredictor(model, tokenizer, max_context=512)
   ```
4. 准备输入数据（DataFrame包含open, high, low, close列，可选volume和amount），并调用predict方法生成预测。

## 典型使用方法

以下是一个简单的预测示例：

```python
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许可证，允许自由使用、修改和分发。

## 官方链接

- GitHub仓库：https://github.com/shiyu-coder/kronos
- Hugging Face模型：https://huggingface.co/NeoQuasar
- 在线演示：https://shiyu-coder.github.io/Kronos-demo/
- 论文：https://arxiv.org/abs/2508.02739

## 信息来源和分析时间

- 信息来源：GitHub仓库README（https://github.com/shiyu-coder/kronos）
- 分析时间：2025年11月10日（基于README中新闻日期）