Multi-Agent AI Trading Systems: Wetin Na Real
Multi-agent AI trading systems dey run LLM committees for one trade. E dey cover architecture, market costs wey signal clear, and backtest traps involved.
A multi-agent AI trading system dey split one trading decision give several large language model instances, e give each instance one role, and e dey merge their outputs into one single order. The usual roster na news reader, fundamentals analyst, chart analyst, risk checker, and one manager agent wey dey arbitrate. As of July 2026, several open source frameworks of this shape dey sit for the algorithmic-trading topic on GitHub with few hundred stars each. This page go walk the architecture, separate the published evidence from the README claims, and put market data on the costs any version of am go need to clear.
Wetin a multi-agent AI trading system really be
The architecture na one committee with one chairman. Each agent na one prompt template, one data feed, and one output schema. The news agent dey receive headlines and e dey return one label. The fundamentals agent dey receive filing extracts and e dey return one score. The chairman agent dey receive those labels and scores and e dey return one order.
Three properties dey follow from that design, and each one worth to name am before any performance claim.
Every agent usually dey share one base model. Five prompts against the same weights go produce correlated opinions, so a five-agent vote no be five independent estimates. The committee framing dey suggest diversification wey the implementation no dey provide.
The system na one text pipeline wey dey wrap around one numeric decision. The model dey read words and e dey emit one token. Position sizing, order type, stop placement, and exit logic na ordinary code wey dey sit underneath, and most of wetin dey determine the outcome dey live inside that code more than inside the prompts.
One committee round trip dey take seconds. That one dey work for weekly rebalance, but e dey irrelevant for intraday speed, where market makers dey quote and requote for microseconds.
Wetin the research dey support and wetin e no dey support
Published work on language models for finance dey split into three claims of very different strength.
Extraction and classification na the strong claim. Models fit label sentiment, pull figures out of filings, and compress long documents with accuracy wey need one bespoke model few years ago. E dey measurable on held-out text and e dey hold up.
Description of market state na the mixed claim. Models fit write fluent accounts of one regime, and those accounts usually dey consistent with the data wey the model see. Whether the description dey carry information wey the price no don carry already na separate question, and the papers wey dey test am carefully dey report small effects with wide error bars.
Profitability na the weak claim. Most repository READMEs dey report one backtest instead of one funded track record, and the distance between one in-sample equity curve and one live account na the oldest distance for quantitative trading. Putting one language model for the loop no dey shorten am.
The cost floor wey one signal need to clear
Every trade dey cross one spread, and that crossing na the floor wey one strategy need to clear before anything else. Median quoted spread over regular hours, June 22 to June 26, 2026, for six US-listed names:
The exact SQL behind every number
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_bpsOne basis point na one hundredth of one percentage point. The tightest name for the panel, SPY, quote median spread of 0.27 basis points for that week. The widest, RIOT, quote 7.09. One round trip dey pay the spread twice, so one entry and exit for the first name go start 0.55 basis points behind and the same pair for the last name go start 14.19 behind. One agent wey dey turn its book over twice a week go pay that toll like hundred times a year, and the toll dey charged whether the call correct or wrong. Wetin e cost to trade one stock dey itemize the rest of the bill.
The noise wey one directional call need to beat
Direction calls dey graded against one distribution wey mostly na small numbers. Every SPY session for calendar 2025, sorted by the size of its close-to-close move:
The exact SQL behind every number
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))Half of the year sit inside half of one percent. The under 0.25% band hold 24.9% of sessions and the 0.25 to 0.5% band hold another 24.1%. For the other end, 13 sessions move 2% and up, that na 5.2% of the year.
Hold that beside the spread panel. One basis point na 0.01%. One typical session move of 0.3% na thirty times one tight spread and roughly four times the wide one. The arithmetic dey leave room for one patient, correct call and very little for one fast, marginal one.
Where the tradable universe really dey sit
Agent frameworks dey advertise coverage, often hundreds of tickers dey scan every morning. Dollar volume dey show how much of that list fit absorb size. Every US-listed name wey trade during regular hours on June 30, 2026, grouped by its rank for that session's dollar volume:
The exact SQL behind every number
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)Ten names carry 22.5% of the session's dollar volume, about $205.04 billion. The next 40 carry 20.5%. For the other end, 10966 names wey rank beyond 1000 share 12.9% between them, roughly $117.83 billion spread across the whole tail.
Breadth cheap to advertise but expensive to trade. One committee wey dey rank three thousand names go spend most of its ranking effort for that tail, where the spread panel above na real cost instead of one rounding error.
Why these backtests dey flatter the system
The largest single source of one flattering backtest na the choice of window. SPY by calendar year, 2016 through 2025, with the gap between the year's highest and lowest closing price:
The exact SQL behind every number
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 yearOne system wey dem test only for 2021, one year wey close 28.7% higher, go inherit rising tape. The same system wey dem test only for 2022, wey close -20%, go inherit falling tape. The within-year gap between the highest and lowest close reach 68% for 2020 and e stay above 25.3% even for the calmer years.
Four traps dey sit on top of the window problem, and one of them belong to language models alone.
- Lookahead through training data. One model wey dem train on text through 2025 don read how one 2023 trade turn out. One backtest over 2023 dey ask question wey the model know answer to, and no shuffling of the price series fit remove that knowledge.
- Survivorship inside the ticker list. One universe wey dem assemble from today's listings dey omit the names wey delist along the way.
- Fill assumptions. One backtest wey dey fill every order for the middle point dey erase the whole cost panel above.
- Selection over prompt variants. Twenty prompt phrasings wey dem try and the best one wey dem report na the same overfitting wey dey plague parameter sweeps long before language models exist.
Where language model agents fit plausibly help
The honest version of the pitch narrower than the README version and e still dey useful.
Reading volume na the clearest win. One agent wey dey work through every filing and headline for one watchlist overnight and e dey return structured summary save hours of human attention, and the output dey checkable against the source.
Describing one regime for plain language na the second. One daily paragraph on dispersion, breadth, and volatility, generated from the same numbers one human go read, na useful briefing document even when e no dey carry forecast.
Process hygiene na the third. One agent wey dey refuse one order wey breach stated position limit, or wey dey flag one strategy wey about to trade one earnings date, dey enforce rules wey one distracted human go skip.
None of those three na one edge for the market. All of them na research and operations work, and that na where the measurable gains dey sit today. One documented effect like the low volatility anomaly need large samples and repeated out-of-sample replication before anybody treat am as real, and one new agent framework need meet the same bar or e no dey clear am. Missing the best days dey show wetin frequent switching cost one long-horizon holder.
The discipline practitioners dey describe
Teams wey dey run these systems for public tend to dey describe the same sequence. Forward test on simulated fills for months instead of days, since one paper record dey accumulate only at the speed of real time. Keep one out-of-sample stretch wey the prompts never see. Log every prompt, every response, and every order, since one committee wey no fit replay no fit debug. Size positions with fixed rules wey dey sit outside the model. Count every cost from the panels above before you call any stretch profitable.
FAQ
Multi-agent AI trading systems dey really make money?
The public evidence thin. Most open source projects dey publish one backtest instead of one audited live record, and backtests of language model strategies carry one specific flaw: the model dey train on text wey describe the test period. One unaudited equity curve dey demonstrate the software, not one edge.
One committee of LLM agents better than one single model?
One committee dey reduce some formatting and parsing errors and e dey add structure to the output. E no dey add independent information when every agent dey query the same base model over the same underlying data. Five correlated opinions dey vote as roughly one opinion, with extra latency and extra token cost attached.
One AI agent fit trade faster than one market maker?
No. One language model round trip dey run for seconds while professional quoting systems dey operate for microseconds over co-located hardware. Any strategy wey profit dey depend on speed dey sit outside wetin these systems fit do, and that leave horizons of days and weeks as the plausible ground.
Wetin na the biggest backtest trap wey dey specific to LLM trading agents?
Training-data lookahead. Conventional backtests dey guard against future prices leaking into one decision, but one model's weights already encode published commentary about the test window. Walk-forward windows and out-of-sample splits no dey remove knowledge wey bake inside the weights, and the only clean test na one period after the training cutoff.
How long one paper-trading period need to run?
The useful framing na sample size instead of calendar length. One strategy wey dey trade weekly dey produce about fifty observations a year, one small sample for any claim about one edge. Practitioners generally want enough trades to don see one drawdown, not only one good stretch.
Every panel for this page na one stored, versioned query over real US market data. Open any panel to read the SQL behind am, or run your own against the same tables for the Strasmore terminal.