Skip to content

16 — TradingAgents 式分析师实验(test_ta,2026-06-11) ​

问题:给委员会加基本面/情绪/新闻 3 个 TradingAgents 式分析师 subagent,有没有收益? 上限在哪?实验代码在分支 test_ta(不合 main),本页是结论的单一可信源。 结论先行:预注册 Gate 三个分析师 0/3 过线,集成阶段按预注册不触发; "确定性事实块进推理、不加投票/报告型 LLM 语音"的现有架构得到实验支持。 关联:12-verification.md、adr/009。

0. 为什么是这个设计(v1 被推翻的教训) ​

最初设计(直接跑 6 个委员会 draws 做 A/B/B1 对比)被五条 review 意见推翻,核心是 功效命门:122 决策日 × 35-45% 单跑 verdict 翻转噪声 → 大概率花 ¥90+12h 买一个 "测不出来";且新增 LLM 语音无法用"同一份 verdict 改策略"的消融退路事后剔噪。 其余四条:新闻分析师无 2024 存档会注水、基本面无历史 PE 是 Quant 换皮、B1 替换臂 双变量混杂、预算闸门可能撞线。

v2 重构为分阶段、贵的部分条件触发:

  • Phase A 信号存在性(高功效,主结论来源):每个分析师独立对 244 个 (决策日×资产) 出带强制 STANCE 的报告,确定性打分 vs 前向收益。 n=244/分析师、SE≈3.2%——比委员会级 A/B 灵敏一个量级,且便宜
  • Phase B 集成 A/B(低功效):仅 Phase A 有人过线才跑,只集成过线者
  • Phase C 上限(剂量响应):仅 Phase B 阳性才跑,一臂一停

1. 数据标签表(Phase 0 可行性 spike) ​

分析师数据源标签说明
情绪^VIX 全历史滚动 2y 分位 + 资产 ATR 突变比(生产口径)真实point-in-time 干净
基本面-黄金CFTC COT 金期货非商业持仓周报(deacot 年档,免费)真实as_of+3 日发布滞后对齐;同日多合约取主力(OI 最大)
基本面-NDXOHLC 估值代理(2y 分位/MA 偏离/距 ATH)+ ^TNX降级免费历史指数 PE 不存在(macrotrends 403)
新闻GDELT 2.0 DOC API 历史档,决策日前 7 天头条真实·降级仅标题无正文;多语言混合;本机 IP 被重度限流(~75% 429),合并查询+多轮断点续抓收齐

被否决的源:WGC 央行购金/ETF 流向 xlsx(登录墙);macrotrends 指数 PE(403)。

2. 预注册判定标准(全量跑之前写死) ​

Phase A Gate(scripts/eval_ta_signal.py@test_ta):

  • 主口径:30d 方向命中率(仅 stance≠neutral 样本),Wilson 95% CI
  • 分析师"有信号" = CI 下界 > max(①同子集方向基率, ③输入数据机械映射点估计)
    • ① 在该分析师自己表态的子集上算"永远猜多数方向"的命中率(同分母 paired)
    • ③ 情绪=VIX 分位机械分档(≥0.85→bearish/≤0.35→bullish);基本面-金=COT 净持仓 4 周变化符号;基本面-NDX=2y 分位 ≥0.8→bearish/≤0.2→bullish;新闻无③只比①
    • 赢不了"无脑猜多数方向"或赢不了自己输入的机械映射 → 不算 LLM 增量
  • 0 个过线 → 不跑 Phase B;≥1 过线 → Phase B 只集成过线者
  • (计划中提过的"②生产概率表方向"基线含全样本前视,弃用未计)

实现口径:每 (决策日×资产×分析师) 一次 LLM 调用(无辩论无委员会);决策日 = 与历史 A/B/C 消融完全相同的 122 个周频日(2024-01-01 → 2026-04-27);prompt 改编 TauricResearch/TradingAgents(Apache-2.0)analyst system messages;与生产委员会 同模型同温度(0.2);零前视(序列截断 / COT 滞后对齐 / 新闻窗 [asof−7d, asof])。

3. Phase A 结果(2026-06-11,732 条报告,0 条解析失败) ​

分析师表态/总数30d 命中 [95%CI]60d 命中①基率③机械映射与③一致率Gate
fundamental147/244 (60%)50.3% [42.4, 58.3]52.4%70.7%49.8% (n=221)56%FAIL
├ GC=F9550.5%
└ NDQ.AX5250.0%
news148/244 (61%)57.4% [49.4, 65.1]58.3%73.0%—(无③,比①)—FAIL
├ GC=F8458.3%
└ NDQ.AX6456.2%
sentiment156/244 (64%)64.7% [57.0, 71.8]65.3%73.1%57.5% (n=106)49%FAIL
├ GC=F8261.0%
└ NDQ.AX7468.9%

