Strasmore Research
Deep Dives · Matt ConnorBy Matt Connor ·

多智能体AI交易系统 真实情况

多智能体AI交易系统用LLM委员会决策交易,本文解析其架构、市场数据成本及回测陷阱,助您识别真实性能与README声明差异。

一个多智能体AI交易系统将单个交易决策拆解给多个大语言模型实例,为每个实例分配角色,并将它们的输出合并为单一订单。通常的阵容包括:新闻阅读器、基本面分析师、图表分析师、风险检查员,以及一个负责仲裁的管理智能体。截至2026年7月,GitHub算法交易主题下有几个此类形态的开源框架,每个都有几百颗星。本页介绍其架构,区分已发表的证据与README中的声明,并给出任何版本都必须克服的市场数据成本。

多智能体AI交易系统究竟是什么

该架构是一个设有主席的委员会。每个智能体都是一个提示模板、一个数据源和一个输出模式。新闻智能体接收标题并返回一个标签。基本面智能体接收文件摘要并返回一个分数。主席智能体接收这些标签和分数并返回一个订单。

该设计衍生出三个特性,在讨论任何性能声明之前,每个都值得明确指出。

每个智能体通常共享一个基础模型。针对相同权重的五个提示会产生相关的意见,因此五个智能体的投票并非五个独立的估计。委员会框架暗示了一种多样化,但实现并未提供。

该系统是一个包裹着数值决策的文本流水线。模型读取文字并输出一个标记。头寸规模、订单类型、止损设置和退出逻辑都是底层的普通代码,而决定结果的大部分因素存在于这些代码中,而非提示中。

一个委员会往返需要几秒钟。这对于每周再平衡是可行的,但在日内速度下则无关紧要,因为做市商在微秒级别报价和重新报价。

研究支持什么,不支持什么

关于金融领域语言模型的已发表研究,可分为三个强度差异很大的声明。

提取和分类是强声明。模型能以几年前需要定制模型才能达到的准确度,标注情绪、从文件中提取数据并压缩长文档。这在保留文本上是可衡量的,并且经得起检验。

描述市场状态是混合声明。模型能流畅地描述市场状态,这些描述通常与提供给模型的数据一致。但描述是否包含价格尚未包含的信息,是另一个问题,而仔细检验这一点的论文报告的效果较小,误差范围较大。

盈利能力是弱声明。大多数仓库的README报告的是回测结果,而非有资金支持的实盘记录。样本内权益曲线与实盘账户之间的距离,是量化交易中最古老的距离。将语言模型加入其中并不会缩短这个距离。

信号必须跨越的成本底线

每笔交易都要跨越一个价差,这是策略在考虑其他任何因素之前必须跨越的底线。2026年6月22日至26日,常规交易时段内六只美国上市股票的中间报价价差:

查询成本下限:中点报价价差中位数(基点),常规交易时段,2026年6月22-26日
每个数字背后的完整 SQL
SELECT ticker,
       round(quantileExactIf(0.5)(toFloat64(ask_price - bid_price) / (toFloat64(ask_price + bid_price) / 2), bid_price > 0 AND ask_price > bid_price) * 10000, 2) AS spread_bps,
       round(2 * quantileExactIf(0.5)(toFloat64(ask_price - bid_price) / (toFloat64(ask_price + bid_price) / 2), bid_price > 0 AND ask_price > bid_price) * 10000, 2) AS round_trip_bps,
       round(count() / 1e6, 1) AS quote_updates_m
FROM global_markets.cache_stocks_quotes
WHERE ticker IN ('SPY', 'AAPL', 'MSFT', 'KO', 'F', 'RIOT')
  AND sip_timestamp >= toDateTime('2026-06-22 00:00:00')
  AND sip_timestamp < toDateTime('2026-06-27 00:00:00')
  AND (toHour(sip_timestamp) * 60 + toMinute(sip_timestamp)) BETWEEN 810 AND 1199
GROUP BY ticker
HAVING countIf(bid_price > 0 AND ask_price > bid_price) > 0
ORDER BY spread_bps
Run this yourself

一个基点是一个百分点的百分之一。该面板中价差最窄的股票SPY当周报价价差中位数为0.27个基点。价差最宽的RIOT7.09个基点。一次往返交易需支付两次价差,因此第一只股票的一次买入和卖出从0.55个基点开始落后,最后一只股票的相同操作从14.19个基点开始落后。一个每周换手两次的智能体,每年大约要支付一百次这种费用,无论判断正确与否,这笔费用都会被收取。交易一只股票的成本列出了其余费用。

方向性判断必须击败的噪音

方向性判断是根据一个主要由小数字组成的分布来评分的。2025日历年SPY的每个交易时段,按收盘到收盘的涨跌幅大小排序:

