--- 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 部署配置分析]]