拓十年匠心定制 · 商业建站与技术教学双线并行 咨询热线:400-886-1026 service@lmnt.cn
ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

Awesome-finance-skills源码级深潜:Kronos K线预测与新闻Embedding投影的实现原理

Awesome-finance-skills源码级深潜:Kronos K线预测与新闻Embedding投影的实现原理

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线序列压缩成二进制 tokenkronos.py
② 生成层Transformer 自回归采样,逐根生成未来 K 线kronos.py
③ 新闻注入层把新闻 Embedding 投影成全局偏置kronos.py

对外只需调用一个入口——KronosPredictorUtility 单例工具类,它负责加载模型、编码新闻、并输出预测结果。

二、第一关:KronosTokenizer 如何把 K 线"压缩"成词元 🧩

Kronos 借鉴了大语言模型"把文字变成 token"的思路,只不过这里的 token 不是汉字,而是K 线的二进制编码。

分词器 KronosTokenizer 的工作方式分三步:

  1. 提特征:一段历史 K 线(开盘、最高、最低、收盘、成交量)先经线性层和编码器 Transformer 提特征;
  2. 量化:再送入 BinarySphericalQuantizer(二进制球面量化器,简称 BSQ),把每个时刻的特征向量"四舍五入"到 ±1 的二进制球面上。每个 token 又拆成s1(粗粒度)+ s2(细粒度)两半——就像先确定"价格往哪走",再细化"具体走多少";
  3. 重建:拿到 token 编号后,decode 把编号还原成比特,再经解码器 Transformer 重建出 K 线数值。

一句话理解:K 线序列 ≈ 一段"价格语言",量化器是压缩算法,token 就是价格世界的字母。

三、第二关:Kronos 如何逐根"画出"未来 K 线 📈

生成层的核心是 Kronos 模型,由几个精巧部件组成:

  • 分层嵌入 HierarchicalEmbedding:s1、s2 各有一套词表 Embedding,拼接后统一投影,让模型"先懂趋势、再看细节";
  • 时间嵌入 TemporalEmbedding:把分钟、小时、星期几、日期、月份分别嵌入后相加,让模型感知"周一效应""月末效应"等时间规律;
  • RoPE 注意力 + RMSNorm:现代 Transformer 的标准配置,保障长序列中位置关系的表达;
  • 依赖感知层 DependencyAwareLayer:先让 s2 词元通过交叉注意力"关照"整个上下文,再预测细粒度 token,保证粗细两层逻辑自洽。

采样流程(auto_regressive_inference)像"盲写文字":

  1. 用 decode_s1 得到下一时刻 s1 词元的概率分布,按top-p 核采样(默认top_p=0.9)抽一个;
  2. 立刻用 decode_s2 在该 s1 条件下抽样出配套的 s2;
  3. 新 token 滑入上下文缓冲区(最大窗口 512),循环直到画满预测长度。

最后把多条采样路径取平均削弱随机性,再用历史均值/标准差反归一化回真实价格(predict)。

四、新闻 Embedding 投影:一条新闻如何偏置整条预测 📰

纯技术面预测有个天然短板——不知道"市场发生了什么"。Awesome-finance-skills 的解法极其轻巧:在 Kronos 末尾挂一个线性投影层,把新闻向量注入模型。数据流(kronos_predictor.py):

  1. 新闻文本截断到 1000 字,用 all-MiniLM-L6-v2 句向量模型编码成384 维新闻 Embedding;
  2. 投影层news_proj(一个 384 → d_model 的线性层)把它变换到模型维度;
  3. 注入方式见 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 线数据到预测报告 ✅

  1. 准备数据:用 alphaear-stock 技能拉取 OHLCV 历史行情;
  2. 调用预测:KronosPredictorUtility.get_base_forecast(df, lookback=20, pred_len=5, news_text=...),传入最近 20 根 K 线,输出未来 5 个交易日的 KLinePoint 列表;
  3. 智能修正:按 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),仅供参考

返回列表