5.1 KiB
5.1 KiB
created, type, tags, source
| created | type | tags | source | |||||
|---|---|---|---|---|---|---|---|---|
| 2026-03-21 | resource |
|
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)
- Bull Researcher 阅读所有报告 + 检索历史相似情况 → 提出看多论点
- Bear Researcher 阅读报告 + 历史 → 反驳
- 循环
max_debate_rounds轮(默认 1 轮) - Research Manager(裁判)读完整辩论历史 + 过去的裁决记忆 → 输出投资方案
风控辩论(三方)
- Aggressive Analyst:高风险高回报
- Conservative Analyst:稳健保守
- Neutral Analyst:平衡两方
- 循环
max_risk_discuss_rounds轮(默认 1 轮 × 3 人 = 3 turns) - 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 个独立记忆库
- Bull Researcher Memory
- Bear Researcher Memory
- Research Manager Memory
- Trader Memory
- 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)