有没有想过,那些红红绿绿的K线图,本质上也是一种“语言”?
每根K线记录着特定时间段内的开盘价、收盘价、最高价、最低价和成交量——这些数字的组合与排列,其实隐藏着市场的情绪波动、资金博弈和价格规律。
而今天要介绍的Kronos,正是把K线当作一种“金融语言”来处理的开源时间序列基础模型(Time Series Foundation Model,TSFM)。
一、Kronos是什么?
Kronos是由清华大学研究团队开发、被人工智能顶级会议AAAI 2026接收的金融K线基础模型。它的核心思路简洁而有力:用训练大语言模型(LLM)的思路来处理金融时序数据。
与通用时间序列预测模型不同,Kronos专门针对金融数据的独特特性——低信噪比、强非平稳性和复杂的高阶依赖关系——进行了定制化设计。
简单说,通用模型看不懂金融数据的“方言”,而Kronos专门学了这门语言。
二、核心技术:把K线“分词”成金融单词
2.1 金融分词器(Tokenizer)
这是Kronos最核心的创新。它采用二进制球面量化(Binary Spherical Quantization,BSQ)技术,将连续的K线数据(包含开盘价、最高价、最低价、收盘价、成交量、成交额等维度)离散化为分层令牌(Token)序列。
通俗点说:就像自然语言处理(NLP)把文字切分成词,Kronos把K线形态切分成“金融单词”。
更有意思的是,每个K线记录会被量化为两个粒度的子标记:一个粗粒度(代表市场大势),一个细粒度(捕捉细节波动)。这种分层设计模仿了“先战略、后战术”的专业投资决策流程,先判断大方向,再把握具体节奏。
2.2 自回归Transformer
在分词的基础上,Kronos采用解码器(decoder-only)架构的Transformer进行自回归预训练。训练目标很简单:预测下一个时间步的标记序列。
通过最大化观测序列的对数似然,模型学会了金融时间序列的复杂动态特性,同时具备了生成高质量合成数据的能力。
2.3 海量预训练数据
Kronos在超过120亿条K线记录的多市场语料库上进行预训练,这些数据覆盖了45个全球交易所的多种资产类别和7种时间粒度。正是这种规模的训练,让模型能够学习到丰富的市场动态和跨资产表示。
三、快速上手:三步走
3.1 环境准备
# 克隆项目git clone https://github.com/shiyu-coder/Kronos.gitcd Kronos# 安装依赖pip install -r requirements.txt
3.2 实测效果
cd Kronos/examplespython prediction_cn_markets_day.py

预测未来120天股价走势如下:

