DEV Community

Cover image for TradingAgentsをリアルな取引APIワークフローに変える方法
Akira
Akira

Posted on • Originally published at apidog.com

TradingAgentsをリアルな取引APIワークフローに変える方法

要点 / 簡易回答

TradingAgentsの最も実用的な活用方法は、Pythonパッケージとしてセットアップし、FastAPIで小規模なAPIサービスとしてラップし、それをApidogでテスト・共有することです。これにより、分析のトリガー、結果のポーリング、リクエスト契約の自動ドキュメント化、ワークフローの再現性・チーム展開が実現できます。

今すぐApidogを試そう

はじめに

TradingAgentsは、外部から見ると高度な機能や研究論文が目立つ魅力的なプロジェクトです。GitHubリポジトリには、マルチエージェント取引ワークフローの実装、CLIツール、複数プロバイダーのサポートが用意されています。しかし、実際のエンジニアリングワークフローで利用するには、いくつかの課題があります。

ほとんどの開発チームは「ローカル限定」のツールを求めていません。分析をAPIでトリガーし、パラメータを渡し、ジョブIDで結果を取得し、さらにそのフローをフロントエンドやQA、他チームにも引き渡せる再現可能な形が必要です。実資金に関わるシステムの場合、ドキュメント化されたAPIとしてラップすることが不可欠です。

💡 Apidogはこのワークフローに最適です。 FastAPIのOpenAPIスキーマをインポートし、環境ごとの設定、応答変数の抽出、ポーリングシナリオ化、チーム向けドキュメント公開が容易。無料でダウンロードして、一緒に試してみましょう。

TradingAgentsとは何か、そうでないもの

実装を始める前に、ツールの定義を確認しましょう。

TradingAgentsはオープンソースのマルチエージェント取引フレームワークです。取引会社の役割(アナリスト、トレーダー、リスク管理、ポートフォリオマネージャー等)をシミュレートできます。

  • ファンダメンタルズ、センチメント、ニュース、テクニカルシグナル分析
  • 強気/弱気研究者
  • トレーダー
  • リスク管理
  • ポートフォリオマネージャー

LangGraph上に構築されており、OpenAI/Google/Anthropic/xAI/OpenRouter/Ollama等のモデルプロバイダーをサポート。デフォルト設定例:

llm_provider = "openai"
deep_think_llm = "gpt-5.2"
quick_think_llm = "gpt-5-mini"
backend_url = "https://api.openai.com/v1"
max_debate_rounds = 1
Enter fullscreen mode Exit fullscreen mode

ポイント: TradingAgentsは「設定可能なPythonフレームワーク」であり、SaaS型APIではありません。また、研究目的であり金融アドバイスではない点をドキュメントやUXに明示してください。

ステップ1:TradingAgentsをインストールする

まずはリポジトリをセットアップします。

git clone https://github.com/TauricResearch/TradingAgents.git
cd TradingAgents
conda create -n tradingagents python=3.13
conda activate tradingagents
pip install .
Enter fullscreen mode Exit fullscreen mode

APIラッパーも構築する場合はFastAPIとUvicornも追加:

pip install fastapi uvicorn
Enter fullscreen mode Exit fullscreen mode

.env.exampleを参考にAPIキーを設定:

OPENAI_API_KEY=
GOOGLE_API_KEY=
ANTHROPIC_API_KEY=
XAI_API_KEY=
OPENROUTER_API_KEY=
Enter fullscreen mode Exit fullscreen mode

実用ルール:

  1. 認証情報は環境変数やシークレットマネージャーに保存
  2. シークレットをAPIリクエストボディ経由で渡さない

これでセキュアな構成になります。

ステップ2:PythonでTradingAgentsを実行確認

APIラッパーを作る前に、ローカルでTradingAgentsが動くことを確認します。

最小動作例:

from tradingagents.graph.trading_graph import TradingAgentsGraph
from tradingagents.default_config import DEFAULT_CONFIG

ta = TradingAgentsGraph(debug=True, config=DEFAULT_CONFIG.copy())
_, decision = ta.propagate("NVDA", "2026-01-15")
print(decision)
Enter fullscreen mode Exit fullscreen mode

