Files
knowledge-base/2 - Projects/Trading-Agents/TradingAgents 原始架构分析.md

5.1 KiB
Raw Blame History

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

TradingAgents 原始架构分析

概述

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裁判修正交易方案 → 最终决策

辩论路由逻辑

# 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 记忆系统

结构

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

复盘机制

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

LangGraph 状态定义

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     # 最终决策

数据供应商抽象层

# 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 级别覆盖

调用方式

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)