---
created: "2026-03-21"
type: resource
tags: [trading, multi-agent, langgraph, architecture, reference]
source: "https://github.com/TauricResearch/TradingAgents"
---

# TradingAgents 原始架构分析

## 概述

[TradingAgents](https://github.com/TauricResearch/TradingAgents) 是一个基于 LangGraph 的多角色 LLM 交易决策框架，模拟真实交易公司的协作流程：分析师团队 → 多空辩论 → 交易决策 → 风控辩论 → 最终裁决。

---

## 核心文件结构

| 文件 | 职责 |
|------|------|
| `tradingagents/graph/trading_graph.py` | 主入口，编排整个系统 |
| `tradingagents/graph/setup.py` | 构建 LangGraph 状态机 |
| `tradingagents/graph/conditional_logic.py` | 条件路由（工具调用 / 辩论轮次） |
| `tradingagents/agents/analysts/*.py` | 4 个分析师（市场/社媒/新闻/基本面） |
| `tradingagents/agents/researchers/*.py` | Bull/Bear 研究员 + Research Manager |
| `tradingagents/agents/risk_mgmt/*.py` | 激进/保守/中性风控辩论者 |
| `tradingagents/agents/trader/trader.py` | 交易员 |
| `tradingagents/agents/utils/agent_states.py` | TypedDict 状态定义 |
| `tradingagents/agents/utils/memory.py` | BM25 记忆系统 |
| `tradingagents/dataflows/interface.py` | 数据供应商路由 + 降级策略 |
| `tradingagents/dataflows/y_finance.py` | yfinance 数据实现 |
| `tradingagents/graph/reflection.py` | 交易后复盘，更新记忆 |
| `tradingagents/graph/signal_processing.py` | 从冗长输出提取 BUY/SELL/HOLD |

---

## 分析师团队（并行执行）

### Market Analyst
- 技术分析：SMA, EMA, MACD, RSI, Bollinger Bands, ATR, VWMA
- 工具：`get_stock_data`, `get_indicators`
- 数据源：yfinance + stockstats

### Social Media Analyst
- 公司新闻 + 情感分析
- 工具：`get_news`

### News Analyst
- 宏观经济 + 世界大事
- 工具：`get_news`, `get_global_news`

### Fundamentals Analyst
- 财务报表 + 公司指标
- 工具：`get_fundamentals`, `get_balance_sheet`, `get_cashflow`, `get_income_statement`

---

## 辩论机制

### 投资辩论（Bull vs Bear）

1. Bull Researcher 阅读所有报告 + 检索历史相似情况 → 提出看多论点
2. Bear Researcher 阅读报告 + 历史 → 反驳
3. 循环 `max_debate_rounds` 轮（默认 1 轮）
4. Research Manager（裁判）读完整辩论历史 + 过去的裁决记忆 → 输出投资方案

### 风控辩论（三方）

1. Aggressive Analyst：高风险高回报
2. Conservative Analyst：稳健保守
3. Neutral Analyst：平衡两方
4. 循环 `max_risk_discuss_rounds` 轮（默认 1 轮 × 3 人 = 3 turns）
5. Risk Manager（裁判）修正交易方案 → 最终决策

### 辩论路由逻辑

```python
# conditional_logic.py
def should_continue_debate(state):
    # 辩论历史长度 >= max_debate_rounds * 2 → 结束
    # 否则交替 Bull → Bear → Bull → Bear

def should_continue_risk_analysis(state):
    # 长度 >= max_risk_discuss_rounds * 3 → 结束
    # 循环 Aggressive → Conservative → Neutral
```

---

## BM25 记忆系统

### 结构

```python
class FinancialSituationMemory:
    # 存储: (market_situation_description, recommendation) 元组列表
    # 检索: BM25 相似度，取 top-n 最相似历史情况
    # 无需 API，完全离线
```

### 5 个独立记忆库

1. Bull Researcher Memory
2. Bear Researcher Memory
3. Research Manager Memory
4. Trader Memory
5. Risk Manager Memory

### 复盘机制

```python
# reflection.py
class Reflector:
    def reflect_and_remember(self, returns_losses):
        # 分析交易结果（盈亏）
        # 生成教训总结
        # 更新各角色的记忆库
```

---

## LangGraph 状态定义

```python
class AgentState(TypedDict):
    company_of_interest: str      # 股票代码
    trade_date: str               # 交易日期
    market_report: str            # 市场分析报告
    sentiment_report: str         # 情感分析报告
    news_report: str              # 新闻分析报告
    fundamentals_report: str      # 基本面报告
    invest_debate_state: dict     # 多空辩论状态
    risk_debate_state: dict       # 风控辩论状态
    final_trade_decision: str     # 最终决策
```

---

## 数据供应商抽象层

```python
# interface.py - 供应商路由
def route_to_vendor(tool_name, category, params):
    vendor = config["data_vendors"].get(category, "yfinance")
    try:
        return vendors[vendor][tool_name](params)
    except RateLimit:
        return vendors["yfinance"][tool_name](params)  # 降级
```

支持的供应商：
- yfinance（默认，免费）
- Alpha Vantage（需 API key）
- 按 category 级别配置，支持 tool 级别覆盖

---

## 调用方式

```python
ta = TradingAgentsGraph(config={
    "llm_provider": "openai",
    "deep_think_llm": "gpt-5.2",
    "quick_think_llm": "gpt-5-mini",
    "max_debate_rounds": 1,
    "max_risk_discuss_rounds": 1,
})
final_state, decision = ta.propagate("NVDA", "2024-05-10")
# decision = "BUY" | "SELL" | "HOLD"

# 复盘
ta.reflect_and_remember(returns_losses=1500)
```

---

## Related

- [[Trading Agents 混合架构方案]]
- [[Trading Agents 使用指南]]
- [[openbb-invest-api]]
- [[OpenClaw 部署配置分析]]