設定変更例(API化時にパラメータ化しやすい項目):

config = DEFAULT_CONFIG.copy()
config["llm_provider"] = "openai"
config["deep_think_llm"] = "gpt-5.2"
config["quick_think_llm"] = "gpt-5-mini"
config["max_debate_rounds"] = 2

ta = TradingAgentsGraph(debug=True, config=config)
_, decision = ta.propagate("NVDA", "2026-01-15")
print(decision)
Enter fullscreen mode Exit fullscreen mode

この段階を省略してHTTP化へ進むと、デバッグが難しくなります。

ステップ3:TradingAgentsの利用方法を選択

利用シーンに応じて3パターンあります。

オプション1:CLIのみ

  • CLIでティッカー等を指定し対話的に分析
  • 学習や個人検証向け

オプション2:Pythonのみ

  • Pythonから直接TradingAgentsGraphを呼び出し
  • ノートブックやローカル自動化向け
  • 1人開発で完結する用途向け

オプション3:APIラッパー+Apidog

  • FastAPIでAPI化し、Apidogでテスト・ドキュメント管理
  • フロントエンド/QA/チーム利用向け
  • 長時間の非同期ワークフローやポーリングにも対応

多チーム・再現性重視ならこの構成がベストです。

ステップ4:TradingAgentsをFastAPIサービスでラップ

ジョブベースAPI推奨: 分析には時間がかかるため、非同期ジョブスタイルが便利です。

POST /analyses        -> analysis_idを返す
GET  /analyses/{id}   -> ステータス・結果を返す
Enter fullscreen mode Exit fullscreen mode

API契約の例

エンドポイント 目的
GET /health ヘルスチェック
POST /analyses 分析ジョブを作成
GET /analyses/{analysis_id} ジョブの状態・結果を取得

FastAPIラッパー実装例

from concurrent.futures import ThreadPoolExecutor
from datetime import date, datetime
from uuid import uuid4

from fastapi import FastAPI, HTTPException
from pydantic import BaseModel, Field

from tradingagents.default_config import DEFAULT_CONFIG
from tradingagents.graph.trading_graph import TradingAgentsGraph

app = FastAPI(title="TradingAgents API", version="0.1.0")
executor = ThreadPoolExecutor(max_workers=2)
jobs: dict[str, dict] = {}

class AnalysisRequest(BaseModel):
    ticker: str = Field(..., min_length=1, examples=["NVDA"])
    analysis_date: date
    llm_provider: str = Field(default="openai")
    deep_think_llm: str = Field(default="gpt-5.2")
    quick_think_llm: str = Field(default="gpt-5-mini")
    research_depth: int = Field(default=1, ge=1, le=5)

def run_analysis(job_id: str, payload: AnalysisRequest) -> None:
    jobs[job_id]["status"] = "running"
    jobs[job_id]["started_at"] = datetime.utcnow().isoformat()

    config = DEFAULT_CONFIG.copy()
    config["llm_provider"] = payload.llm_provider
    config["deep_think_llm"] = payload.deep_think_llm
    config["quick_think_llm"] = payload.quick_think_llm
    config["max_debate_rounds"] = payload.research_depth
    config["max_risk_discuss_rounds"] = payload.research_depth

    try:
        graph = TradingAgentsGraph(debug=False, config=config)
        _, decision = graph.propagate(
            payload.ticker,
            payload.analysis_date.isoformat(),
        )
        jobs[job_id].update(
            {
                "status": "completed",
                "finished_at": datetime.utcnow().isoformat(),
                "result": decision,
            }
        )
    except Exception as exc:
        jobs[job_id].update(
            {
                "status": "failed",
                "finished_at": datetime.utcnow().isoformat(),
                "error": str(exc),
            }
        )

@app.get("/health")
def health() -> dict:
    return {"status": "ok"}

@app.post("/analyses", status_code=202)
def create_analysis(payload: AnalysisRequest) -> dict:
    analysis_id = str(uuid4())
    jobs[analysis_id] = {
        "status": "queued",
        "ticker": payload.ticker,
        "analysis_date": payload.analysis_date.isoformat(),
        "created_at": datetime.utcnow().isoformat(),
    }
    executor.submit(run_analysis, analysis_id, payload)
    return {"analysis_id": analysis_id, "status": "queued"}