查询典型波动幅度:SPY收盘价变动按规模分组,2025日历年度
每个数字背后的完整 SQL
WITH daily AS (
    SELECT toDate(toTimeZone(window_start, 'America/New_York')) AS d,
           argMax(close, window_start) AS close_px
    FROM global_markets.delayed_stocks_minute_aggs
    WHERE ticker = 'SPY'
      AND toDate(toTimeZone(window_start, 'America/New_York')) >= toDate('2025-01-01')
      AND toDate(toTimeZone(window_start, 'America/New_York')) <= toDate('2025-12-31')
      AND (toHour(toTimeZone(window_start, 'America/New_York')) * 60
           + toMinute(toTimeZone(window_start, 'America/New_York'))) BETWEEN 570 AND 959
    GROUP BY d
),
paired AS (
    SELECT d, close_px,
           any(close_px) OVER (ORDER BY d ASC ROWS BETWEEN 1 PRECEDING AND 1 PRECEDING) AS prev_px
    FROM daily
),
rets AS (
    SELECT d, round(100 * (toFloat64(close_px) / toFloat64(prev_px) - 1), 3) AS ret_pct
    FROM paired
    WHERE prev_px > 0
)
SELECT multiIf(abs(ret_pct) < 0.25, 'under 0.25%',
               abs(ret_pct) < 0.5, '0.25 to 0.5%',
               abs(ret_pct) < 1.0, '0.5 to 1%',
               abs(ret_pct) < 2.0, '1 to 2%',
               '2% and up') AS move_bucket,
       count() AS sessions,
       round(100 * count() / sum(count()) OVER (), 1) AS pct_of_sessions
FROM rets
GROUP BY move_bucket
ORDER BY min(abs(ret_pct))
Run this yourself

全年有一半时间涨跌幅在半个百分点以内。under 0.25%的区间包含了24.9%的交易时段,0.25 to 0.5%的区间包含了另外24.1%的交易时段。在另一端,13个交易时段涨跌幅达到2% and up,占全年的5.2%。

将此与价差面板对比。一个基点是0.01%。一个典型的0.3%的日内波动是窄价差的三十倍,大约是宽价差的四倍。这个算术为耐心且正确的判断留出了空间,而为快速且边际性的判断留下的空间则非常小。

可交易股票池的实际位置

智能体框架宣传其覆盖面,通常每天早晨扫描数百只股票。美元成交量显示了该列表中有多少股票能够吸收大额订单。2026年6月30日常规交易时段内所有美国上市股票,按该时段美元成交量排名分组:

查询资金交易分布:按流动性等级划分的美元交易量,常规交易时段,2026年6月30日
每个数字背后的完整 SQL
WITH tv AS (
    SELECT ticker,
           sum(toFloat64(close) * toFloat64(volume)) AS dollar_volume
    FROM global_markets.delayed_stocks_minute_aggs
    WHERE toDate(toTimeZone(window_start, 'America/New_York')) = toDate('2026-06-30')
      AND (toHour(toTimeZone(window_start, 'America/New_York')) * 60
           + toMinute(toTimeZone(window_start, 'America/New_York'))) BETWEEN 570 AND 959
    GROUP BY ticker
    HAVING sum(toFloat64(close) * toFloat64(volume)) > 0
),
ranked AS (
    SELECT ticker, dollar_volume,
           row_number() OVER (ORDER BY dollar_volume DESC) AS rk
    FROM tv
)
SELECT multiIf(rk <= 10, 'top 10 names',
               rk <= 50, 'ranks 11 to 50',
               rk <= 200, 'ranks 51 to 200',
               rk <= 1000, 'ranks 201 to 1000',
               'ranks beyond 1000') AS liquidity_tier,
       count() AS tickers,
       round(sum(dollar_volume) / 1e9, 2) AS dollar_volume_bn,
       round(100 * sum(dollar_volume) / (SELECT sum(dollar_volume) FROM tv), 1) AS pct_of_dollar_volume
FROM ranked
GROUP BY liquidity_tier
ORDER BY min(rk)
Run this yourself

十只股票占据了该时段22.5%的美元成交量,约205.04亿美元。接下来的40只股票占据了20.5%的成交量。在另一端,排名超过1000的10966只股票共同占据了12.9%的成交量,约117.83亿美元分布在整个长尾中。

覆盖面广容易宣传,但交易成本高昂。一个对三千只股票进行排名的委员会,其大部分排名工作都花费在这个长尾中,而上述价差面板中的成本在这里是真实成本,而非四舍五入的误差。

为何这些回测会美化系统

美化回测的最大单一来源是窗口选择。2016年至2025年按日历年划分的SPY,以及每年最高与最低收盘价之间的差距:

