マルチエージェントLLM取引フレームワーク(TradingAgents)の解説と実装

自然言語処理自動売買強化学習リスク管理バックテスト

戦略概要

TradingAgentsは、実際のトレーディングファームの組織構造を模倣したマルチエージェントLLMフレームワークです。GPT-4oシリーズなどのLLMを基盤に、7つの専門エージェントが連携して取引判断を行います。

この戦略がLLMで実現可能になった理由

従来手法課題LLMによる解決
ルールベース市場変化への適応が困難自然言語で柔軟にルール変更可能
単一モデル予測多角的分析が困難複数エージェントが異なる視点で分析
人間のトレーダーチームコスト高、判断のばらつき一貫した基準で24時間稼働
シグナル統合重み付けが固定的議論メカニズムで動的に重み調整

TradingAgentsのアーキテクチャ

7エージェント構成

TradingAgentsは5つのコンポーネント(分析チーム、研究チーム、トレーダー、リスク管理チーム、ファンドマネージャー)から成り、7つの主要エージェント役割で構成されます。

エージェント役割入力データ
Fundamental Analyst財務諸表・収益・インサイダー取引を分析し内在価値を評価決算データ、SEC Filing
Sentiment Analystソーシャルメディアやセンチメントスコアを処理X/Twitter、Reddit、ニュースセンチメント
News Analystニュースやマクロ経済指標を分析し市場シフトを検知ニュースフィード、経済指標
Technical AnalystMACD、RSI等のテクニカル指標を計算OHLCV価格データ
Bullish Researcher投資機会を強調する肯定的視点を提供各アナリストのレポート
Bearish Researcherリスクを強調する否定的視点を提供各アナリストのレポート
Trader分析と研究を統合し取引決定を実行全レポート + 議論結果
Risk Managerポートフォリオリスクを監視(ボラティリティ、流動性)ポジション情報、市場データ

ワークフロー

[データ収集] → [4アナリストが並列分析] → [研究チームが議論]
[ファンドマネージャー承認] ← [リスク管理チーム議論] ← [トレーダー判断]

各エージェントはReActプロンプティングを採用し、共有環境状態で効率的に連携します。

エージェント間の議論メカニズム

TradingAgentsの特徴的な機能は、構造化されたエージェント間議論です。

議論プロトコル

  1. 構造化レポート: 各アナリストがレポート・文書・図表を出力
  2. 研究チーム議論: Bullish/Bearish Researcherがnラウンドの議論を実施
  3. ファシリテーター統合: 優勢な視点を採用し、バランスの取れた結論を導出
  4. リスク視点議論: 3つの視点(risky/neutral/safe)でnラウンド議論
  5. 最終レビュー: ファンドマネージャーが承認
# 議論メカニズムの概念的な実装
class ResearchDebate:
    def __init__(self, n_rounds: int = 3):
        self.n_rounds = n_rounds
        self.bullish_agent = BullishResearcher()
        self.bearish_agent = BearishResearcher()
        self.facilitator = Facilitator()

    def run_debate(self, analyst_reports: dict) -> str:
        """研究チームの議論を実行"""
        debate_history = []

        for round_idx in range(self.n_rounds):
            # Bullish視点
            bullish_arg = self.bullish_agent.argue(
                reports=analyst_reports,
                history=debate_history
            )
            debate_history.append(("bullish", bullish_arg))

            # Bearish視点
            bearish_arg = self.bearish_agent.argue(
                reports=analyst_reports,
                history=debate_history
            )
            debate_history.append(("bearish", bearish_arg))

        # ファシリテーターが統合
        conclusion = self.facilitator.summarize(debate_history)
        return conclusion

この議論メカニズムにより、バックテストでは最大ドローダウン(MDD)を1.69%に抑制することに成功しています。

リスク管理エージェントによるガードレール設計

評価項目

リスク種別評価指標緩和策
市場ボラティリティVIX、ヒストリカルボラティリティポジションサイズ調整
流動性リスク出来高、ビッドアスクスプレッド流動性の低い銘柄を除外
カウンターパーティリスク取引所信頼性スコア分散取引
集中リスクポートフォリオウェイト分散投資の強制

