vault: add Trading Agents project - hybrid architecture plan and original analysis

This commit is contained in:
Yaojia Wang
2026-03-21 12:05:13 +01:00
parent cdba2497a7
commit ec6373a577
2 changed files with 487 additions and 0 deletions

View File

@@ -0,0 +1,179 @@
---
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 混合架构方案]]
- [[openbb-invest-api]]