@app.get("/analyses/{analysis_id}")
def get_analysis(analysis_id: str) -> dict:
    job = jobs.get(analysis_id)
    if not job:
        raise HTTPException(status_code=404, detail="Analysis not found")
    return job
Enter fullscreen mode Exit fullscreen mode

起動:

uvicorn app:app --reload
Enter fullscreen mode Exit fullscreen mode

http://localhost:8000/docs(Swagger UI)

http://localhost:8000/openapi.json(OpenAPIスキーマ。Apidogで直接インポート可)

ステップ5:API経由でTradingAgentsを利用

分析をトリガー

POST /analyses
{
  "ticker": "NVDA",
  "analysis_date": "2026-03-26",
  "llm_provider": "openai",
  "deep_think_llm": "gpt-5.2",
  "quick_think_llm": "gpt-5-mini",
  "research_depth": 2
}
Enter fullscreen mode Exit fullscreen mode

レスポンス例

{
  "analysis_id": "88f9f0f5-7315-4c73-8ed5-d0a71f613d31",
  "status": "queued"
}
Enter fullscreen mode Exit fullscreen mode

結果をポーリング

GET /analyses/{analysis_id}
{
  "status": "running",
  "ticker": "NVDA",
  "analysis_date": "2026-03-26",
  "created_at": "2026-03-26T06:00:00.000000",
  "started_at": "2026-03-26T06:00:01.000000"
}
Enter fullscreen mode Exit fullscreen mode

完了時:

{
  "status": "completed",
  "ticker": "NVDA",
  "analysis_date": "2026-03-26",
  "result": {
    "decision": "hold"
  }
}
Enter fullscreen mode Exit fullscreen mode

エラー時:

"status": "failed" とエラーメッセージを明示的に返しましょう。

ステップ6:APIをApidogにインポート