3つのリスク視点

リスク管理チームは3つの視点で議論を行います:

  • Risky: 高報酬志向、積極的なポジション
  • Neutral: リスク・リターンのバランス重視
  • Safe: 保守的、資本保全優先
class RiskManager:
    def evaluate_trade(self, trade_proposal: dict) -> dict:
        """取引提案のリスク評価"""
        risk_assessment = {
            "volatility_risk": self._assess_volatility(trade_proposal),
            "liquidity_risk": self._assess_liquidity(trade_proposal),
            "concentration_risk": self._assess_concentration(trade_proposal),
            "overall_risk_score": 0.0,
            "recommendation": ""
        }

        # 総合リスクスコア計算
        risk_assessment["overall_risk_score"] = (
            risk_assessment["volatility_risk"] * 0.4 +
            risk_assessment["liquidity_risk"] * 0.3 +
            risk_assessment["concentration_risk"] * 0.3
        )

        # 推奨判定
        if risk_assessment["overall_risk_score"] > 0.7:
            risk_assessment["recommendation"] = "REJECT"
        elif risk_assessment["overall_risk_score"] > 0.4:
            risk_assessment["recommendation"] = "REDUCE_SIZE"
        else:
            risk_assessment["recommendation"] = "APPROVE"

        return risk_assessment

GPUなしでの動作要件とAPIコスト試算

動作要件

TradingAgentsはGPUなしで動作可能です。すべての推論はLLM API経由で実行されます。

要件推奨スペック
CPU4コア以上
メモリ8GB以上
ストレージ10GB以上(ログ保存用)
ネットワーク安定したインターネット接続
Python3.10以上

APIコスト試算

1取引判断あたり11 LLMコール + 20ツールコールが必要です。

モデル用途コスト/1Kトークン1取引あたり推定コスト
GPT-4o-mini軽量タスク(データ収集)$0.00015$0.15
GPT-4o分析・議論$0.005$0.30
o1-preview深層推論$0.015$0.50
合計$0.50-1.00

月間コスト試算:

  • 100取引/月: $50-100
  • 500取引/月: $250-500
  • 高頻度(1000取引/月): $500-1,000

日本株市場への適用方法

kabuステーションAPI連携

日本株市場への適用には、kabuステーションAPI(au カブコム証券)との連携が有効です。

import requests
from typing import Optional

class KabuStationClient:
    """kabuステーションAPI クライアント"""

    BASE_URL = "http://localhost:18080/kabusapi"

    def __init__(self, api_password: str):
        self.api_password = api_password
        self.token: Optional[str] = None

    def authenticate(self) -> str:
        """APIトークン取得"""
        response = requests.post(
            f"{self.BASE_URL}/token",
            json={"APIPassword": self.api_password}
        )
        self.token = response.json()["Token"]
        return self.token

    def get_board(self, symbol: str, exchange: int = 1) -> dict:
        """板情報取得(exchange: 1=東証)"""
        headers = {"X-API-KEY": self.token}
        response = requests.get(
            f"{self.BASE_URL}/board/{symbol}@{exchange}",
            headers=headers
        )
        return response.json()

    def send_order(
        self,
        symbol: str,
        side: str,  # "1"=売, "2"=買
        qty: int,
        price: float = 0,  # 0=成行
        order_type: int = 1  # 1=成行, 2=指値
    ) -> dict:
        """注文発注"""
        headers = {"X-API-KEY": self.token}
        order_data = {
            "Symbol": symbol,
            "Exchange": 1,  # 東証
            "Side": side,
            "CashMargin": 1,  # 現物
            "DelivType": 2,  # お預り金
            "FrontOrderType": order_type,
            "Qty": qty,
            "Price": price if order_type == 2 else 0
        }
        response = requests.post(
            f"{self.BASE_URL}/sendorder",
            headers=headers,
            json=order_data
        )
        return response.json()

TradingAgentsとの統合