成本:972k tokens(≈¥10-20),无委员会重跑。

4. Gate 判定与归因矩阵 ​

Gate:0/3 过线 → Phase B/C 按预注册不触发。

逐分析师归因("是我们的问题还是实验设计的问题"):

分析师归因依据
fundamental数据本身无 30d 方向信号(金,真数据)+ 实验设计降级(NDX)金:真 COT 数据下 LLM 50.5% 与机械映射 49.8% 双双 ≈ 抛硬币——不是 LLM 读不好,是这份数据在此窗口对 30d 方向就没信息量。NDX:估值代理与 Quant 维度重叠(设计已知降级),50.0%
news混合:部分实验设计(仅标题、多语噪声、分流粗),部分根本性(头条信息已被价格消化)57.4% 显著高于抛硬币但远低于 73% 基率;两种解释从本数据无法区分——真正公平的检验在前向实验(见 §6)
sentiment不是数据/实现问题,是"方向预测增量"这个目标本身真数据 + LLM 确实做了非平凡解读(赢自己的机械映射 +7.2pp,与映射一致率仅 49%,常做逆向判读如 2024-08-05 恐慌底转多)——但在单边窗口里仍输给"无脑看多"。与系统既有结论一致:方向预测层面 LLM 边际极低(verdict 闭卷 ≈57%)

对架构的含义:

  1. 现有路线(确定性事实块进推理 + 概率表锚方向 + LLM 当翻译/解读员)得到支持: 独立打分时 LLM 语音都赢不了基率,进了更噪的委员会辩论更不可能产生方向增量
  2. sentiment "赢机械映射但输基率"恰好说明 LLM 的价值在解读(contrarian 判断、 语境整合)而非方向投票——这正是事实块 + CIO 否决权的设计假设
  3. "subagents 上限"的回答:在本数据/窗口下,可交易方向增量意义上的上限是 0 个。剂量响应(+1/+3/+7)因 gate 未过未测——若未来某窗口有分析师过线, 按 Phase C 增量式设计再测

事后分解(post-hoc,非预注册——只用于归因不用于改判) ​

按表态方向拆开看(30d,n 为表态数):

分析师bearish 命中bearish 后 30d 中位bullish 命中
sentiment16% (n=19)+2.8%72% (n=137)
news21% (n=39)+2.3%71% (n=109)
fundamental31% (n=80)+1.3%73% (n=67)

两个钉死结论的事实:①bullish 命中 71-73% ≈ 基率 73%——看多表态是牛市复读, 无择时含量;②bearish 表态在本窗口是反指标(喊空后市场中位继续涨)。 "sentiment 赢机械映射"的机制由此澄清:不是解读智慧可分离,而是它比 naive 恐慌映射更少喊空——在 V 型反弹频发的窗口里这恰好少错。与系统既有发现 (COVID 类 V 型里阻止买入有真实成本)互证。bearish 在真熊市窗口的表现未测。

5. 功效与局限(诚实声明) ​

  • n=244/分析师,SE≈3.2%;30d 窗重叠 → 独立样本少于名义值
  • 单边牛市窗口:2024-26 两资产 ~73% 的 30d 窗为正,"打赢基率"是高门槛—— 这是"有没有用"的正确门槛,但熊市窗口的结论未覆盖;sentiment 在震荡/熊市 可能不同 → 已补测,见 §8(2022 熊市窗口 + 跨模型复测矩阵)
  • news 仅标题、fundamental-NDX 是代理——这两条 FAIL 的适用范围受此限制
  • 单模型单温度;不同模型家族可能不同(未测) → 已补测,见 §8
  • Phase B(集成损益)未跑——"集成后无增益"是从"信号不存在"推定的,不是直接测量

5b. 复测矩阵(2026-06-12,用户质疑驱动:"不可能是 0 个") ​

针对 §5 的三个盲区(单窗口/单模型/无 ensemble)补测。预注册扩展标准(裁决前 写死):跨模型 2/3 过线 = 信号存在但模型敏感;1/3 = 孤证不立维持原判。 (精确口径:2 个厂商 3 个模型——MiMo v2.5-pro 为生产同款;reasoner/chat 同属 DeepSeek 不同后训练。GDELT 2022 缓存 102/104 key,缺 2022-01-03 两 key 优雅降级。)

30d 命中 vs Gate(CI 下界 > max(①基率, ③机械映射)) ​

窗口 × 模型fundamentalsentimentnews
2024-26 × mimo-flash(原实验)50.3% FAIL64.7% FAIL57.4% FAIL
2024-26 × deepseek-reasoner28.8% FAIL58.2% FAIL59.3% FAIL
2022 熊市 × mimo-flash74.3% PASS48.3% FAIL50.9% FAIL
2022 熊市 × deepseek-reasoner60.6% FAIL48.0% FAIL50.0% FAIL
2022 熊市 × deepseek-chat(裁决)57.8% FAIL——

