Awesome-finance-skills源码级深潜:Kronos K线预测与新闻Embedding投影的实现原理
【免费下载链接】Awesome-finance-skillsA collection of Awesome Finance Agent Skills for free and easy to start | 一系列开源免费的金融分析Agent Skills项目地址: https://gitcode.com/gh_mirrors/aw/Awesome-finance-skills
Awesome-finance-skills 是一套开源免费的金融分析 Agent Skills 技能集,让 LLM 秒变"华尔街分析师"。本文带你深入项目最核心的 alphaear-predictor 技能,用通俗语言讲清两件事:Kronos 模型如何把 K 线序列压缩成"价格词元"、再逐根画回未来曲线;一条新闻又如何通过 384 维 Embedding 向量与一个轻量投影层,悄悄扭转整条预测。
一、先看清全貌:Kronos K线预测的三层结构 💡
整个预测流水线可以拆成"编码 → 生成 → 注入"三层,全部位于 skills/alphaear-predictor/ 技能内:
| 层级 | 角色 | 核心文件 |
|---|---|---|
| ① 分词层 | 把 OHLCV K线序列压缩成二进制 token | kronos.py |
| ② 生成层 | Transformer 自回归采样,逐根生成未来 K 线 | kronos.py |
| ③ 新闻注入层 | 把新闻 Embedding 投影成全局偏置 | kronos.py |
对外只需调用一个入口——KronosPredictorUtility 单例工具类,它负责加载模型、编码新闻、并输出预测结果。
二、第一关:KronosTokenizer 如何把 K 线"压缩"成词元 🧩
Kronos 借鉴了大语言模型"把文字变成 token"的思路,只不过这里的 token 不是汉字,而是K 线的二进制编码。
分词器 KronosTokenizer 的工作方式分三步:
- 提特征:一段历史 K 线(开盘、最高、最低、收盘、成交量)先经线性层和编码器 Transformer 提特征;
- 量化:再送入 BinarySphericalQuantizer(二进制球面量化器,简称 BSQ),把每个时刻的特征向量"四舍五入"到 ±1 的二进制球面上。每个 token 又拆成s1(粗粒度)+ s2(细粒度)两半——就像先确定"价格往哪走",再细化"具体走多少";
- 重建:拿到 token 编号后,decode 把编号还原成比特,再经解码器 Transformer 重建出 K 线数值。
一句话理解:K 线序列 ≈ 一段"价格语言",量化器是压缩算法,token 就是价格世界的字母。
三、第二关:Kronos 如何逐根"画出"未来 K 线 📈
生成层的核心是 Kronos 模型,由几个精巧部件组成:
- 分层嵌入 HierarchicalEmbedding:s1、s2 各有一套词表 Embedding,拼接后统一投影,让模型"先懂趋势、再看细节";
- 时间嵌入 TemporalEmbedding:把分钟、小时、星期几、日期、月份分别嵌入后相加,让模型感知"周一效应""月末效应"等时间规律;
- RoPE 注意力 + RMSNorm:现代 Transformer 的标准配置,保障长序列中位置关系的表达;
- 依赖感知层 DependencyAwareLayer:先让 s2 词元通过交叉注意力"关照"整个上下文,再预测细粒度 token,保证粗细两层逻辑自洽。
采样流程(auto_regressive_inference)像"盲写文字":
- 用 decode_s1 得到下一时刻 s1 词元的概率分布,按top-p 核采样(默认
top_p=0.9)抽一个; - 立刻用 decode_s2 在该 s1 条件下抽样出配套的 s2;
- 新 token 滑入上下文缓冲区(最大窗口 512),循环直到画满预测长度。
最后把多条采样路径取平均削弱随机性,再用历史均值/标准差反归一化回真实价格(predict)。
四、新闻 Embedding 投影:一条新闻如何偏置整条预测 📰
纯技术面预测有个天然短板——不知道"市场发生了什么"。Awesome-finance-skills 的解法极其轻巧:在 Kronos 末尾挂一个线性投影层,把新闻向量注入模型。数据流(kronos_predictor.py):
- 新闻文本截断到 1000 字,用 all-MiniLM-L6-v2 句向量模型编码成384 维新闻 Embedding;
- 投影层
news_proj(一个 384 → d_model 的线性层)把它变换到模型维度; - 注入方式见 Kronos.forward,核心只有两行:
news_bias = self.news_proj(news_emb).unsqueeze(1) # [B, 1, d_model] x = x + news_bias # 广播加到序列每一个位置关键就在第二行:新闻不占用任何 token 位置,而是作为一个全局偏置,均匀影响模型对"下一步该生成什么 token"的判断——利空新闻会把整个分布往"下跌词元"方向推,利好则相反。这正是"新闻 Embedding 投影"名字的由来。
五、投影层权重从哪来?"新闻—行情"自动合成训练 🏋️
384 维新闻向量怎么就能懂股价?答案是 AutoSynthesisTrainer 的四步自动合成流水线:
| 步骤 | 做什么 | 对应代码 |
|---|---|---|
| ① 找"地震" | 扫描一年行情,挑出涨跌幅超过 2% 的异动日 | discover_shocks |
| ② 验因果 | 搜索当日新闻,LLM 判断是否真因果(返回is_causal) | find_reason_and_verify |
| ③ 成对入库 | "50 天历史 K 线 + 未来 5 天目标 + 新闻向量" | run_synthesis_and_train |
| ④ 只训投影层 | Kronos 底座全部冻结,Adam 只更新 news_proj,30 轮少样本训练 | training.py |
训练完只保存 news_proj 权重(save_model)。仓库已附带预训练好的检查点:kronos_news_v1_20260101_0015.pt。推理时 KronosPredictorUtility 会自动扫描exports/models/加载最新权重,加载失败则优雅降级为纯技术面预测。
六、三步上手:从 K 线数据到预测报告 ✅
- 准备数据:用 alphaear-stock 技能拉取 OHLCV 历史行情;
- 调用预测:
KronosPredictorUtility.get_base_forecast(df, lookback=20, pred_len=5, news_text=...),传入最近 20 根 K 线,输出未来 5 个交易日的 KLinePoint 列表; - 智能修正:按 PROMPTS.md 中的 Forecast Adjustment 提示词,让 Agent 结合最新新闻对数值做主观微调,生成带"关键逻辑、入场建议、目标位/止损位"的完整报告。
安装只需一步:npx skills add Awesome-finance-skills@alphaear-predictor,或把 skills/ 目录整体拷入 Agent 技能目录(每个技能文件夹需含 SKILL.md)。
七、关键文件速查表 📁
| 想改什么 | 去哪找 |
|---|---|
| 模型结构(Transformer、双头解码、新闻投影层) | predictor/model/kronos.py |
| 量化器、嵌入、注意力等基础模块 | predictor/model/module.py |
| 推理入口、新闻编码、权重加载 | kronos_predictor.py |
| 数据合成与投影层训练 | utils/predictor/training.py |
| K线图表与损失曲线可视化 | utils/predictor/kline_generate.py |
想继续深入,还可以搭配 alphaear-logic-visualizer 生成市场传导链路图、alphaear-sentiment 计算新闻情绪分,让 Kronos K线预测从"单点数值"进化为"有故事的技术面分析"。
【免费下载链接】Awesome-finance-skillsA collection of Awesome Finance Agent Skills for free and easy to start | 一系列开源免费的金融分析Agent Skills项目地址: https://gitcode.com/gh_mirrors/aw/Awesome-finance-skills
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考