Strasmore Research
Deep Dives · Matt ConnorBy Matt Connor ·

マルチエージェントAIトレーディングシステムの実態

マルチエージェントAIトレーディングシステムはLLM委員会で取引を実行。アーキテクチャ、市場コスト、バックテストの落とし穴を解説します。

マルチエージェントAIトレーディングシステムは、一つの取引判断を複数の大規模言語モデルインスタンスに分割し、各インスタンスに役割を与え、その出力を統合して一つの注文を生成する。通常の構成は、ニュースリーダー、ファンダメンタルズアナリスト、チャートアナリスト、リスクチェッカー、そしてそれらを調停するマネージャーエージェントである。2026年7月時点で、この形状のオープンソースフレームワークがいくつかGitHubのアルゴリズム取引トピックに存在し、それぞれ数百のスターを獲得している。このページでは、そのアーキテクチャを解説し、公表されたエビデンスとREADMEの主張を区別し、どのバージョンでもクリアすべきコストに関する市場データを提示する。

マルチエージェントAIトレーディングシステムの実態

アーキテクチャは、議長がいる委員会である。各エージェントは、プロンプトテンプレート、データフィード、出力スキーマで構成される。ニュースエージェントは見出しを受け取りラベルを返す。ファンダメンタルズエージェントは提出書類の抜粋を受け取りスコアを返す。議長エージェントはそれらのラベルとスコアを受け取り注文を返す。

この設計から三つの特性が導かれ、パフォーマンスの主張をする前にそれぞれを明確にしておく価値がある。

ほとんどのエージェントは通常、一つのベースモデルを共有する。同じ重みに対する五つのプロンプトは相関した意見を生み出すため、五つのエージェントによる投票は五つの独立した推定ではない。委員会という枠組みは、実装が提供しない分散効果を示唆している。

このシステムは、数値的な判断をラップしたテキストパイプラインである。モデルは単語を読み取りトークンを出力する。ポジションサイジング、注文タイプ、ストップ配置、エグジットロジックはその下にある通常のコードであり、結果を左右するもののほとんどはプロンプトではなくそのコードに存在する。

委員会のラウンドトリップには数秒かかる。これは週次のリバランスには実用的だが、マーケットメーカーがマイクロ秒でクォートとリクォートを行うイントラデイの速度では無関係である。

研究が裏付けることと裏付けないこと

金融における言語モデルに関する公表された研究は、強度が大きく異なる三つの主張に分けられる。

抽出と分類は強い主張である。モデルはセンチメントをラベル付けし、提出書類から数値を抽出し、長い文書を圧縮する。その精度は、数年前には特注モデルを必要としたレベルである。これは保持されたテキストで測定可能であり、有効である。

市場状態の記述は混合した主張である。モデルは相場環境について流暢な説明を生成し、その説明は通常、モデルに示されたデータと一致する。その記述が、価格がまだ織り込んでいない情報を含むかどうかは別問題であり、注意深くテストした論文は、幅広い誤差範囲を持つ小さな効果を報告している。

収益性は弱い主張である。ほとんどのリポジトリのREADMEは、資金提供を受けた実績ではなくバックテストを報告しており、インサンプルの equity curve と実際の口座との間の距離は、定量取引において最も古くからある距離である。言語モデルをループに組み込んでも、その距離は縮まらない。

シグナルがクリアすべきコストの下限

すべての取引はスプレッドを越える。そして、その越える行為こそが、戦略が何よりも先にクリアしなければならない下限である。2026年6月22日から26日までの通常時間帯における、米国上場6銘柄の中央値クォートスプレッド:

クエリコストフロア:ミッドポイントの中央値クォートスプレッド(ベーシスポイント)、通常取引時間、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

ベーシスポイントはパーセンテージポイントの100分の1である。パネル内で最もタイトな銘柄SPYは、その週の中央値スプレッドが0.27ベーシスポイントだった。最も広いRIOT7.09だった。ラウンドトリップではスプレッドを二回支払うため、最初の銘柄でのエントリーとエグジットは0.55ベーシスポイントのハンデを背負い、最後の銘柄での同じ取引は14.19のハンデを背負う。ポートフォリオを週に二回回転させるエージェントは、その手数料を年に約100回支払うことになり、その手数料は判断の正誤に関わらず課金される。株式取引にかかるコストは、残りの請求項目を詳細に示している。

方向性の判断が打ち負かすべきノイズ

方向性の判断は、ほとんどが小さな数値で構成される分布に対して評価される。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

年間の半分は0.5%未満に収まった。under 0.25%のバンドには24.9%のセッションが含まれ、0.25 to 0.5%のバンドにはさらに24.1%が含まれた。反対側では、13のセッションが2% and up変動し、これは年間の5.2%にあたる。

これをスプレッドのパネルと比較する。1ベーシスポイントは0.01%である。典型的なセッション変動0.3%は、タイトなスプレッドの30倍、広いスプレッドの約4倍である。この計算は、忍耐強く正しい判断には余地を残すが、速くてわずかな判断にはほとんど余地を残さない。

取引可能なユニバースの実際

エージェントフレームワークはカバレッジを宣伝することが多く、毎朝数百のティッカーをスキャンすると謳う。出来高は、そのリストのうちどれだけが大口取引を吸収できるかを示す。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

10銘柄でセッション出来高の22.5%を占め、約205.04億ドルだった。次の40銘柄で20.5%を占めた。反対側では、ランク1000位以降の10966銘柄が12.9%を分け合い、テール全体に約117.83億ドルが分散していた。

