プログラミング
Walsh: 取引を拒否できるリスクマネージャーを備えたマルチエージェントリサーチパイプライン
Walsh: Multi-agent research pipeline with risk manager that can veto trades (github.com)
要約
Walshは、ファンダメンタル、テクニカル、センチメント、マクロの4つの専門エージェントが並列で各ティッカーを処理し、それらの分析をポートフォリオマネージャーが集約した後、最終的な決定をルールベースのリスクマネージャーが承認または拒否する、マルチエージェント型の株式リサーチシステムです。2023年のバックテストでは、市場平均をわずかに下回る結果となりましたが、これはリスクゲートが市場の不確実性を検知し、ポジションを解消したためであり、トレンド相場での保守的な閾値設定のコストを示唆しています。
全文翻訳
Walsh
Walshは、ファンダメンタル、テクニカル、センチメント、マクロの4つの専門エージェントが並列で各ティッカーを処理し、それらの分析を信頼度で重み付けされたポートフォリオマネージャーが集約した後、最終的な決定をルールベースのリスクマネージャーが取引実行前に拒否またはダウングレードする、マルチエージェント型の株式リサーチシステムです。
ライブデモ: walsh-demo.vercel.app
デモGIF
結果
バックテスト実行: AAPL · MSFT · NVDA、2023年1月~12月、初期資本10万ドル、ルールベースのシグナルエージェント、厳格なルックアヘッドなし。
指標
Walshパイプライン
バイ&ホールド(均等加重)
総リターン
+75.52%
+119.75%
シャープレシオ
2.36
2.86
最大ドローダウン
−13.50%
−13.22%
勝率
76.2%
—
取引回数
21
—
最終価値
$175,518
$219,749
Walshは、この強気相場期間中にバイ&ホールドを下回りました。2023年10月、パイプラインはモメンタムシグナルが悪化したため全ポジションを解消し、その月の間はキャッシュを保有し、その後のNVDAの回復ラリーを逃しました。これはリスクゲートの意図された動作であり、高い不確実性期間を正しく特定しましたが、トレンド相場における保守的な閾値設定のコストを明らかにしています。
エージェントごとの精度/信頼度キャリブレーション: 進行中。
eval/agent_attribution.pyモジュールは準備完了ですが、結果を得るには、意味のあるキャリブレーション曲線を作成するために、フォローアップ価格データを含む50回以上のパイプライン実行が必要です。
実行あたりのコストとレイテンシ: 進行中。
eval/cost_latency.py PipelineTrackerは計装済みであり、LLMベースのエージェントが現在のルールベースのスタブを置き換えた後に数値が入力されます。
敵対的ロバスト性: 3種類のエージェントタイプにわたる18のテストケース。過信が5件フラグ付けされています(既知の制限を参照)。
アーキテクチャ
┌──────────────────────────┐
ticker ──────► │ Orchestrator │
│ (asyncio.gather) │
└──┬──┬──┬──┬──────────────┘
│ │ │ │ (parallel)
┌─────────────┘ │ │ └─────────────┐
▼ ▼ ▼ ▼
┌────────────┐ ┌──────────┐ ┌──────────┐ ┌───────────┐
│Fundamental │ │Technical │ │Sentiment │ │ Macro │
│ Analyst │ │ Analyst │ │ Analyst │ │ Analyst │
│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │
│PE, growth, │ │RSI, MACD,│ │news, │ │GDP, rates,│
│margins, │ │golden │ │social, │ │inflation, │
│D/E ratio │ │cross │ │insider │ │sector │
└─────┬──────┘ └────┬─────┘ └────┬─────┘ └─────┬─────┘
└──────────────┴──────────────┴──────────────┘
│
▼ AgentThesis × 4
┌──────────────────────┐
│ Portfolio Manager │
│ confidence-weighted │
│ signal synthesis │
└──────────┬───────────┘
│ PortfolioDecision
▼
┌──────────────────────┐
│ Risk Manager │
│ veto / downgrade │
│ • conf < 45% → veto │
│ • spread ≥ 4 → veto │
│ • conf < 65% → │
│ downgrade STRONG │
└──────────┬───────────┘
│ FinalDecision
▼
approved / vetoed
仕組み
ファンダメンタルアナリストは、バリュエーション指標(PER、収益成長率、利益率、負債資本比率)を取得し、それらを閾値に対してスコアリングします。PERが15未満は強気票を1つ追加し、30を超えると弱気票を1つ追加します。収益成長率が15%超または利益率が20%超は、それぞれ強気票を1つ追加します。生のスコアは、確信の強さに比例した信頼度を持つ、STRONG_BUY / BUY / HOLD / SELL / STRONG_SELLシグナルにマッピングされます。
テクニカルアナリストは、SMAクロスオーバー(20日および50日)、MACDヒストグラムの方向、およびオプションでゴールデンクロスフラグを評価します。各インジケーターは+1または-1で投票し、価格が平坦な状態での偽のシグナルを抑制するためのデッドバンドがあります。バックテストハーネスでは、ルールベースのTechnicalSignalAgentは、yfinanceの価格データに対して20日および50日のローリングウィンドウでの実現モメンタムを使用します。
センチメントアナリストは、ニュースセンチメントスコア(-1から+1)とソーシャルセンチメントスコアを集計し、それらを平均してから、インサイダー買いボーナスを適用します。方向性シグナルと、ほぼ中立なセンチメントで抑制された信頼度値を出力します。
マクロアナリストは、GDP成長率、FRBフェデラルファンド金利、インフレ率、およびセクター見通しタグを確認します。好ましいマクロ経済条件(成長率> 2.5%、金利<4%、インフレ率<3%、強気セクター)はそれぞれ強気票を1つ追加し、好ましくない条件は票を減らします。マクロシグナルはレジームフィルターとして機能します。強い弱気のマクロは、強気なテクニカルまたはセンチメントの読みを相殺することができます。
ポートフォリオマネージャーは、数値シグナルスコアの信頼度で重み付けされた平均を使用して、4つの分析を合成します。コンセンサスペナルティ: 信頼度は、最高および最低のエージェントシグナル間のスプレッドによってスケーリングされます(conf × max(0.5, 1 - spread × 0.1))。緊密なコンセンサスはほぼ完全な信頼度に近づきますが、4ポイントのスプレッド(STRONG_BUY対STRONG_SELL)は信頼度を半分にします。
リスクマネージャーは唯一の意思決定者です。2つのハード拒否ルールがあります:(1)ポートフォリオ信頼度が45%未満の場合 →シグナルに関係なく強制的にHOLD、(2)エージェントシグナルスプレッドが4以上の場合 →極端な意見の相違として拒否。ソフトルールは、信頼度が45-65%の場合、STRONG_BUYをBUYに、またはSTRONG_SELLをSELLにダウングレードします。ルールが発火しない場合、決定は「リスクフラグなし」で通過します。
既知の制限/障害モード
バックテストのパフォーマンス不足(2023年1月~12月): Walshのルールベースバックテストは、AAPL/MSFT/NVDAの均等加重パッシブバイ&ホールドの+119.8%に対し、+75.5%のリターンでした。これは約44パーセントポイントのアンダーパフォーマンスです。主な原因は、ボラティリティダンパー(バックテスト/engine.pyでvol_cap=40%)であり、NVDAの実現ボラティリティが約70-90%であったにもかかわらず、年間を通じてNVDAの配分をゼロにしたこと、およびMeanReversionSignalAgentが強気相場中に52週高値を更新した株式に対してSELLシグナルを発行したことです。シグナル重み付けとボラティリティキャップは、この戦略がライブ展開に適する前に調整が必要です。より広範には、逆張り戦略は持続的なトレンドレジーム中に構造的にパフォーマンスが悪化します。より堅牢なWalshは、トレンド対平均回帰市場条件を検出し、すべてのレジームで一定に保つのではなく、それに応じてMeanReversionSignalAgentの重みをスケーリングするでしょう。
バックテスト方法論の明確化: バックテストエンジンは、LLM搭載エージェント(デモダッシュボードに表示)ではなく、決定論的なルールベースエージェント(SMAクロスオーバー、モメンタム、平均回帰)を使用します。上記の数値は、アルゴリズムシグナルエンジンのみを反映しています。これらはeval/adversarial.py(18テストケース、5件フラグ付け)からの文書化された発見です。
TECH_003 — ジグザグ価格、過信(信頼度=0.80、最大期待値0.65)
オシレートする価格からのSMAシグナルは不完全にキャンセルされますが、エージェントは投票平均がわずかに一方に傾くため、依然として0.80を返します。SMA20/SMA50を繰り返し横切る価格系列はほぼゼロの信頼度を生み出すはずですが、デッドバンド(0.1%)はすべてのノイズを抑制するにはタイトすぎます。
TECH_004 — 上昇トレンド後のクラッシュ、古い強気シグナル(信頼度=0.80、最大期待値0.65)
価格が上昇してから急落した場合、SMA20とSMA50は構造上遅延します。クラッシュトップの数バー後もエージェントは「SMAを上回る価格」と読み取る可能性があり、下落市場に自信のあるBUYを生成します。20日モメンタムはこれを部分的に修正しますが、常に2つのSMA投票を克服できるわけではありません。
TECH_006 — 横ばいの履歴後の1日50%ジャンプ、偽のシグナル(信頼度=0.80、最大期待値0.75)
1日の急騰は20日モメンタム計算を膨張させ、価格を即座に両方のSMAの上に押し上げ、トレンドの物質性がないにもかかわらず0.80の信頼度でSTRONG_BUYを生成します。入力検証(例: 単一バーの移動をキャップする)は現在適用されていません。
MOM_005 — 負の価格(データ破損)、過信(信頼度=0.85、最大期待値0.65)
MomentumSignalAgentは、対数収益率を計算する前に価格が正であることを検証しません。負の価格は定義された(たとえ無意味であっても)モメンタム値と方向性のあるシグナルを生成します。価格の健全性チェックが修正です。
REV_006 — 中間レンジのジグザグ、過信(信頼度=0.76、最大期待値0.50)
MeanReversionSignalAgentは、価格が52週レンジの中央で正確にオシレートしている(リバージョンシグナルなし)のを確認しますが、0.76の信頼度を出力します。エージェントは現在、中間レンジの価格に対して非ゼロの信頼度を与えますが、それは「明確なリバージョンターゲットなし」とデフォルトにすべきです。
構造的な制限(まだテストされていない):
リスクマネージャーの45%の信頼度閾値は単一のハードカットオフであり、ドローダウンレジームやポートフォリオの集中度を考慮していません。エージェントシグナルは、クロスエージェント情報共有なしに独立して計算されます。マクロ拒否はテクニカルエージェントの信頼度を低下させません。現在の