vault: add Trading Agents project - hybrid architecture plan and original analysis
This commit is contained in:
179
2 - Projects/Trading-Agents/TradingAgents 原始架构分析.md
Normal file
179
2 - Projects/Trading-Agents/TradingAgents 原始架构分析.md
Normal 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]]
|
||||
Reference in New Issue
Block a user