幅広さは宣伝するのは安価だが、取引するのは高価である。3000銘柄をランク付けする委員会は、そのランク付け努力のほとんどをそのテールに費やすことになる。そこでは、上記のスプレッドパネルが四捨五入誤差ではなく現実のコストとなる。

これらのバックテストがシステムを過大評価する理由

バックテストを過大評価する最大の単一原因は、期間の選択である。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

202128.7%上昇して終了)のみでテストされたシステムは、上昇相場を引き継ぐ。同じシステムを2022-20%で終了)のみでテストすると、下降相場を引き継ぐ。年内の最高終値と最低終値の差は、202068%に達し、穏やかな年でも25.3%を上回った。

期間選択の問題に加えて、四つの落とし穴がある。そのうちの一つは言語モデルに固有のものである。

  • トレーニングデータによる先読み。2025年までのテキストでトレーニングされたモデルは、2023年の取引がどうなったかをすでに読んでいる。2023年のバックテストは、モデルが答えを知っている質問をしていることになり、価格系列をシャッフルしてもその知識は除去できない。
  • ティッカーリストの生存バイアス。現在の上場銘柄から構成されたユニバースは、途中で上場廃止になった銘柄を除外する。
  • 約定前提。すべての注文をミッドポイントで約定させるバックテストは、上記のコストパネル全体を消去する。
  • プロンプトバリアントの選択。20のプロンプト表現を試し、最も良かったものを報告することは、言語モデルが存在するずっと前からパラメータスイープを悩ませてきたのと同じ過学習である。

言語モデルエージェントが現実的に役立つ領域

正直なバージョンの売り込みは、READMEのバージョンよりも狭く、それでも有用である。

読書量の削減は最も明確な勝利である。一晩でウォッチリスト上のすべての提出書類と見出しを処理し、構造化されたサマリーを返すエージェントは、人間の注意時間を何時間も節約し、その出力はソースに対して検証可能である。

相場環境を平易な言葉で説明することは二つ目の利点である。分散、幅広さ、ボラティリティについて、人間が読むのと同じ数値から生成される日次のパラグラフは、たとえ予測を含まなくても、有用なブリーフィング資料となる。

プロセス衛生は三つ目の利点である。表明されたポジション制限に違反する注文を拒否したり、決算発表日に取引しようとしている戦略にフラグを立てたりするエージェントは、気の散った人間が見逃すルールを強制する。

これら三つのどれも、市場における優位性ではない。すべては調査と運用の作業であり、今日測定可能な利益はそこにある。低ボラティリティ・アノマリーのような文書化された効果は、大規模なサンプルと繰り返しのアウトオブサンプル検証を経て初めて現実のものとして扱われた。新しいエージェントフレームワークも同じ基準を満たすか、あるいはクリアしないかのどちらかである。ベストデーの欠落は、頻繁なスイッチングが長期保有者にどのようなコストをもたらすかを示している。

実務家が語る規律

これらのシステムを公に運用しているチームは、同じ一連の流れを説明する傾向がある。ペーパーレコードは現実の時間の速度でしか蓄積されないため、数日ではなく数ヶ月にわたってシミュレートされた約定でフォワードテストを行う。プロンプトが一度も見たことのないアウトオブサンプル期間を保持する。すべてのプロンプト、すべての応答、すべての注文をログに記録する。再生できない委員会はデバッグできないからである。モデルの外部にある固定ルールでポジションをサイズ設定する。収益性を主張する前に、上記のパネルからすべてのコストを計上する。

FAQ

マルチエージェントAIトレーディングシステムは実際に利益を上げるのか?

公的なエビデンスは薄い。ほとんどのオープンソースプロジェクトは、監査済みの実績ではなくバックテストを公開しており、言語モデル戦略のバックテストには特定の欠陥がある。モデルがテスト期間を説明するテキストでトレーニングされていることである。監査されていない equity curve は、優位性ではなくソフトウェアのデモンストレーションである。

LLMエージェントの委員会は単一モデルより優れているのか?

委員会は、いくつかのフォーマットエラーやパースエラーを減らし、出力に構造を追加する。しかし、すべてのエージェントが同じ基本データに対して同じベースモデルをクエリする場合、独立した情報は追加されない。五つの相関した意見は、追加のレイテンシとトークンコストを伴い、おおよそ一つの意見として投票する。

AIエージェントはマーケットメーカーより速く取引できるのか?

できない。言語モデルのラウンドトリップは数秒かかる一方、プロのクォーティングシステムはコロケーションされたハードウェア上でマイクロ秒で動作する。利益が速度に依存する戦略は、これらのシステムができることの範囲外であり、数日から数週間の期間が現実的な領域として残る。

LLM取引エージェントに固有の最大のバックテストの落とし穴は何か?

トレーニングデータの先読みである。従来のバックテストは、将来の価格が判断に漏れ込むのを防ぐが、モデルの重みにはテストウィンドウに関する公表された解説がすでにエンコードされている。ウォークフォワードウィンドウやアウトオブサンプル分割では、重みに焼き付けられた知識を除去できず、唯一のクリーンなテストはトレーニングカットオフ後の期間である。

ペーパートレーディング期間はどのくらい必要か?

有用な枠組みは、暦日数ではなくサンプルサイズである。週次で取引する戦略は、年間約50の観測値を生成する。これは、優位性に関する主張には小さなサンプルである。実務家は一般的に、好調な期間だけでなく、ドローダウンを経験するのに十分な取引数を求める。


このページのすべてのパネルは、実際の米国市場データに対する保存済みのバージョン管理されたクエリである。任意のパネルを開いて背後にあるSQLを読むか、Strasmoreターミナルで同じテーブルに対して独自のクエリを実行できる。

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