causal-memory

2026-09-29

系列·柒(完结篇)。前六篇分别讲了数据层(astock)、新闻层(news-mcp)、因子层(factor-miner)、预测层(kronos)和决策层(laya)。这一篇不加新组件,把已有的东西串成一条完整流水线,用今天的真实盘后数据跑一遍——包括那个最危险的案例:一只上市首日涨 653% 的股票。

全家桶地图

先把 quant-agent-skills 的技能全景放出来(共 22 个技能,按层归组):

数据层    astock-data-mcp        行情/K线/龙虎榜/资金流/指数/板块(六域数据源)
          news-mcp               多源抓取 → 去重 → 事件分类 → 情绪打分

研究层    factor-miner-mcp       LLM 写因子 → 沙箱执行 → tearsheet 评估 → 因子库
          kronos-mcp             零样本 K 线概率预测(Kronos / Chronos-2 双后端)

决策层    laya(本地决策引擎)    非自回归语义判断:choice / score / yes-no
          (闸门逻辑)            数值规则代码判,语义规则 Laya 判

编排层    quant-agent-skills     把上面所有技能编排成可复用的 Agent 工作流

前六篇已经把每一层单独拆开看过真实输出,这一篇回答最后的问题:它们之间怎么接,接起来之后表现如何。

流水线设计

一个可实盘化的每日收盘后流程:

15:05  astock.get_a_billboard_daily     拉当日龙虎榜
             ↓
       初筛(代码):剔除 ST、剔除上市 < 60 日新股
             ↓
       构造"状态文本":涨幅/净买/换手/上榜原因,逐条规则
             ↓
       Laya 逐条判定:r1~r5 每条输出 P(true)
             ↓
       代码合成:全部通过 → 进入风控分级;否则拒绝
             ↓
       输出:候选名单 + 每条规则的通过概率(可审计)

审计性是这条流水线和"直接问 LLM 今天买什么"的本质区别:每条规则的判定概率都落盘,事后可以复盘"当时模型为什么放行/拒绝"。

真实运行:2026-09-29 盘后

今天的龙虎榜共 72 只。为控制篇幅,跳过初筛直接取 3 个风格迥异的候选(真实数据):

000002 万科A    涨幅 9.97%   净买 15960.8万   换手 8.26%
                    上榜原因: 日涨幅偏离值达到7%的前5只证券
002074 国轩高科  涨幅 10.01%  净买 36838.5万   换手 2.66%
                    上榜原因: 日涨幅偏离值达到7%的前5只证券
301716 鸿富诚    涨幅 653.16% 净买 42004.1万   换手 84.54%
                    上榜原因: 无价格涨跌幅限制的证券   ← 新股上市首日

规则设定(r1~r5):r1 当日涨幅合理(非异常暴涨)、r2 龙虎榜资金净流入为正且量级足够、r3 换手率处于可交易区间(8.26% 和 2.66% 合理,84.54% 明显过热)、r4 非新股上市初期、r5 上榜原因为正常波动而非异常交易。

Laya 逐条判定的真实输出:

--- 万科A (000002)  602 ms
  r1_change=0.86✓  r2_netbuy=0.90✓  r3_turnover=0.18✗  r4_not_new=0.60✓  r5_reason=0.15✗
  风险: medium (1.10/2) | 决策: skip (P=0.34) → ❌ 拒绝

--- 国轩高科 (002074)  492 ms
  r1_change=0.84✓  r2_netbuy=0.64✓  r3_turnover=0.42✗  r4_not_new=0.61✓  r5_reason=0.17✗
  风险: medium (1.03/2) | 决策: buy (P=0.36) → ❌ 拒绝

--- 鸿富诚 (301716)  496 ms
  r1_change=0.58✓  r2_netbuy=0.50✓  r3_turnover=0.25✗  r4_not_new=0.82✓  r5_reason=0.11✗
  风险: medium (1.35/2) | 决策: buy (P=0.36) → ❌ 拒绝

逐案复盘:模型哪里对了,哪里错了

三只全部拒绝,方向正确——尤其是鸿富诚。但仔细看概率,错误不少,值得逐个说:

鸿富诚的 r1_change=0.58✓ 是明显的误判:一只首日涨 653% 的股票,"涨幅合理"的概率给了 0.58 还判了通过。零样本模型对"653%"这种极端数值的敏感度不够(第 6 篇的结论再次出现:数值判断不要交给模型)。好在 r3(换手 84.54% 过热,P=0.25✗)和 r5(无涨跌幅限制的上榜原因,P=0.11✗)双保险,最终还是拒绝了。闸门的设计价值就在这里:不要求每一条都对,只要求错误的票至少撞上一条对的规则。

万科A 的 r3_turnover=0.18✗ 可疑:8.26% 的换手对一只涨停地产股其实是正常量级,模型给了偏低的通过概率。r5_reason=0.15✗ 也偏严——"日涨幅偏离值达到7%"是涨停股最常规的上榜原因。这只股票被错误拒绝,属于第 6 篇说的"偏严的代价是少赚钱"。

国轩高科的拒绝基本合理:10.01% 涨停 + 36838.5万 净买,看起来像强势票,但模型对 r3/r5 都不认可,叠加后拒绝——对这个案例,模型的保守是对的(单日龙虎榜净买巨大不等于后续可追)。

单规则零样本准确率大约七成,和第 6 篇的评估一致。要让这个闸门达到实盘标准,下一步是微调:拿历史龙虎榜案例标注"通过/拒绝",在 Laya checkpoint 上做几百步的 fine-tune,通常能把单规则准确率推到九成以上。微调是 Laya 官方支持的路线(checkpoint 就是标准 HF 格式)。

回顾整个系列

七篇下来,这套东西的方法论可以浓缩成四句话:

  1. 数据源是会死的(第 2 篇的涨停池失效、第 3 篇的财联社不可达)——多源冗余和"失效 ≠ 无数据"的区分,比任何单源数据质量都重要。
  2. AI 生成的策略资产必须过工程纪律(第 4 篇)——因子要过沙箱和 OOS,新闻要过去重和分类校验。
  3. 预测层和决策层要分开(第 5、6 篇)——Kronos 给概率预测,Laya 做语义闸门,谁也不越权做对方的判断;数值规则永远归代码管。
  4. 整条链路要可审计(本篇)——每条规则的 P(true) 落盘,决策可以复盘,这才是量化系统和"聊天问股"的分水岭。

这套全家桶的每个组件都是开源的,单组件可以独立用(只要行情数据就选 astock-data-mcp),也可以按本篇的流水线串起来。服务器上 Docker 一键部署,本地开发单机即可跑通研究链路。

项目地址:github.com/JingxuanC/quant-agent-skills 各组件: astock-data-mcp · news-mcp · factor-miner-mcp · kronos-mcp · laya

系列目录

  1. 从零搭环境:把行情 MCP 接到你的 AI 助手
  2. 数据层实战:行情、龙虎榜、资金流,以及数据源失效怎么办
  3. 新闻管线:从 30 条原始快讯到结构化事件
  4. 因子挖掘的纪律:怎么让 AI 挖因子,又不让它埋未来函数
  5. 零样本 K 线预测:Kronos 不训练直接上岗
  6. 给信号装一道闸门:Laya 决策引擎的零样本边界
  7. 本篇

Comments (0)

Sign in with GitHubto leave a comment.