查询窗口决定答案:SPY日历年度价格回报与年内高低区间,2016-2025年
每个数字背后的完整 SQL
WITH daily AS (
    SELECT toDate(toTimeZone(window_start, 'America/New_York')) AS d,
           argMax(close, window_start) AS close_px
    FROM global_markets.delayed_stocks_minute_aggs
    WHERE ticker = 'SPY'
      AND toDate(toTimeZone(window_start, 'America/New_York')) >= toDate('2016-01-01')
      AND toDate(toTimeZone(window_start, 'America/New_York')) <= toDate('2025-12-31')
      AND (toHour(toTimeZone(window_start, 'America/New_York')) * 60
           + toMinute(toTimeZone(window_start, 'America/New_York'))) BETWEEN 570 AND 959
    GROUP BY d
),
yr AS (
    SELECT toYear(d) AS year,
           argMin(close_px, d) AS first_close,
           argMax(close_px, d) AS last_close,
           max(close_px) AS high_close,
           min(close_px) AS low_close,
           count() AS sessions
    FROM daily
    GROUP BY year
)
SELECT year,
       sessions,
       round(100 * (toFloat64(last_close) / toFloat64(first_close) - 1), 1) AS price_return_pct,
       round(100 * (toFloat64(high_close) / toFloat64(low_close) - 1), 1) AS high_low_range_pct
FROM yr
ORDER BY year
Run this yourself

一个仅在2021(当年收盘28.7%上涨)测试的系统,继承了一条上涨的曲线。同一个系统仅在2022(当年收盘-20%下跌)测试,则继承了一条下跌的曲线。年内最高与最低收盘价之间的差距在2020年达到了68%,即使在较为平静的年份也保持在25.3%以上。

在窗口问题之上还有四个陷阱,其中一个仅属于语言模型。

  • 通过训练数据的前瞻性偏差。一个在2025年文本上训练的模型,已经读到了2023年的一笔交易结果如何。在2023年上的回测是在问一个模型已知答案的问题,任何对价格序列的洗牌都无法消除这种知识。
  • 股票列表的幸存者偏差。由当前上市股票组成的股票池,遗漏了那些在此过程中退市的股票。
  • 成交假设。假设每笔订单都以中间价成交的回测,完全抹去了上述整个成本面板。
  • 提示变体的选择。尝试二十种提示措辞并报告最佳结果,这与语言模型出现之前困扰参数扫描的过拟合问题相同。

语言模型智能体在哪些方面可能真正有用

诚实的宣传比README版本更窄,但仍然有用。

阅读量是最明确的优势。一个能在一夜之间处理观察列表中的所有文件和标题,并返回结构化摘要的智能体,可以节省数小时的人力注意力,并且其输出可以与原始资料核对。

用通俗语言描述市场状态是第二个优势。根据人类也会阅读的相同数字生成的、关于离散度、广度和波动性的每日段落,即使不包含任何预测,也是一份有用的简报文件。

流程纪律是第三个优势。一个拒绝违反既定头寸限制的订单,或标记即将交易财报日策略的智能体,能够强制执行分心的人类可能会忽略的规则。

以上三点都不是市场中的优势。它们都是研究和运营工作,而这正是今天可衡量的收益所在。一个像低波动率异象这样有记录的效果,是在经过大样本和重复的样本外验证后才被认真对待的,而一个新的智能体框架要么达到同样的标准,要么就无法过关。错过最佳交易日展示了频繁切换对长期持有者的成本。

从业者描述的纪律

公开运行这些系统的团队倾向于描述相同的流程。在模拟成交上进行数月的远期测试,而非数天,因为纸面记录只能以实时速度累积。保留提示从未见过的样本外数据。记录每一个提示、每一个响应和每一个订单,因为一个无法重播的委员会是无法调试的。使用模型外部的固定规则来确定头寸规模。在声称任何阶段盈利之前,计算上述面板中的所有成本。

常见问题

多智能体AI交易系统真的能赚钱吗?

公开证据很少。大多数开源项目发布的是回测结果,而非经过审计的实盘记录,而语言模型策略的回测存在一个特定缺陷:模型是在描述测试期文本上训练的。未经审计的权益曲线证明的是软件,而非优势。

LLM智能体委员会比单一模型更好吗?

委员会减少了一些格式化和解析错误,并为输出增加了结构。当每个智能体基于相同的基础数据查询相同的基础模型时,它并没有增加独立信息。五个相关的意见投票大致相当于一个意见,并附带了额外的延迟和额外的令牌成本。

AI智能体交易速度能比做市商更快吗?

不能。语言模型往返需要几秒钟,而专业报价系统在微秒级别运行,使用托管硬件。任何利润依赖于速度的策略都超出了这些系统的能力范围,这使得数天和数周的持有期成为可能的应用领域。

针对LLM交易智能体,最大的回测陷阱是什么?

训练数据的前瞻性偏差。传统回测会防范未来价格泄露到决策中,但模型的权重已经编码了关于测试窗口的已发表评论。滚动窗口和样本外分割无法消除嵌入在权重中的知识,唯一干净的测试是训练截止日期之后的时期。

纸面交易阶段需要运行多久?

有用的衡量标准是样本量,而非日历长度。一个每周交易的策略每年产生大约五十个观测值,这对于任何关于优势的声明来说都是一个小样本。从业者通常希望看到足够多的交易,以经历一次回撤,而不仅仅是一段良好表现。


本页上的每个面板都是基于真实美国市场数据的存储、版本化查询。打开任意面板即可阅读其背后的SQL,或在Strasmore终端上针对相同表格运行您自己的查询。

#ai agents#llm#algorithmic trading#automation#backtesting