ApidogでOpenAPIスキーマ(http://localhost:8000/openapi.json)をインポートしましょう。

  • リクエスト・レスポンス構造が自動生成
  • ドキュメントと実装が常に一致
  • パラメータやボディの整合性担保
  • チームでコレクションを再構築不要

cURLや単機能APIクライアントよりも強力な管理が可能です。

ステップ7:Apidog環境を作成

APIインポート後、環境変数を設定。

base_url = http://localhost:8000
analysis_id =
Enter fullscreen mode Exit fullscreen mode

認証が必要な場合:

internal_api_key = your-local-dev-key
Enter fullscreen mode Exit fullscreen mode

利点:

  • 環境(ローカル/ステージング/本番)の切り替えが容易
  • リクエストの再利用性向上
  • URLやヘッダーの手動編集が不要

TradingAgentsのロジックはフレームワーク側、共有ワークフロー管理はApidog側で分担。

ステップ8:Apidogでワークフローをテスト

実際のクライアントと同様のフローをApidogで自動テスト可能です。

リクエスト1:分析作成

  • メソッド: POST
  • URL: {{base_url}}/analyses
  • ボディ:
{
  "ticker": "NVDA",
  "analysis_date": "2026-03-26",
  "llm_provider": "openai",
  "deep_think_llm": "gpt-5.2",
  "quick_think_llm": "gpt-5-mini",
  "research_depth": 2
}
Enter fullscreen mode Exit fullscreen mode

テストスクリプト例

pm.test("Status is 202", function () {
  pm.response.to.have.status(202);
});

const data = pm.response.json();
pm.expect(data.analysis_id).to.exist;
pm.environment.set("analysis_id", data.analysis_id);
Enter fullscreen mode Exit fullscreen mode

リクエスト2:分析ポーリング

  • メソッド: GET
  • URL: {{base_url}}/analyses/{{analysis_id}}

アサーション

pm.test("Analysis has a valid status", function () {
  const data = pm.response.json();
  pm.expect(["queued", "running", "completed", "failed"]).to.include(data.status);
});
Enter fullscreen mode Exit fullscreen mode

完了時の検証

pm.test("Completed jobs include a result", function () {
  const data = pm.response.json();
  if (data.status === "completed") {
    pm.expect(data.result).to.exist;
  }
});
Enter fullscreen mode Exit fullscreen mode

両リクエストをシナリオ連結

  1. POST /analysesを実行
  2. analysis_id保存
  3. 数秒待機
  4. GET /analyses/{{analysis_id}}を繰り返し実行

Apidogのシナリオ機能で、エンドツーエンドのワークフロー検証が容易です。

ステップ9:内部ドキュメントを公開

テスト後は、Apidogでチーム向けドキュメントを即座に公開できます。記載推奨項目:

  • 利用可能なプロバイダー
  • research_depthの意味
  • ステータス値の定義
  • 平均実行時間
  • リトライ可能なエラー条件
  • 研究目的の免責事項

「契約が1人の頭の中だけ」にならないようにしましょう。

Apidogは、TradingAgentsを環境・アサーション・チーム再利用シナリオ付きのAPIワークフローに変換できます。

今すぐApidogを試そう

この方法でTradingAgentsを使う際のよくある間違い

フレームワークをホスト型APIのように扱う

TradingAgentsはSaaS APIではなくPythonフレームワーク。自分たちのAPI契約を構築する必要があります。

リクエストボディ経由でシークレットを渡す

APIキーなどの機密は環境管理に限定。リクエストやドキュメント、画面共有で漏洩しないよう注意。

長い同期応答を1リクエストで返す

分析は非同期ジョブ化し、結果はポーリングAPIで取得する設計にする。

構成オプションを初日から全て公開する

API契約は小さく安定させ、必要に応じて拡張。内部設定をむやみに外部公開しない。

結果をインメモリのみに保持

チュートリアルでは辞書で十分ですが、本番はRedisやPostgresなど永続ストレージ必須。

研究免責事項を省略する

ラップしたAPIでも「研究目的限定、金融アドバイスでない」旨を明示してください。

結論

TradingAgentsを最大限に実用化する方法は、目的と規模によって変わります。個人検証ならCLIやPythonパッケージで十分ですが、チーム開発やQAが絡む場合はAPIラッパー+Apidogの導入が鍵です。

GitHubから最速のチームワークフロー化手順:

  1. TradingAgentsをインストール
  2. TradingAgentsGraphのローカル動作確認
  3. POST /analysesGET /analyses/{id}を持つFastAPIラッパー作成
  4. OpenAPIスキーマをApidogにインポート
  5. エンドツーエンドシナリオを構築

この流れなら、ターミナルコマンドや属人的な口頭伝承から脱却できます。

今すぐApidogを試そう

よくある質問

TradingAgentsを初めて使うには?

リポジトリをインストールし、モデルプロバイダーの環境変数を設定、PythonサンプルでTradingAgentsGraphの動作を確認。その後、CLIのみで良いかAPI化するか判断。

TradingAgentsに公式REST APIはある?

2026年3月26日時点の公開資料では公式REST APIはありません。CLIとPythonパッケージのみ。多くのチームはFastAPI等でAPIラッパーを追加します。

フロントエンドアプリでTradingAgentsを活用する最も簡単な方法は?

Pythonコードを直接フロントエンドから呼ばず、analysis_idを返すバックエンドAPIを用意し、フロントエンドはポーリングで結果取得を。

TradingAgentsでApidogを使う理由は?

OpenAPIスキーマを直接インポートし、環境やリクエスト例、アサーション、ワークフローをチームで共有可能。Pythonリバースエンジニアリングが不要。

APIで公開する価値のあるTradingAgentsの設定は?

ティッカー、分析日付、プロバイダー、モデル選択、調査深度が安全な初期公開項目です。必要に応じて拡張可能。

ジョブ状態をメモリに保持できる?

学習やプロトタイピング用途のみ。本番環境ではRedisやPostgres等で永続化を。

TradingAgentsは実際の金融意思決定に適している?

公開プロジェクト資料では「研究フレームワーク」であり、金融アドバイス/投資アドバイスではありません。独自の制御・検証・ガバナンスを加えない限り、研究・実験用途限定としてください。

Top comments (0)