AI Agent 量化的分水岭:为什么不该让 LLM 直接下单?——MetaPS 论文解读 + TradingAgents 实盘复盘
TL;DR:TradingAgents 火了,但直接让 LLM 做交易决策有结构性问题。MetaPS(arXiv:2606.22385)提出一个更务实的方案——让 LLM 在预定义策略间做选择,而不是让它自己写交易指令。这篇文章从两篇知乎实盘复盘说起,拆解两种路线的优劣,最后用我们 CSI800 系统的 237 只买入信号说明”规则执行 + LLM 解读”才是当前最可行的路线。
一、开篇:TradingAgents 的火与冷
2026 年 3 月,TradingAgents 在 GitHub 上点燃了一场关于”AI Agent 做量化交易”的热潮。这个多智能体协作框架模拟了一支小型投资团队的分工——分析师负责市场研判,交易员负责信号确认,风控负责风险敞口控制——每个角色都是一个独立的 LLM Agent,通过群聊式协作做出投资决策。
中文社区的反应更快。 开发者 hsliuping 在一周内推出了 TradingAgents-CN 中文增强版(tradingagents-cn.com),整合了阿里百炼、Google、OpenAI 多模型后端,并适配 A 股/港股/美股数据接口。一时间,量化群里人人都在讨论”让 LLM 替我炒股”。
但火热只持续了一个月。
3 月 22 日,知乎上出现了一篇标题直白的实盘复盘文章——《用 TradingAgents 跑了一个月实盘,说句大实话》。作者拆解了 TradingAgents 的架构和代码,然后给出了一个残酷的结论:
“LLM 的训练目标从来不是预测价格。它擅长的是理解语言、归纳信息、生成看起来合理的文本——这些能力跟’预测股票涨跌’之间的跨度,可能比从’会打字’到’会写作’还要大。”
这篇复盘在知乎获得了远超预期的传播量。不是因为技术细节写得多么深入,而是因为它说出了一个很多人心知肚明但不愿承认的事实——我们可能正在用一把锤子去切菜。
一个月后,4 月 13 日的第二篇深度复盘《拆解 TradingAgents,AI 量化交易实践》更进一步:作者实盘跑通了整套系统,当月的收益率是 -7.3%,跑输了同期沪深 300 的 -2.1%。
二、TradingAgents 架构速览:分工没错,但决策层错了
先客观地说,TradingAgents 的架构设计本身没有大问题。它的多智能体分工模式放在任何领域都是值得借鉴的:
市场数据 → 分析师Agent → 交易员Agent → 风控Agent → 执行
↑ ↑ ↑
(研报生成) (信号确认) (风险检查)
每个 Agent 有明确的角色定义和记忆系统,它们通过聊天历史交换信息,最终由执行模块下单。框架代码质量不错,模块化程度高,还支持自定义 Agent 角色。
但问题出在决策层的本质能力上。 无论是 Analyst 还是 Trader,核心决策仍然是 LLM 在做”生成动作”(生成买卖指令)。而 LLM 的训练范式决定了它在以下几个方面存在天然缺陷:
| 缺陷 | 表现 | 例证 |
|---|---|---|
| 概率生成 vs 确定推理 | LLM 对同一输入可能生成不同输出,策略不可复现 | 实盘中同一信号反复触发却得出不同结论 |
| 幻觉风险 | LLM 会编造技术指标或历史走势(hallucination) | 知乎复盘:“它说’历史数据显示该形态胜率 83%‘,但我查了一下根本没有这个统计” |
| 缺乏时间一致性 | LLM 在不同轮次对相同市场状态的判断不一致 | 早盘看多午盘看空,没有逻辑变化却改变了立场 |
| 无法量化置信度 | LLM 生成”强烈看涨”但无法给出概率区间 | 0.5% 止损 vs 理论 60% 胜率的矛盾无法调和 |
这些不是”迭代版本能解决”的问题,而是 LLM 作为语言模型的底层架构带来的结构性限制。
三、MetaPS 的破局思路:让 LLM 选策略,而不是写指令
就在 TradingAgents 共识产生动摇的时候,一篇新论文给出了不同的解决路径。
MetaPS: Adaptive Programmatic Strategy Selection for Market Agents(arXiv:2606.22385,2026年6月21日)从根上重新审视了一个问题:LLM 在量化交易中的正确角色是什么?
MetaPS 的回答是:让 LLM 做策略选择器,而不是策略生成器。
核心架构
MetaPS 不再让 LLM 直接输出”买入/卖出/持仓量”这样的交易动作,而是维护一个预定义策略池,让 LLM 在这个池子里做选择:
预定义策略池:
├── 动量策略(过去N日涨幅排名,等权做多Top K)
├── 均值回归策略(RSI < 阈值,布林带下轨)
├── 趋势跟踪策略(均线金叉/死叉)
├── 风控保护策略(仓位缩减、止损激活)
├── 事件驱动策略(财报发布、ETF 调仓)
└── 套利策略(跨品种比价、可转债转股溢价)
选择机制:
当前市场状态 → 特征提取 → LLM 评估各策略适用性 → 选择 Top-1/Top-K → 执行对应策略代码
关键变化有三点:
第一,LLM 的决策空间被大幅缩小了。 它不需要从零开始生成交易逻辑,只需要在”动量、均值回归、趋势跟踪、风控保护”这 4~6 个预设策略里选一个(或选几个并赋予权重)。这好比从一个”写一整篇文章”的任务变成了”从现成的菜谱里选今天做什么菜”——难度天壤之别。
第二,策略是确定性代码,不是概率文本。 每一个预设策略都是用 Python 实现的、可回测、可审计的确定性逻辑。动量策略就是按因子排序取 Top K,均值回归就是 RSI < 阈值时买入——输入相同,输出永远相同。LLM 的随机性被完全隔离在”选择层”。
第三,选择本身是可验证的。 LLM 说”选动量策略”,你可以事后回溯——当时哪些指标让 LLM 认为动量适合当前市场?可以对比”如果选了均值回归会怎样”?这种可审计性在合规和复盘场景下至关重要。
为什么说这是”分水岭”?
MetaPS 和 TradingAgents 代表了 AI Agent 量化的两条截然不同的技术路线:
| 维度 | TradingAgents(直接决策) | MetaPS(策略选择) |
|---|---|---|
| LLM 角色 | 策略生成者 — 直接写交易指令 | 策略选择者 — 在预设策略中选择 |
| 策略确定性 | 低 — LLM 输出概率性,不可复现 | 高 — 底层策略是确定性代码 |
| 幻觉风险 | 高 — LLM 可能编造”历史回测数据” | 低 — 策略代码本身无法被”编造” |
| 可审计性 | 低 — 无法回溯 LLM 决策的逻辑一致性 | 高 — 每次选择都有明确理由和对照实验 |
| 技术门槛 | 中 — 框架好用,但结果不可控 | 中 — 需要维护策略池,但结果可控 |
| 上限潜力 | 理论上限高(LLM 可能发现新模式) | 受限于策略池覆盖范围 |
| 下限保障 | 低 — 可能连续亏损无法解释 | 高 — 至少有经典策略作为兜底 |
核心判断:MetaPS 没有牺牲 TradingAgents 的想象力,但多了一层安全网。
LLM 的优势——理解宏观叙事、识别异常模式、进行跨资产类比——仍然被保留在”策略选择层”。而 LLM 的劣势——概率性输出、幻觉、时间不一致——被策略代码层的确定性完全隔离。
四、两种范式对比:规则信号 + LLM 解读 vs 纯 LLM 决策
听到这里,你是不是觉得 MetaPS 的路线有点眼熟?
没错——它本质上就是 AgentQuant CSI800 系统走了近一年的路线。
我们的 CSI800 系统每天生成信号(237 只买入、32 只卖出的那种),用的是规则引擎——RSI 阈值、均线排列、成交量放大倍数,每一个信号都是确定性代码计算的。LLM 的角色不是”谁决定买入”,而是”我帮你理解这些信号的上下文和风险”。
我们的实践:信号系统 + LLM 解读层
底层信号系统(确定性):
数据清洗 → 因子计算 → 多信号聚合 → 信号列表
↓
上层解读层(LLM):
信号列表 → LLM 分析 → "分众 RSI=23 超卖,消费龙头,
流动性好,适合均值回归;捷捷微电 RSI=72 高位放量,注意双顶风险"
↓
执行决策(人为/规则):
"AI 提供了分析,但最终仓位由回测优化的规则决定"
这种分工有几个实操中验证过的好处:
1. 信号可复现。 你用同一套代码跑 100 次,信号列表是一样的。LLM 的解读可能每轮不同,但解读不改变买卖逻辑。审计时只问”信号是否准确”,不问”LLM 今天心情不好是否少买了两只”。
2. 解读可以犯错。 LLM 说错了技术形态,不影响信号本身的正确性。6 月 24 日我们的系统标记了分众传媒 RSI=23,LLM 解读为”消费龙头超卖,股价从 7.5 跌到 4.8,性价比逐步显现”——即使这个解读不够精准,买入信号本身不会变。LLM 犯错的范围被明确限定在”辅助分析”而不是”执行决策”。
3. 合规路径清晰。 “AI 告诉你某只股票 RSI 超卖”和”AI 说买它”在法律上有本质区别。前者是工具输出数据,后者是机器做投资建议——在中国金融市场监管环境下,这个区别比很多人想象的更大。
4. 降级运行能力。 如果 LLM API 挂了(429 限流、网络故障、模型下线),系统仍然能输出完整的信号列表,只是缺少了解读层。这在 TradingAgents 模式下是不可能的——Agent 挂了整个链条都停摆。
五、实证:237 只买入信号,LLM 怎么”选策略”
让我们来看一个真实的场景,说明 MetaPS 的思路在实际中如何运作。
2026 年 6 月 24 日,CSI800 系统一次性触发了 237 只买入信号——全部是均值回归策略的 RSI 超卖触发(分众 RSI=23、福耀 RSI=20、中国移动 RSI=24、大北农 RSI=8)。
同时,系统也触发了 32 只卖出信号——全部是趋势跟踪/动量策略的 RSI 超买(捷捷微电 RSI=72、大族数控 RSI=75)。
如果是 TradingAgents 路线……
LLM 分析师会收到 269 个信号(237 买 + 32 卖),然后尝试”理解这些信号的含义”,生成一份完整的投资方案。但问题来了:
- 237 只买入信号意味着什么?是整体市场超卖要抄底,还是蓝筹股集体被错杀?
- LLM 可能选择”分批买入 Top 20”——但这个选择跟”按 RSI 排序”有何不同?
- 如果 LLM 说”今天要买入”,第二天又说”形势变化,清仓”,你怎么知道它在”调整策略”还是”不一致”?
这些疑问在 TradingAgents 模式下没有答案。 因为 LLM 的选择过程是不可见的、概率性的、不可回溯的。
如果是 MetaPS 路线……
Step 1: 策略池评估
LLM 分析当前市场环境:
- 沪深 300 震荡,上证 50 多头,创业板强多头但空方占优
- ETF 20 日收益:通信 +14.85%,科技 +10.31%,300ETF +0.33%
- 科技高位 vs 蓝筹超卖,风格极致分化
Step 2: 策略选择
LLM 选择:均值回归策略(适合超卖标的)+ 风控策略(对冲科技敞口)
理由:237 只超卖信号集中在价值蓝筹,且估值周报低估也在此方向;
32 只卖出在科技,需用 50ETF 空头或仓位对冲覆盖
不选趋势跟踪(因为当前是震荡环境,趋势信号可靠性低)
不选纯动量(因为 Top 表现全是科技高位,追高风险大)
Step 3: 确定性执行
均值回归代码:按 RSI 排序买入 Top 30,等权 3.33%/只,总仓位 30%
风控代码:50ETF 配置 10% 作为对冲,总敞口控制在 20%
Step 4: 次日复盘
LLM 评估:选均值回归是否正确?——看持仓标的回归速度
如果错误,下轮调整策略偏好 → 学习发生在"选择"层,而非"生成"层
整个过程是透明的、可追溯的。 你可以精确地说出”6 月 24 日 LLM 选择了均值回归策略,理由是市场震荡 + 蓝筹超卖,使用的排选参数是 RSI < 25 + 日均成交额 > 1 亿”——每一个环节都能单独验证。
两种模式的对决
我们做了个简单对照实验(模拟数据,非实盘):
| 场景 | TradingAgents | CSI800+LLM解读 |
|---|---|---|
| 6/24 信号解读 | 生成”买入 Top 20”列表,无明确策略归属 | 明确使用均值回归,理由透明 |
| 6/25 市场反转 | 可能变更为”卖出”,但无法回溯原因 | 重新评估策略池,决定是否维持/切换 |
| 回测验证 | 无法回测——LLM 每次输出不同 | 可回测——策略代码固定,只测”选择层” |
| 风险边界 | 不清晰——LLM 可能突然激进 | 清晰——策略代码自带风控 |
六、结论:AI Agent 量化的正确分工
从 TradingAgents 到 MetaPS,2026 年 AI Agent 量化的进化路径开始变得清晰:
LLM 做意图层,规则做执行层。
具体来说,三件事 LLM 做得很好:
- 市场叙事理解——“为什么科技股涨?因为降息预期升温、算力需求爆发”
- 异常模式识别——“这次放量突破跟上次有什么不同?历史上类似形态的胜率分布?”
- 策略情境判断——“当前市场适合均值回归吗?各策略的预期胜率分别如何?”
三件事 LLM 做得很差(可能永远做不好):
- 确定性交易指令——无法保证”输入相同、输出相同”
- 精确数值计算——2.5% 止损和 3% 止损的区别,LLM 不理解
- 长期一致性——同一状态 100 次的判断应该 100% 一致
MetaPS 提出了一个优雅的分界:让 LLM 发挥它的推理优势(情境判断),同时用确定性代码弥补它的结构缺陷(执行决策)。 TradingAgents 没做到这个区分,所以它看起来很美、跑起来很糟。
七、工程建议:如何在自有系统落地”LLM 选策略”层
如果你已经在跑自己的量化系统,想引入 MetaPS 的思路,可以参考以下路径:
1. 建立策略池(最基础,但也最关键)
不需要一开始就搞复杂的策略库。只需要 3 个策略就能起步:
STRATEGY_POOL = {
"momentum": {
"description": "动量策略 — 过去N日涨幅排名 Top K",
"entry_condition": "rank(df['ret_20d'], ascending=False) < K",
"exit_condition": "rank(df['ret_5d'], ascending=False) > K*2",
"suitable_market": ["趋势明确", "低波动"],
},
"mean_reversion": {
"description": "均值回归策略 — RSI 超卖+布林下轨",
"entry_condition": "df['RSI_14'] < 25 and df['close'] < df['BB_lower']",
"exit_condition": "df['RSI_14'] > 50 or df['close'] > df['MA_20']",
"suitable_market": ["震荡", "极端分化"],
},
"risk_off": {
"description": "风控策略 — 仓位缩减至 20%",
"entry_condition": "df['VIX'] > 30 or drawdown > 5%",
"action": "reduce_all_positions_to(0.2)",
"suitable_market": ["高波动", "系统性下跌"],
}
}
2. LLM 选择逻辑
不需要 Train 一个专门的模型。用 GPT/Claude/DeepSeek 调用 prompt 即可:
def llm_select_strategy(market_indicators, strategy_pool):
"""让 LLM 根据当前市场状态选择最适合的策略"""
prompt = f"""
当前市场指标:
- 沪深300 走势:{market_indicators['hs300_trend']}
- 创业板 走势:{market_indicators['chi_next_trend']}
- 20日ETF 通信涨幅:{market_indicators['comm_etf_20d']}%
- 风格分化度:{market_indicators['style_divergence']}
- 成交额分布:科技 {market_indicators['tech_volume_pct']}% / 价值 {market_indicators['value_volume_pct']}%
请从以下策略池中选择最适合当前市场的策略,并给出理由:
{strategy_pool}
返回格式:仅返回选择的策略名称,不要生成交易指令。
"""
return llm_call(prompt)
关键设计:prompt 明确要求”不要生成交易指令”,只返回策略名称。这从根本上避免了 LLM 越界到执行层。
3. 回落机制
LLM 选择可能出错,或者被限流/断网。必须有回落机制:
def get_strategy():
try:
selected = llm_select_strategy(market_indicators, STRATEGY_POOL)
if selected not in STRATEGY_POOL:
return "default_mean_reversion" # LLM 选了不存在的策略
return selected
except (APIError, TimeoutError):
return "default_mean_reversion" # LLM 挂了的兜底
这个代码代表了整篇文章的核心思想:LLM 是辅助者,不是决策者。 它挂了系统照常跑,它选错了策略池还在。
延伸阅读
如果你对 AI Agent 量化交易的其他方向感兴趣,以下是博客上相关文章:
- LLM Agent做量化交易靠谱吗?解读3篇2026年最新论文 — 解读 QTMRL / Trading-R1 / QuantAgent
- AI选股Agent对决:LLM vs 传统因子 — CogAlpha + Alpha158 五维评估
- StockBench:LLM交易Agent评测指南 — 标准化评测框架
- LLM交易Agent的数据泄露问题 — 前沿被忽视的 Data Leakage
- AI Agent量化交易自动化实践 — 系统架构全览
MetaPS 论文来源:arXiv:2606.22385(2026年6月21日),TradingAgents 实盘复盘来源:知乎(2026年3月22日 / 4月13日)。本文分析基于个人理解和实操经验,不构成投资建议。