3.3 历史股票价格验证
cd Kronos/examples# 获取股票历史数据python get_akshare_date_2024-2025_x.py股票数据获取工具 - 终极优化版说明:修改代码中的 TARGET_STOCK_CODE 来获取不同股票的数据当前设置: 股票代码=600036, 年份范围=2024-2025============================================================开始获取股票 600036 的 2024-2025 年数据============================================================数据将保存到: ./data🔍 尝试从 AKShare 获取数据...尝试使用AKShare获取股票 600036 数据...✅ AKShare成功获取 485 条数据获取到的数据年份: [2024, 2025]✅ AKShare 数据获取成功!============================================================股票 600036 2024-2025 年数据摘要============================================================数据时间范围: 2024-01-02 到 2025-12-31总交易天数: 485数据来源: AKShare2024年统计:交易天数: 242平均收盘价: 29.99 元最高价: 38.36 元最低价: 22.38 元年度涨跌幅: +60.58%2025年统计:交易天数: 243平均收盘价: 40.88 元最高价: 45.54 元最低价: 35.12 元年度涨跌幅: +15.75%最新交易日 (2025-12-31) 数据:开盘价: 41.23收盘价: 41.09最高价: 41.32最低价: 40.91成交量: 554,142成交额: 2,335,536,695.00 万元振幅: 0.99涨跌幅: -0.44涨跌额: -0.18换手率: 0.27📁 股票数据已保存: ./data/600036_stock_data.csv🎉 股票 600036 数据处理完成!最新数据日期: 2025-12-31📄 生成的文件: ./data/600036_stock_data.csv (39.1 KB)
cd Kronos/examples# 获取股票历史数据python prediction_akshare_2024-2025.py
🤖 智能股票预测工具======================================================================当前预测股票: 招商银行(600036)数据目录: ./data预测天数: 100 天(自然日)输出目录: ./yuce🎯 开始 招商银行(600036) 股票价格预测======================================================================数据文件: ./data/600036_stock_data.csv预测天数: 100 天(自然日)输出目录: ./yuce步骤1: 加载Kronos模型和分词器...✅ 模型加载完成步骤2: 初始化预测器...✅ 预测器初始化完成步骤3: 准备股票数据...正在加载和预处理股票 600036 数据...✅ 数据加载完成,共 485 条记录时间范围: 2024-01-02 00:00:00 到 2025-12-31 00:00:00数据列: ['timestamps', '股票代码', 'open', 'close', 'high', 'low', 'volume', 'amount', '振幅', '涨跌幅', '涨跌额', '换手率']步骤4: 计算预测参数...📊 参数计算:目标预测天数: 100 天(自然日)预计交易日数量: 66 天回看期数 (lookback): 132预测期数 (pred_len): 66✅ 最终参数 - 回看期: 132, 预测期: 66步骤5: 准备输入数据...📅 生成的未来交易日: 共 66 天起始日期: 2026-01-01结束日期: 2026-04-02包含节假日: 0 天输入数据形状: (485, 6)历史数据时间范围: 2024-01-02 00:00:00 到 2025-12-31 00:00:00预测时间范围: 2026-01-01 00:00:00 到 2026-04-02 00:00:00步骤6: 执行价格预测...100%|███████████████████████████████████████████████████████████████████████████████████████████| 66/66 [00:53<00:00, 1.23it/s]✅ 预测完成步骤7: 显示预测结果...预测数据前5行:open high low close volume amount2026-01-01 41.165184 41.415314 40.891594 41.196075 543850.6875 2.114069e+092026-01-02 41.277977 41.641510 41.054226 41.366844 670367.2500 2.618704e+092026-01-05 41.501556 42.186794 41.381126 41.905388 664625.0625 2.599642e+092026-01-06 41.886452 41.932793 41.245331 41.495701 816531.6875 3.233854e+092026-01-07 41.536629 42.882217 41.577923 42.705029 677970.1875 2.661873e+09

3.4 常见问题
Python建议使用3.11.X,使用高版本无法兼容PyTorch 未能正确初始化,导致 Hugging Face 的 from_pretrained 方法在加载模型配置时失败。Traceback (most recent call last):File "/Users/jack/workspace/Kronos/examples/prediction_example.py", line 42, in <module>tokenizer = KronosTokenizer.from_pretrained("NeoQuasar/Kronos-Tokenizer-base")^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^File "/Users/jack/workspace/Kronos/venv_kronos/lib/python3.11/site-packages/huggingface_hub/utils/_validators.py", line 114, in _inner_fnreturn fn(*args, **kwargs)^^^^^^^^^^^^^^^^^^^File "/Users/jack/workspace/Kronos/venv_kronos/lib/python3.11/site-packages/huggingface_hub/hub_mixin.py", line 566, in from_pretrainedinstance = cls._from_pretrained(^^^^^^^^^^^^^^^^^^^^^File "/Users/jack/workspace/Kronos/venv_kronos/lib/python3.11/site-packages/huggingface_hub/hub_mixin.py", line 789, in _from_pretrainedmodel = cls(**model_kwargs)^^^^^^^^^^^^^^^^^^^TypeError: KronosTokenizer.__init__() missing 16 required positional arguments: 'd_in', 'd_model', 'n_heads', 'ff_dim', 'n_enc_layers', 'n_dec_layers', 'ffn_dropout_p', 'attn_dropout_p', 'resid_dropout_p', 's1_bits', 's2_bits', 'beta', 'gamma0', 'gamma', 'zeta', and 'group_size'
解决方案:使用本地加载模式(绕过网络/缓存问题)
手动下载模型到本地,然后从本地路径加载:
from huggingface_hub import snapshot_downloadimport os# 创建模型目录os.makedirs("./models/tokenizer", exist_ok=True)os.makedirs("./models/model", exist_ok=True)# 下载分词器print("Downloading tokenizer...")snapshot_download(repo_id="NeoQuasar/Kronos-Tokenizer-base",local_dir="./models/tokenizer",local_dir_use_symlinks=False)# 下载模型print("Downloading model...")snapshot_download(repo_id="NeoQuasar/Kronos-small",local_dir="./models/model",local_dir_use_symlinks=False)print("Download complete!")
使用本地模型# 1. Load Model and Tokenizer (使用本地路径)tokenizer = KronosTokenizer.from_pretrained("./models/tokenizer")model = Kronos.from_pretrained("./models/model")
夜雨聆风