Claude CodeでNISAを分析する12エージェントシステムを作った — アーキテクチャ全公開
競馬AIを3回作り直した後、同じ設計思想を自分のNISA口座に持ち込んだ。
「複数エージェントが独立して分析し、最後に反論役が穴を突く」という構造は投資判断でも有効だと思った。3週間、実際にNISAで動かして確認した。今回はそのアーキテクチャを全部公開する。
システム概要
finance-ai — Claude Codeで動く米国株マルチエージェント分析システム。
- エージェント数: 12体
- データソース: 全て無料(yfinance / finvizfinance / tradingview_ta / WebSearch)
- 対象: 米国株(NYSE / NASDAQ)
- 言語: Python + Markdown(エージェント定義)
12体の構成
| # | エージェント | モデル | 役割 |
|---|---|---|---|
| 00 | Receptionist | Sonnet | ユーザー窓口・Use Caseルーティング |
| 01 | Data-Collector | Sonnet | yfinance/Finviz/TradingViewでデータ収集 |
| 02 | Fundamental-Analyst | Sonnet | バリュエーション・DCF・財務健全性 |
| 03 | Technical-Analyst | Sonnet | チャートパターン・RSI/MACD/移動平均 |
| 04 | Quant-Analyst | Sonnet | マルチファクタースコアリング |
| 05 | Earnings-Catalyst-Analyst | Sonnet | 決算分析・短期カタリスト |
| 06 | Macro-Sector-Analyst | Sonnet | マクロ経済・セクターローテーション |
| 07 | Devil's-Advocate | Opus + thinking | 全員への反論専任 |
| 08 | Moderator | Sonnet + thinking | 合議統合・最終判断 |
| 09 | Portfolio-Manager | Sonnet | ポジションサイジング(Quarter Kelly) |
| 10 | Orchestrator | Sonnet | パイプライン進行管理 |
| 11 | Tracker | Haiku | 実績追跡・学習ログ |
実行フロー
[00 Receptionist] ← ユーザー入力(「TSLAを分析して」)
↓
[01 Data-Collector] ← yfinance/Finviz/TradingView/WebSearchでデータ収集
↓
[02〜06 並列分析] ← 5体が独立して同時実行(互いの結論を参照しない)
↓
[07 Devil's-Advocate] ← 全5体のレポートを読んで反論を生成(Opus + thinking)
↓
[08 Moderator] ← 反論を含めた合議・統合(Sonnet + thinking)
↓
[09 Portfolio-Manager] ← Quarter Kellyでポジションサイズを算出
↓
最終レポート出力
並列フェーズ(02〜06)で重要なのはコンセンサスバイアスの防止だ。他のエージェントの結論を見てから分析すると、必ず多数派に引きずられる。だから5体は互いの出力を参照せず、それぞれのJSONを独立して生成する。
Devil's Advocateの設計
このシステムで最も重要なエージェントが07番だ。
ペルソナ設定はBridgewater Associatesのシニアポートフォリオリスクアナリスト(Ray Dalio's All Weather原則)。他のエージェントがどれだけ強気でも、このエージェントだけは強制的に反論を書く。
やっていることは3段階:
Step 1: 過信の検出
- DCF仮定が楽観的すぎないか
- テクニカルの強気シグナルが過熱感を示していないか
- クオンツスコアが過去データへの過適合になっていないか
Step 2: 見落としの指摘
- 規制変化リスク
- オフバランスシートのリスク
- 配当カットリスク
Step 3: ストレステスト
- 金利急上昇(+200bps)シナリオ
- 景気後退シナリオ
- 業績ミス・ガイダンス下方修正シナリオ
出力はJSON形式で、challenges(反論リスト)と risk_scenarios(シナリオ別影響試算)が含まれる。ModeratorとPortfolio-Managerはこれを読んだ上で最終判断を出す。
モデルはOpusを使い、thinking: mediumを有効にしている。「反論を書く」という作業は、強気材料を見つけるより認知的コストが高い。Opusの深い推論を使わないと、形だけの反論になりやすい。
Python計算層
エージェント定義(Markdown)だけでなく、Pythonで計算層を持っている。
finance-ai/src/
├── dcf_calculator.py # DCFモデル計算
├── factor_scorer.py # マルチファクタースコア算出
├── portfolio_optimizer.py # ポートフォリオ最適化
└── technical_indicators.py # テクニカル指標計算
dcf_calculator.pyはFundamental-Analystが呼び出す。DCFの計算をLLMに任せると数値が不安定になるので、Pythonで厳密に計算してJSONで返す設計にした。
factor_scorer.pyはValue/Momentum/Quality/Volatilityの4ファクターをスコアリングする。Quant-Analystはこのスコアを解釈してレポートを書く。
3つのUse Case
Use Case A: 個別銘柄分析
「TSLAを分析して」→ フルパイプライン実行。最終的に買い/見送りの判断とポジションサイズが出る。
Use Case B: ポートフォリオレビュー
sample-portfolio.json形式で保有株を入れると、リバランス提案が出る。
Use Case C: マクロ/セクター分析
「半導体セクターは今どこにいるか」→ Macro-Analyst + Quant-Analystのみ実行。市場全体の環境把握に使う。
設計上の決断
Quarter Kellyを使う理由
Portfolio-ManagerはKelly基準でポジションサイズを計算するが、フルKellyは使わない。理論上は最大化できるが、分散が大きすぎて精神的に持たない。1/4にすると極端な集中投資を防げる。競馬AIでも同じ結論に至った。
Haiku for Tracker
11番のTrackerは過去の推奨を記録するだけの役割なので、Haikuを使う。コスト構造を意識した役割分担。分析が必要な箇所にOpus/Sonnet、記録・管理はHaiku、という原則。
完全無料データ縛りの理由
最初は有料APIが必要では、と思っていた。実際に動かしてみたら、個別銘柄の買い/見送り判断に必要な情報はyfinanceとfinvizfinanceで大体揃う。足りない情報はWebSearchで補える。個人投資家のNISA判断に、機関投資家向けの Bloomberg データは不要だった。
動かすために必要なもの
- Claude Code(Anthropicのサブスクリプション)
- Python 3.10以上
-
pip install -r requirements.txt(yfinance等の依存関係)
追加費用ゼロで動く。Claude Codeのサブスクリプションに含まれる利用枠で動作する。
システム一式の配布について
このアーキテクチャ記事は無料で公開している。
エージェント定義12本・Python計算層・PLAYBOOK・サンプルデータを含む**実装一式(finance-ai-v0.1.0.zip)**はnoteで販売している。セットアップ手順書付きで、READMEの通りに進めると5分で動き始める。
3週間NISAで動かした感想と、Devil's Advocateが実際に止めた購入判断の話は記事の中に書いた。
まとめ
- 5体の並列分析 + 1体の反論専任という構造が投資判断に効く
- Devil's Advocateにはのちつよい反論を出させるためOpus + thinkingを使う
- コンセンサスバイアスを防ぐため並列フェーズは互いの結論を参照しない
- Quarter Kellyで極端な集中投資を防ぐ
- 完全無料データで十分な判断材料が揃う
Discussion