"直接加三个"补测(combined 联合分析师,2026-06-12 用户追问):一个 LLM 同时 读三份数据包再表态(③基线=sentiment/fundamental 机械映射一致票):

窗口 × mimo-flashcombined 30d 命中同子集基率对比单独最优判定
2024-2648.7% [41.6,55.8]73.3%比三个单独的都差(50.3/57.4/64.7)FAIL
2022 熊市66.7% [55.9,76.0]61.7%比 fundamental 单独(74.3%)差FAIL

机制:联合上下文不产生涌现,只放大风险叙事——2024 combined 喊空 98 次 (单独分析师 19-80 次)命中仅 27%;2022 则稀释了唯一有点信号的 fundamental (bullish 腿 85%→57%)。"逐个测无信号 ≠ 一起加有戏"被正面证伪:一起加更差。

判定:fundamental-2022 单模型过线,跨模型 1/3 → 孤证不立。ADR-009 维持原判。

机制发现(比矩阵本身更有用) ​

  1. "模型更强"假设出局且反向:reasoner 在 2024 窗口比 flash 更差 (fundamental 28.8%——118 个表态 107 个喊空,推理能力被用来给自己讲熊市 故事)。bullish 复读基率 / bearish 反指标的机制跨模型成立。
  2. flash-2022 的 PASS 长什么样:双腿都赢(bearish 68% / bullish 85%),但 赢的部分恰好是它偏离机械映射的 40% 判断;reasoner/ds-chat 与映射一致率 更高(74%/54%),命中收敛到映射本身(61.3%)≈ 把自己变成那条 if-else。 flash 的偏离是真解读还是窗口风格巧合,1/3 复现率倾向后者。
  3. ensemble 也是死路(2024 窗口,3 种组合全 FAIL):多数票 60.0% vs 基率 69.6%;一致票 80.0% vs 90.0%(三人一致时恰是行情最明显时);任一喊空否决 43.2%(最差)。共识强度与正确率不单调(3/3 看多→88.9% 涨,2/3→57.5%, 1/3→68.9%)——成员间无可加的独立信息。
  4. sentiment 跨窗口对称失败:2024 它的 bearish 是反指标,2022 它的 bullish 是反指标(38% 命中,熊市里"恐慌=抄底"一路接刀)。哪条腿逆 regime 大势, 哪条腿就是反指标——情绪无跨窗口稳定信号。
  5. news 熊市格收口:2022 两模型 50.9%/50.0% ≈ 抛硬币(2024 是 57-59% vs 基率 73)——两窗口×两模型一致指向"头条信息已被价格消化",§4 归因表 里"部分根本性"的判断升级为主解释;前向实验(§6)仍是公平检验。
  6. 值得留意的残余信号:③机械映射本身(COT 4 周变化符号 + 估值分位)在 2022 达 61.3% vs 基率 51.4%(n=62,CI 含基率,未达显著)。三个模型都向它 收敛。若做事实块(确定性、零 LLM 投票、regime 条件触发),是低成本前向 实验候选——与"数据进桌、LLM 不加票"架构一致。

成本:全部复测 ~1.6M tokens(reasoner×2 + flash 补 + ds-chat 裁决),约 ¥30-50。

6. 后续:新闻分析师前向实验队列 ​

回测里新闻只有头条;公平的新闻检验是前向的:事件层(2026-05 起)在攒真实 新闻+stance,#26 指数→代理映射修复后 NDQ.AX 也能命中指数事件。攒 3-6 个月后可做 live A/B(同日双跑,事件 brief 有/无),届时回填本页。

7. 复现 ​

已冻结的去 PII 复现包在 main:experiments/ta-analysts/(数据+脚本+基线+ SCHEMA,2540 条报告可直接 eval_ta_signal.py 复算 Gate,不用重跑 LLM)。 数据三角色约定见 experiments/README.md。

从零重跑(需实验活代码,仍在 test_ta 分支):

bash
git checkout test_ta   # 实验活代码(勿在委员会跑动时切分支)
uv run python scripts/ta_data.py cot          # CFTC COT 缓存
uv run python scripts/ta_data.py fetch_news   # GDELT 抓取(限流,数小时)
uv run python scripts/ta_phase_a.py           # 732 次 LLM 调用(断点续跑)
uv run python scripts/eval_ta_signal.py       # 预注册 Gate 判定

Phase B 集成代码同在该分支(INVEST_TA_ANALYSTS flag,默认关=与 main 逐位等价, 有等价性测试),gate 过线时可直接复用。