class JapanStockTradingAgent:
    """日本株市場向けTradingAgents統合"""

    def __init__(self, kabu_client: KabuStationClient):
        self.kabu = kabu_client
        self.fundamental_analyst = FundamentalAnalyst()
        self.sentiment_analyst = SentimentAnalyst()
        self.risk_manager = RiskManager()

    async def analyze_and_trade(self, symbol: str) -> dict:
        """分析から取引実行まで"""
        # 1. データ収集
        board_data = self.kabu.get_board(symbol)

        # 2. 各アナリストが分析
        fundamental_report = await self.fundamental_analyst.analyze(
            symbol=symbol,
            data_source="edinet"  # EDINET(有価証券報告書)
        )
        sentiment_report = await self.sentiment_analyst.analyze(
            symbol=symbol,
            sources=["twitter_jp", "kabutan", "minkabu"]
        )

        # 3. リスク評価
        trade_proposal = self._generate_proposal(
            fundamental_report, sentiment_report
        )
        risk_assessment = self.risk_manager.evaluate_trade(trade_proposal)

        # 4. 取引実行(承認された場合)
        if risk_assessment["recommendation"] == "APPROVE":
            order_result = self.kabu.send_order(
                symbol=symbol,
                side=trade_proposal["side"],
                qty=trade_proposal["qty"]
            )
            return {"status": "executed", "order": order_result}

        return {"status": "rejected", "reason": risk_assessment}

バックテスト結果

2024年1-3月のパフォーマンス

TradingAgentsの論文では、2024年1-3月のテック株(AAPL、GOOGL、MSFT、NVDA等)でバックテストを実施しています。

指標TradingAgentsBuy & Hold差分
累積リターン (CR)23-26%17-20%+6-24%
年率リターン (ARR)25-30%20-25%+5-10%
シャープレシオ (SR)5.6-8.22-3+3-5
最大ドローダウン (MDD)0.9-2.1%5-10%-4-8%

結果の解釈

  • 高いシャープレシオ: 議論メカニズムによるリスク調整リターンの向上
  • 低いMDD: リスク管理エージェントによるガードレールの効果
  • 説明可能性: 自然言語ログで投資判断の根拠を確認可能

注意点

  • バックテスト期間が短期間(3ヶ月)のため、実市場でのパフォーマンスは異なる可能性あり
  • テック株中心のため、他セクターへの一般化には追加検証が必要
  • APIコストは含まれていない

オープンソース代替: FinGPT

FinGPTはAI4Finance Foundationが開発する金融特化オープンソースLLMです。

項目TradingAgentsFinGPT
ライセンス論文公開MIT License
金融特化度高(取引シミュレーション)高(金融データ民主化)
月間コスト$50-100(API)無料-$20(オープンソース)
GitHubスター5,000+10,000+
マルチエージェントネイティブ対応拡張が必要

FinGPTの活用

# FinGPTのインストール
git clone https://github.com/AI4Finance-Foundation/FinGPT.git
cd FinGPT
pip install -r requirements.txt

# センチメント分析の実行
python fingpt/sentiment/run_sentiment.py --model fingpt-sentiment

リスク要因

リスク発生確率影響度緩和策
LLMハルシネーション5-10%複数エージェントによるクロスチェック
API障害1-2%/日フォールバックモデル設定
市場急変時の不安定性議論ラウンド数の増加
規制リスク(日本)金融商品取引法の遵守確認
APIコスト急増月間上限設定

まとめ

TradingAgentsは、マルチエージェントLLMフレームワークとして以下の特徴を持ちます:

  1. 7エージェント構成: 実際のトレーディングファームを模倣した専門分業
  2. 議論メカニズム: Bullish/Bearishの対立的視点による多角的分析
  3. ガードレール設計: リスク管理エージェントによる損失抑制
  4. GPUなし動作: API経由で月$50-100のコストで運用可能
  5. 日本株対応: kabuステーションAPI連携で東証銘柄の自動取引が可能

バックテストでは高いシャープレシオと低いドローダウンを達成していますが、短期間のデータに基づく結果であり、実運用前には十分なペーパートレーディングと追加検証を推奨します。

参考文献


免責事項: 本記事は情報提供を目的としており、投資助言ではありません。実際の投資判断は自己責任で行ってください。バックテスト結果は過去のデータに基づくものであり、将来のパフォーマンスを保証するものではありません。