如何用Kronos在10分钟内跑通K线预测 📅 发布时间:2026/9/2 11:22:02 👁 浏览次数: 如何用Kronos在10分钟内跑通K线预测【免费下载链接】KronosKronos: A Foundation Model for the Language of Financial Markets项目地址: https://gitcode.com/GitHub_Trending/kronos14/KronosKronos 是一个面向量化研究者与开发者的开源 K 线预测模型它把蜡烛图序列当作一种语言来学习并已在 45 个以上全球交易所的数据上完成预训练。这篇文章会带你按顺序做完四件事搭好环境、5 分钟内跑通第一次 K 线预测、拆解令牌化 自回归生成的两阶段机制然后讲参数调优、输出解读、自定义数据微调与回测验证。读完本文你可以拿自己的 K 线数据做出预测并走通一套完整的微调评估流程。 为什么选它专为金融 K 线设计而非通用时间序列模型。通用 TSFM 处理金融数据时噪声干扰明显Kronos 直接以 45 个以上交易所的 K 线做预训练并把分钟、小时、星期等时间特征一并编码进模型。两阶段架构先压缩再生成。分词器KronosTokenizer把连续的 OHLCV 数据量化成分层的离散令牌再由因果 Transformer 自回归地逐根生成未来 K 线思路和语言模型处理文本一致。开源模型族门槛低。mini4.1M 参数上下文 2048、small24.7M上下文 512、base102.3M均已开放mini 在 CPU 上也能推理。链路完整。仓库内置预测脚本、Qlib 微调、CSV 数据微调、回测脚本和 Web UI从推理到训练闭环不需要额外拼凑工具。 环境准备与首次运行三步完成安装git clone https://gitcode.com/GitHub_Trending/kronos14/Kronos cd Kronos pip install -r requirements.txt需要 Python 3.10核心依赖不超过 5 个torch2.0.0、pandas、matplotlib、huggingface_hub、einops。预训练模型存放在 Hugging Face HubNeoQuasar/Kronos-*系列from_pretrained首次调用时自动下载如果网络受限可先把模型目录下到本地再用本地路径加载from_pretrained两者都支持。下面的最小示例会读取你自己的 K 线 CSV需含timestamps和 OHLCV 列用 400 根历史 K 线预测未来 120 根from model import Kronos, KronosTokenizer, KronosPredictor import pandas as pd tokenizer KronosTokenizer.from_pretrained(NeoQuasar/Kronos-Tokenizer-base) model Kronos.from_pretrained(NeoQuasar/Kronos-small) predictor KronosPredictor(model, tokenizer, max_context512) df pd.read_csv(./your_kline.csv) # 输入含 open/high/low/close/volume 的K线 df[timestamps] pd.to_datetime(df[timestamps]) pred predictor.predict(dfdf.iloc[:400], x_timestampdf[timestamps].iloc[:400], y_timestampdf[timestamps].iloc[400:520], # 未来120个时间戳 pred_len120, T1.0, top_p0.9, sample_count1) print(pred.head()) # 输出120根未来K线的 open/high/low/close/volume/amountCPU 上建议把模型换成Kronos-mini、pred_len调小几秒内就能看到输出有 GPU 时 small 模型 120 步推理通常在分钟级内完成。 核心机制拆解Kronos 的技术核心只有两个部件讲清它们就理解了整个模型。部件一K 线令牌化KronosTokenizer一句话定义把每根连续数值的 OHLCV K 线压缩成两层离散令牌——粗令牌 细令牌。类比写人先说高个、偏瘦粗粒度再补戴眼镜、黑外套细粒度两层信息拼起来才完整。这样设计的原因是连续值没法做自回归生成离散化之后 K 线就成了词表里的词预测变成下一个词问题分层则让粗令牌负责价格骨架、细令牌负责精度生成时可以先定方向再补细节。关键参数d_in输入维度默认 6OHLCV amounts1_bits粗令牌位数决定粗粒度词表大小s2_bits细令牌位数决定重建精度编码器/解码器层数控制压缩与还原的能力x_token tokenizer.encode(x) # (B,T,6) 的OHLCV → (粗, 细) 两层token ID z tokenizer.decode(x_token) # token → OHLCV可用于重建验证部件二自回归生成Kronos 采样一句话定义一个 decoder-only Transformer基于历史令牌序列逐根预测下一根 K 线的粗、细令牌。这样设计是因为行情本身就是自回归演化的而且生成过程可以通过采样参数做概率性控制——同一个历史可以走出多条不同的未来路径。关键参数max_context模型可见的最大历史长度small/base 为 512mini 为 2048T温度控制采样随机性top_p核采样概率限定候选令牌范围sample_count并行生成的路径数内部自动取均值# auto_regressive_inference 的核心循环简化 s1_logits, context model.decode_s1(pre_ids, post_ids, stamp) # 先预测粗令牌 s2_logits model.decode_s2(context, sample_pre) # 条件预测细令牌 # 滚动窗口逐根生成 pred_len 步最后整体解码 preds tokenizer.decode(full_tokens) # token → OHLCV️ 关键参数与调优策略真正需要你决策的参数就 5 个参数作用推荐起始值调整方向lookback历史窗口喂给模型的历史 K 线根数400增大→上下文更充分但不得超过max_contextpred_len预测步长未来要预测的 K 线根数日频 120 / 5 分钟 48增大→覆盖更远但逐步累积误差T温度采样随机性1.0调小→路径更平稳集中调大→更多样top_p核采样概率0.9调小→候选令牌更保守sample_count并行预测路径数1增大2~5→多路径平均更平滑但耗时成倍增加两个常见调参场景预测路径跳得厉害、抖动大把T降到 0.6 左右并增大sample_count到 5 再平均——仓库自带的回测配置finetune/config.py正是inference_T0.6、inference_sample_count5这个组合。想要更确定的主路径调低top_p如 0.8候选令牌范围收窄输出更贴近历史趋势外推。 看结果如何解读输出predict返回一个 DataFrame用下面这段代码把历史和预测画在一起import matplotlib.pyplot as plt hist df.iloc[lookback-pred_len:lookback] # 取预测窗口前紧邻的同等长度历史 fig, axes plt.subplots(2, 1, figsize(10, 6), sharexTrue) axes[0].plot(hist[close], label历史收盘价); axes[0].plot(pred_df[close], label预测收盘价) axes[0].legend(); axes[0].grid(True) axes[1].plot(hist[volume], label历史成交量); axes[1].plot(pred_df[volume], label预测成交量) axes[1].legend(); axes[1].grid(True) plt.tight_layout(); plt.show()逐字段解读open / high / low / close未来每根 K 线的完整 OHLCV不是单一收盘价。预测的 close 与历史末段走势的衔接方向延续/反转是最值得看的信号。volume / amount预测的成交量与成交额量级应与历史同档。注意输入若没有volume列predictor 会自动补 0此时输出成交量恒为 0属预期行为。索引就是你传入的y_timestamp方便和历史数据对齐拼接。结果不理想时的排查方向历史窗口太短少于几十根会导致归一化统计不稳先把lookback提到 200 以上。T过高或sample_count1时单条路径容易飞降到 0.6 并多采样平均。确认输入无 NaN——predictor 检测到价格/成交量含 NaN 会直接抛错先清洗再跑。️ 定制化让模型适配你的场景仓库提供了两条微调链路finetune/基于 Qlib面向 A 股日频数据和finetune_csv/直接吃 CSV适合任意自定义数据。以 CSV 链路为例先准备含timestamps OHLCV 列的 CSVvolume/amount 无数据可填 0然后复制模板配置并修改data: data_path: /path/to/your_kline.csv # 改指向你的CSV lookback_window: 512 # 改匹配你的K线频率 predict_window: 48 # 改要预测的未来点数 model_paths: pretrained_tokenizer: /path/to/Kronos-Tokenizer-base # 改预训练分词器 pretrained_predictor: /path/to/Kronos-small # 改预训练预测器 exp_name: my_stock_5min # 实验名决定产出路径 training: batch_size: 32 tokenizer_epochs: 30一条命令顺序完成分词器与预测器训练python finetune_csv/train_sequential.py --config finetune_csv/configs/config_ali09988_candle-5min.yaml改哪里、改什么、预期效果data_path决定学什么分布如换成 5 分钟 K 线模型就适配日内节奏lookback_window/predict_window决定训练时看多少、猜多少应与实际推理参数保持一致pretrained_*决定从哪个尺度模型出发数据少就从小模型起。训练产物按验证损失保存 best checkpoint分别在{exp_name}/tokenizer/best_model与{exp_name}/basemodel/best_model。验证改动是否有效Qlib 链路自带回测脚本python finetune/qlib_test.py --device cuda:0会在测试集上跑 top-K 策略并输出相对基准的累计收益曲线CSV 链路则可以用微调后的模型对同一窗口重新预测与预训练模型输出做对比。 落地场景场景一用 5 分钟 K 线做日内推演背景判断某标的未来 4 小时的可能走势# lookback512 吃满 small 模型上下文pred_len48 即未来4小时 pred predictor.predict(dfdf.iloc[:512], x_timestampts.iloc[:512], y_timestampts.iloc[512:560], pred_len48)产出未来 48 根 5 分钟 OHLCV K 线可直接接日内策略的信号层。场景二批量扫描一组标的背景对等窗口的一篮子股票做横向预测pred_list predictor.predict_batch(df_list, x_timestamp_list, y_timestamp_list, pred_len48) # 要求lookback/pred_len一致产出与输入同序的预测 DataFrame 列表利用 GPU 并行适合筛选。场景三不写代码快速验证背景业务同事想对新数据看效果cd webui python run.py # 浏览器访问 localhost:7070产出内置 Flask 界面上传 CSV、选模型设备、拖时间窗口即可出图适合非开发者快速评估。 生产环境注意事项服务化webui/app.py是 Flask 应用端口 7070上生产建议自行封装 API 层或用 gunicorn 托管并把 predictor 实例常驻避免每次请求重新加载模型。设备KronosPredictor自动探测 cuda/mps/cpu生产环境应显式指定device防止跑错设备。性能多标的请求走predict_batchlookback保持不超过max_context超过部分会被自动截断。风控模型输出是原始预测信号仓库的免责声明也写明微调管线仅为演示——实盘前必须叠加自己的仓位、止损与成本建模逻辑。❓ 常见问题from_pretrained 下载失败怎么办原因访问 Hugging Face Hub 网络不通。解决先把模型目录下载到本地再用本地路径加载tokenizer KronosTokenizer.from_pretrained(./Kronos-Tokenizer-base) model Kronos.from_pretrained(./Kronos-small)CPU 上推理太慢或显存不足怎么办原因small 是 24.7M 参数、自回归逐步生成步数越多越慢。解决换NeoQuasar/Kronos-mini4.1M且支持 2048 上下文并设sample_count1、缩短pred_lenmodel Kronos.from_pretrained(NeoQuasar/Kronos-mini) predictor KronosPredictor(model, tokenizer, max_context2048)predict_batch 报长度错误怎么办原因批量接口要求所有序列的历史长度lookback与pred_len完全一致任一序列含 NaN 也会报错。解决先对每个 DataFrame 统一截取相同行数再传入df_list [d.iloc[-512:].reset_index(dropTrue) for d in raw_list]几行代码跑通 K 线预测两阶段机制与 5 个关键参数微调与回测的完整验证闭环克隆仓库跑通你的第一条预测曲线。【免费下载链接】KronosKronos: A Foundation Model for the Language of Financial Markets项目地址: https://gitcode.com/GitHub_Trending/kronos14/Kronos创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考