Kronos深度解析:金融K线的开源基础模型正在出现
量子道
量子道 · 扫码阅读
微信 · 浏览器扫码
在手机上获得更好的阅读体验
Kronos深度解析:金融K线的开源基础模型正在出现
大语言模型把文本变成token,然后学习“语言的统计规律”。如果金融市场也有自己的语言,那么K线、成交量、波动率、时间戳和跨资产联动,能不能也被token化,再用类似语言模型的方式预训练?shiyu-coder/Kronos 给出的答案是:可以尝试,而且它已经把金融K线基础模型开源到了Hugging Face。
项目速览
| 维度 | 详情 |
|---|---|
| GitHub | shiyu-coder/Kronos |
| 定位 | 面向金融K线序列的基础模型,号称首个开源金融candlestick foundation model |
| Stars / Forks | 约29.9K Stars、5.1K Forks(2026-06-15抓取) |
| 语言 | Python |
| 许可证 | MIT License |
| 论文 | arXiv:2508.02739,AAAI 2026接收信息见README |
| 模型发布 | Hugging Face: NeoQuasar/Kronos-mini、Kronos-small、Kronos-base 等 |
| 核心依赖 | PyTorch、pandas、NumPy、einops、huggingface_hub、safetensors、matplotlib |
一句话概括:Kronos不是一个普通的股票预测脚本,而是把金融K线当成一门“市场语言”来建模:先用专门tokenizer把连续OHLCV数据离散成层级token,再用decoder-only Transformer做自回归预训练与预测。
这让它站在一个很有意思的交叉点上:金融时间序列、量化研究、时间序列基础模型、tokenizer设计和开源大模型工程。
为什么Kronos值得关注?
金融时间序列预测一直是AI里最危险也最迷人的领域。
危险在于:市场是高噪声、非平稳、强对抗、强反馈的系统。一个模型在历史数据上看起来有效,不代表未来有效;一个预测价格的模型,也不等于能形成可交易、可风控、可持续的alpha。
迷人之处在于:金融市场拥有海量结构化数据,K线是全球通用格式,跨市场、跨资产、跨周期都有相似的数据结构。如果预训练范式能在文本、图像、语音和代码上成立,那么它是否也能在金融K线中学到某种“市场语法”?
Kronos正是沿着这个问题往前走的项目。它的论文摘要披露,Kronos使用超过45个全球交易所、超过120亿条K线记录进行自回归预训练,并在价格序列预测、波动率预测、合成K线生成等任务中做零样本评估。论文声称,在基准数据集上,Kronos相对领先TSFM在价格序列预测RankIC上提升93%,相对最佳非预训练基线提升87%;在波动率预测上MAE降低9%;在合成K线生成保真度上提升22%。
这些数字当然需要读者结合论文设置、数据切分、交易成本和真实回测谨慎理解,但至少说明:金融K线基础模型已经从概念进入了可复现实验和开源模型阶段。
核心方法:把连续K线翻译成离散token
Kronos的核心设计可以拆成两步。
1. 专用Tokenizer:把OHLCV压缩成层级离散token
普通时间序列模型通常直接吃连续数值。Kronos选择先做离散化:用 KronosTokenizer 把多维K线数据,也就是 open、high、low、close、volume、amount 等连续特征,编码成离散token。
代码中 KronosTokenizer 使用Transformer Encoder/Decoder结构,并接入 Binary Spherical Quantization(BSQuantizer)进行量化。它的输出不是一个简单类别,而是分成 s1_bits 和 s2_bits 的层级token结构。可以把它理解为:
连续K线数据:OHLCV + amount + 时间结构
↓
Transformer编码器提取局部市场状态
↓
Binary Spherical Quantization离散化
↓
层级token:s1 token + s2 token
↓
Transformer解码器重建原始K线
为什么要离散化?因为自回归Transformer最擅长处理token序列。只要能把K线变成“市场token”,就可以把金融序列建模转化为类似语言建模的问题:给定过去token,预测未来token。
这也是Kronos最有启发性的地方:它不是简单把Transformer套到价格序列上,而是先设计一套金融数据tokenizer,让“市场语言”更接近LLM擅长的输入形态。
2. Decoder-only Transformer:自回归建模市场token
Kronos主体模型是decoder-only Transformer。它读取 s1_ids 和 s2_ids,叠加时间嵌入,经过多层Transformer Block,再通过 DualHead 输出下一步的层级token分布。
代码中还设计了 DependencyAwareLayer:先预测s1,再让s2的预测依赖s1的embedding。这相当于承认层级token内部存在结构依赖,不是两个完全独立的分类任务。
推理阶段则是典型自回归生成:
历史K线 → tokenizer.encode → 历史token
↓
Kronos逐步采样未来token
↓
tokenizer.decode → 还原未来OHLCV预测
↓
反归一化 → 输出DataFrame
KronosPredictor 封装了数据预处理、归一化、时间特征、预测、反归一化和DataFrame输出,用户可以用几行代码完成预测。
模型Zoo:从mini到base,兼顾研究和落地
README列出了四个模型规格:
| 模型 | Tokenizer | Context length | 参数量 | 开源状态 |
|---|---|---|---|---|
| Kronos-mini | Kronos-Tokenizer-2k | 2048 | 4.1M | 已开源 |
| Kronos-small | Kronos-Tokenizer-base | 512 | 24.7M | 已开源 |
| Kronos-base | Kronos-Tokenizer-base | 512 | 102.3M | 已开源 |
| Kronos-large | Kronos-Tokenizer-base | 512 | 499.2M | README标注未开源 |
这个模型谱系说明项目并不是只给一个论文权重,而是考虑了不同算力场景:mini适合快速试验,small适合一般GPU/CPU环境,base更偏研究与质量,large则仍保留。
需要注意的是,README特别提醒 Kronos-small 和 Kronos-base 的 max_context 是512。也就是说,如果你用它预测分钟级K线,512根K线能覆盖的时间范围取决于频率;如果用日线,则覆盖约两年交易日。不同频率下,模型看到的“市场上下文”完全不同。
使用体验:几行代码完成K线预测
典型使用流程很清晰:
from model import Kronos, KronosTokenizer, KronosPredictor
# 1. 从Hugging Face加载Tokenizer和模型
tokenizer = KronosTokenizer.from_pretrained("NeoQuasar/Kronos-Tokenizer-base")
model = Kronos.from_pretrained("NeoQuasar/Kronos-small")
# 2. 创建预测器
predictor = KronosPredictor(model, tokenizer, max_context=512)
# 3. 准备历史K线和未来时间戳
pred_df = predictor.predict(
df=x_df,
x_timestamp=x_timestamp,
y_timestamp=y_timestamp,
pred_len=120,
T=1.0,
top_p=0.9,
sample_count=1,
)
输入DataFrame至少需要 open、high、low、close,volume 和 amount 可选。输出则是预测后的 open、high、low、close、volume、amount 序列。
项目还提供 predict_batch,可以对多个资产或多个时间窗口做批量预测,并利用GPU并行。这对量化研究很重要,因为真实研究很少只预测一只股票、一个窗口,而是要跨资产、跨日期批量产生信号。
微调与回测:从模型Demo走向量化研究流程
Kronos不只提供推理脚本,还提供了两套微调路径。
1. Qlib路径:面向A股研究流程
README中给出用 Microsoft Qlib 准备中国A股数据并做简单回测的流程:
- 配置路径与超参数;
- 用
finetune/qlib_data_preprocess.py处理并切分数据; - 先微调Tokenizer,再微调Predictor;
- 用
finetune/qlib_test.py进行简单top-K策略回测。
项目也明确写了免责声明:这个pipeline只是展示微调过程,不是生产级量化系统;真实策略需要组合优化、风险因子中性化、交易成本、滑点、市场冲击和更复杂的风控。
这个提醒很重要。金融AI项目最容易被误读成“预测准就能赚钱”。实际上,预测值只是原始信号,离稳定alpha还差很远。
2. CSV路径:更适合普通用户上手
finetune_csv/README_CN.md 提供了面向自定义CSV数据集的中文微调流程。数据格式要求包括:
timestampsopenhighlowclosevolumeamount
用户可以用 train_sequential.py 顺序训练tokenizer和predictor,也可以分别运行 finetune_tokenizer.py 与 finetune_base_model.py。它还支持DDP多卡训练:
DIST_BACKEND=nccl \
torchrun --standalone --nproc_per_node=8 train_sequential.py --config configs/config_ali09988_candle-5min.yaml
这说明项目的定位不是“只能跑作者数据”,而是鼓励用户迁移到自己的市场、周期、资产或交易品种上。
Web UI:降低非工程用户门槛
仓库中还包含 webui/,基于Flask、HTML/CSS/JavaScript和Plotly.js实现一个图形界面。功能包括:
- 支持CSV、Feather等金融数据格式;
- 选择400+120数据点窗口;
- 加载Kronos-mini、small、base模型;
- 调整temperature、top_p、sample_count;
- 支持CPU、CUDA、Apple Silicon MPS;
- 展示K线图、预测结果和误差分析。
这类Web UI对研究项目很加分。它让用户不必一开始就读完代码,而是可以先把数据拖进去,看模型输出和参数变化,再决定是否深入微调。
工程质量:优点与不足并存
优点
第一,项目结构完整。它包含模型定义、Tokenizer、推理示例、批量预测、Qlib微调、CSV微调、Web UI、回测示例和回归测试。
第二,模型权重可直接从Hugging Face加载,降低复现门槛。许多金融AI项目只给论文不给权重,Kronos至少提供了mini、small、base。
第三,测试里固定了模型和tokenizer revision,做了预测输出回归测试和MSE回归测试。这说明作者意识到模型推理结果需要可重复性,而不是每次升级都悄悄改变行为。
第四,README对“不是生产级交易系统”说得比较清楚,避免把模型包装成稳赚策略。
不足
第一,依赖管理仍偏朴素。根目录是 requirements.txt,没有看到类似 pyproject.toml、锁文件或更系统的包发布结构。对研究项目足够,对严肃生产部署还不够。
第二,代码中有不少AI生成注释,README也提示 finetune/ 目录很多注释由Gemini 2.5 Pro生成,可能不准确。这不一定影响代码逻辑,但读者不能把注释当作权威文档。
第三,回测示例仍比较基础。它适合展示流程,但距离真实量化研究所需的严谨回测还有差距,例如手续费、滑点、涨跌停、停牌、流动性约束、幸存者偏差、数据泄漏等问题都需要额外处理。
第四,金融时间序列天然存在“发布后失效”问题。模型一旦被广泛使用,信号可能被套利;市场结构也会变化。基础模型不是一劳永逸的alpha机器。
和传统量化模型有什么不同?
传统量化模型通常围绕因子、特征工程和监督学习展开:先定义收益率标签,再训练模型预测未来收益或分类信号。Kronos则更像“金融序列语言模型”:先在海量K线token上做自回归预训练,再迁移到预测、波动率、生成等任务。
两者差异可以概括为:
| 维度 | 传统量化模型 | Kronos路线 |
|---|---|---|
| 输入 | 人工因子、价格量特征、财务/另类数据 | OHLCV K线token与时间特征 |
| 训练方式 | 多为监督学习或任务特定训练 | 大规模自回归预训练 + 下游迁移 |
| 泛化目标 | 某市场、某频率、某标签 | 跨市场、跨资产、跨任务表示 |
| 优势 | 可解释、易接入风控与组合优化 | 预训练表示、零样本/少样本潜力 |
| 风险 | 因子拥挤、过拟合 | 黑箱、更难解释、交易可用性需验证 |
我更倾向于把Kronos看作“信号生成器”和“市场表示学习工具”,而不是完整交易系统。它可以参与量化流水线,但不应直接替代组合构建和风控。
适合哪些人使用?
Kronos适合以下几类用户:
- 量化研究员:把Kronos作为价格/波动率/合成数据任务的预训练基线;
- 金融AI研究者:研究金融时间序列tokenizer、TSFM和自回归预训练;
- 开源模型玩家:体验Hugging Face金融模型如何加载和推理;
- A股或加密市场研究者:用Qlib或CSV微调自己的市场数据;
- 教学与实验用户:用Web UI展示模型预测和采样参数变化。
不适合的人也很明确:如果你想找一个“下载即赚钱”的自动交易系统,Kronos不是这个东西。它给的是模型和研究框架,不是可直接上线的交易策略。
投资与产业启示
Kronos背后的方向,比单个项目更值得关注。
1. 金融基础模型会从“新闻/研报LLM”走向“市场数据模型”
过去金融大模型多集中在文本:研报摘要、公告问答、舆情分析、投顾话术。Kronos代表另一条路线:直接建模价格量数据。这条路线更接近交易和风险本身,也更难。
2. K线Token化可能成为重要研究方向
LLM成功的一大关键是tokenizer。金融市场如果要出现基础模型,也需要自己的tokenizer。Kronos的层级离散token设计,提供了一个可研究样本:价格动态和交易活跃度能否被压缩成可泛化的市场token?
3. 开源权重会推动金融AI基准竞争
当mini、small、base都能下载,社区就可以做更多横向比较:不同市场、不同频率、不同资产、不同回测框架。金融AI过去很多结果难复现,开源权重有助于把讨论从“故事”拉回“实验”。
4. 真正商业化仍取决于数据、风控和执行
即使基础模型有效,商业化也不只是模型问题。数据清洗、实时推理、延迟、交易成本、组合约束、风险预算、合规审计、模型监控,都会决定它能否进入真实资管流程。
风险提示:金融预测模型最怕被过度神化
最后必须强调:Kronos很有研究价值,但金融预测模型不能被神化。
- 预测不等于交易:价格预测误差小,不代表策略收益高。
- 回测不等于实盘:实盘有冲击成本、滑点、容量、风控和心理因素。
- 零样本不等于永远泛化:市场状态变化会让历史规律失效。
- 开源模型不等于免费alpha:公开模型的优势可能被迅速套利或稀释。
- 生成K线不等于生成真实市场:合成数据可能保留统计形状,却丢失真实交易机制。
因此,Kronos最正确的打开方式,是把它当作金融时间序列基础模型的研究平台,而不是神奇交易按钮。
结论:金融市场也在迎来“token化预训练”时代
Kronos的意义不在于它马上能改变交易行业,而在于它把一个重要问题向前推进了一步:金融K线能不能像自然语言一样被token化、预训练,并迁移到多个下游任务?
从开源模型、论文、微调脚本、Web UI、回归测试和社区热度看,Kronos已经成为金融时间序列基础模型方向中值得重点关注的项目。它让更多研究者可以直接站在预训练权重上做实验,而不是从零搭建模型。
我的判断是:未来金融AI会形成三层栈:
底层:市场数据基础模型,学习价格、成交量、波动率和跨资产结构
中层:任务模型,做预测、风险、生成、异常检测和情景模拟
上层:组合与执行系统,负责约束、风控、交易成本和实盘反馈
Kronos处在底层和中层之间。它还不是完整交易系统,但它可能成为金融AI基础设施的一块拼图。对开源社区来说,这正是它最值得研究的地方。
参考资料
- GitHub仓库:shiyu-coder/Kronos
- 项目README:README.md
- 论文:Kronos: A Foundation Model for the Language of Financial Markets
- Hugging Face主页:NeoQuasar
- 在线演示:Kronos Live Demo
- CSV微调说明:finetune_csv/README_CN.md
- Web UI说明:webui/README.md
- 许可证:MIT License