vault: add Trading Agents project - hybrid architecture plan and original analysis
This commit is contained in:
308
2 - Projects/Trading-Agents/Trading Agents 混合架构方案.md
Normal file
308
2 - Projects/Trading-Agents/Trading Agents 混合架构方案.md
Normal file
@@ -0,0 +1,308 @@
|
||||
---
|
||||
created: "2026-03-21"
|
||||
type: project
|
||||
status: active
|
||||
deadline: ""
|
||||
tags: [trading, multi-agent, openclaw, openbb, architecture]
|
||||
---
|
||||
|
||||
# Trading Agents 混合架构方案
|
||||
|
||||
## 目标
|
||||
|
||||
基于 [[openbb-invest-api]] 的数据层,在 OpenClaw 上实现类似 [TradingAgents](https://github.com/TauricResearch/TradingAgents) 的多角色交易决策系统。核心是**辩论驱动的投资决策**。
|
||||
|
||||
---
|
||||
|
||||
## 一、TradingAgents 原始架构分析
|
||||
|
||||
### 5 大模块
|
||||
|
||||
| 模块 | 角色 | 职责 |
|
||||
|------|------|------|
|
||||
| **Analyst Team** | 市场/社媒/新闻/基本面 4个分析师 | 并行抓数据,各写分析报告 |
|
||||
| **Researcher Team** | Bull + Bear + 裁判 | 多空辩论 N 轮,裁判出投资方案 |
|
||||
| **Trader** | 交易员 | 根据投资方案做 BUY/SELL/HOLD 决策 |
|
||||
| **Risk Mgmt Team** | 激进/保守/中性 + 裁判 | 三方辩论风险,裁判修正决策 |
|
||||
| **Memory System** | BM25 相似度检索 | 记住历史情况和教训,下次决策参考 |
|
||||
|
||||
### 执行流程(LangGraph 状态机)
|
||||
|
||||
```
|
||||
START → [Market/Social/News/Fundamentals Analysts 并行]
|
||||
→ Bull Researcher ⇄ Bear Researcher (N轮辩论)
|
||||
→ Research Manager (裁判裁决)
|
||||
→ Trader (交易决策)
|
||||
→ Aggressive ⇄ Conservative ⇄ Neutral (风控三方辩论)
|
||||
→ Risk Manager (最终裁决)
|
||||
→ END (BUY/SELL/HOLD)
|
||||
```
|
||||
|
||||
### 技术栈
|
||||
|
||||
- **编排**:LangGraph (StateGraph + 条件路由)
|
||||
- **LLM**:支持 OpenAI/Anthropic/Google/xAI/Ollama
|
||||
- **数据**:yfinance + Alpha Vantage
|
||||
- **记忆**:BM25 (rank-bm25) 离线相似度检索
|
||||
- **辩论**:可配置轮次 (`max_debate_rounds`, `max_risk_discuss_rounds`)
|
||||
|
||||
---
|
||||
|
||||
## 二、openbb-invest-api 数据覆盖映射
|
||||
|
||||
> **结论:openbb-invest-api 已完全覆盖 TradingAgents 所有数据需求,且更丰富。**
|
||||
|
||||
| TradingAgents 数据需求 | openbb-invest-api 端点 | 额外优势 |
|
||||
|---|---|---|
|
||||
| 股票行情 OHLCV | `/stock/{symbol}/historical` | ✅ |
|
||||
| 技术指标 (RSI, MACD, BB, ATR) | `/stock/{symbol}/technical/*` | 14种指标 + Ichimoku, Fibonacci 等 |
|
||||
| 基本面 (财报、资产负债表) | `/stock/{symbol}/financials`, `/metrics` | ✅ |
|
||||
| 公司新闻 | `/stock/{symbol}/news` | ✅ |
|
||||
| 宏观新闻 | `/macro/overview`, `/economy/*` | CPI, GDP, 就业, FOMC 等 |
|
||||
| 内幕交易 | `/stock/{symbol}/insider-trades` | ✅ |
|
||||
| 情感分析 | `/stock/{symbol}/sentiment` | 多源复合评分 (Finnhub + AV + Reddit) |
|
||||
|
||||
### openbb-invest-api 独有数据(TradingAgents 没有的)
|
||||
|
||||
- 做空数据 (`/shorts/*`):空头量、FTD、暗池
|
||||
- 期权数据 (`/market/options/*`):期权链、Greeks、IV
|
||||
- 固收数据 (`/fixed-income/*`):收益率曲线、国债、SOFR
|
||||
- DeFi 数据 (`/defi/*`):TVL、收益池、DEX 交易量
|
||||
- A 股/港股 (`/cn/*`):实时行情 + 历史数据
|
||||
- 投资组合分析 (`/portfolio/*`):HRP 优化、风险平价、t-SNE 聚类
|
||||
- 回测引擎 (`/backtest/*`):SMA/RSI/动量策略回测
|
||||
|
||||
---
|
||||
|
||||
## 三、混合架构设计
|
||||
|
||||
### 核心思路
|
||||
|
||||
**并行的地方用 `sessions_spawn`,需要对话的地方用 `sessions_send`。**
|
||||
|
||||
### 架构图
|
||||
|
||||
```
|
||||
┌─────────────────────────────────────────────┐
|
||||
│ Orchestrator Agent (Judge/PM) │
|
||||
│ Model: Claude Opus (深度推理) │
|
||||
│ SOUL.md: 客观裁判,综合决策 │
|
||||
├─────────────────────────────────────────────┤
|
||||
│ │
|
||||
│ Phase 1: 数据收集 (sessions_spawn 并行) │
|
||||
│ ┌───────────┐ ┌─────────────┐ │
|
||||
│ │ Market │ │ Fundamen- │ │
|
||||
│ │ Analyst │ │ tals │ │
|
||||
│ │ (Sonnet) │ │ (Sonnet) │ │
|
||||
│ └───────────┘ └─────────────┘ │
|
||||
│ ┌───────────┐ ┌─────────────┐ │
|
||||
│ │ Sentiment │ │ News │ │
|
||||
│ │ Analyst │ │ Analyst │ │
|
||||
│ │ (Haiku) │ │ (Haiku) │ │
|
||||
│ └───────────┘ └─────────────┘ │
|
||||
│ │
|
||||
│ Phase 2: 多空辩论 (sessions_send ping-pong) │
|
||||
│ ┌───────────┐ 3-5 轮 ┌───────────┐ │
|
||||
│ │ Bull │◄────────►│ Bear │ │
|
||||
│ │ Researcher│ │ Researcher│ │
|
||||
│ │ (Opus) │ │ (Opus) │ │
|
||||
│ └───────────┘ └───────────┘ │
|
||||
│ │
|
||||
│ Phase 3: 风控辩论 (sessions_send ping-pong) │
|
||||
│ ┌───────────┐ 2-3 轮 ┌───────────┐ │
|
||||
│ │ Aggressive│◄────────►│ Conserva- │ │
|
||||
│ │ (Sonnet) │ │ tive │ │
|
||||
│ └───────────┘ │ (Sonnet) │ │
|
||||
│ └───────────┘ │
|
||||
│ │
|
||||
│ Phase 4: Orchestrator 综合裁决 │
|
||||
│ → 输出 BUY/SELL/HOLD + 完整推理 │
|
||||
└─────────────────────────────────────────────┘
|
||||
```
|
||||
|
||||
### 为什么不用群聊辩论
|
||||
|
||||
OpenClaw 的 Multi-Agent Group Chat [尚未实现](https://github.com/openclaw/openclaw/issues/18869)(Issue #18869,PR 未合并)。即使实现了,`sessions_send` 方案也更优:
|
||||
|
||||
| 维度 | 群聊辩论 | sessions_send 辩论 |
|
||||
|------|---------|-------------------|
|
||||
| 流程控制 | 混乱,谁先说不确定 | 结构化,轮次可控 |
|
||||
| 循环风险 | 高(可能死循环) | 无(maxPingPongTurns 硬限制) |
|
||||
| 上下文 | 所有人共享一个上下文窗口 | 每个 agent 独立上下文,更专注 |
|
||||
| Token 成本 | N 个 agent × 完整群聊历史 | 仅辩论双方共享必要上下文 |
|
||||
| 可观测性 | 难以追踪谁说了什么 | 完整的 session 记录 |
|
||||
| 当前可用性 | ❌ 未实现 | ✅ 已可用 |
|
||||
|
||||
### 学术依据
|
||||
|
||||
- [ICLR 2025 MAD 研究](https://d2jud02ci9yv69.cloudfront.net/2025-04-28-mad-159/blog/mad/):**异构 agent + 结构化拓扑**效果最好
|
||||
- [Adaptive HMAD](https://link.springer.com/article/10.1007/s44443-025-00353-3):异构辩论比同构辩论准确率高 4-6%,事实错误减少 30%+
|
||||
- 无结构多 agent 网络会**放大错误达 17.2 倍**
|
||||
|
||||
---
|
||||
|
||||
## 四、OpenClaw 配置详情
|
||||
|
||||
### Agent Workspace 结构
|
||||
|
||||
```
|
||||
~/.openclaw/
|
||||
├── openclaw.json # 主配置
|
||||
├── workspace-orchestrator/ # 编排者
|
||||
│ ├── AGENTS.md
|
||||
│ ├── SOUL.md # 客观裁判人格
|
||||
│ ├── MEMORY.md
|
||||
│ ├── skills/
|
||||
│ │ └── trade-analyze/SKILL.md # 主入口 skill
|
||||
│ └── memory/
|
||||
├── workspace-market-analyst/ # 技术分析师
|
||||
│ ├── SOUL.md # 专注技术指标
|
||||
│ └── skills/
|
||||
│ └── analyze/SKILL.md # 调用 /technical/* 端点
|
||||
├── workspace-fundamentals-analyst/ # 基本面分析师
|
||||
│ ├── SOUL.md
|
||||
│ └── skills/
|
||||
│ └── analyze/SKILL.md # 调用 /metrics, /financials
|
||||
├── workspace-sentiment-analyst/ # 情感分析师
|
||||
│ ├── SOUL.md
|
||||
│ └── skills/
|
||||
│ └── analyze/SKILL.md # 调用 /sentiment, /insider-trades
|
||||
├── workspace-news-analyst/ # 新闻分析师
|
||||
│ ├── SOUL.md
|
||||
│ └── skills/
|
||||
│ └── analyze/SKILL.md # 调用 /macro/overview, /economy/*
|
||||
├── workspace-bull/ # 多方研究员
|
||||
│ ├── SOUL.md # 坚定看多,寻找增长机会
|
||||
│ └── MEMORY.md # 历史成功案例
|
||||
├── workspace-bear/ # 空方研究员
|
||||
│ ├── SOUL.md # 谨慎看空,揭示风险
|
||||
│ └── MEMORY.md # 历史失败教训
|
||||
├── workspace-aggressive/ # 激进风控
|
||||
│ └── SOUL.md # 高风险高回报
|
||||
└── workspace-conservative/ # 保守风控
|
||||
└── SOUL.md # 资产保护优先
|
||||
```
|
||||
|
||||
### 核心配置(openclaw.json)
|
||||
|
||||
```json5
|
||||
{
|
||||
agents: {
|
||||
list: [
|
||||
{ id: "orchestrator", workspace: "~/.openclaw/workspace-orchestrator" },
|
||||
{ id: "market-analyst", workspace: "~/.openclaw/workspace-market-analyst" },
|
||||
{ id: "fundamentals-analyst", workspace: "~/.openclaw/workspace-fundamentals-analyst" },
|
||||
{ id: "sentiment-analyst", workspace: "~/.openclaw/workspace-sentiment-analyst" },
|
||||
{ id: "news-analyst", workspace: "~/.openclaw/workspace-news-analyst" },
|
||||
{ id: "bull", workspace: "~/.openclaw/workspace-bull" },
|
||||
{ id: "bear", workspace: "~/.openclaw/workspace-bear" },
|
||||
{ id: "aggressive", workspace: "~/.openclaw/workspace-aggressive" },
|
||||
{ id: "conservative", workspace: "~/.openclaw/workspace-conservative" }
|
||||
]
|
||||
},
|
||||
tools: {
|
||||
agentToAgent: {
|
||||
enabled: true,
|
||||
allow: ["orchestrator", "bull", "bear", "aggressive", "conservative"]
|
||||
}
|
||||
},
|
||||
session: {
|
||||
agentToAgent: {
|
||||
maxPingPongTurns: 5 // Bull/Bear 辩论最多 5 轮
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
### sessions_spawn vs sessions_send 用法
|
||||
|
||||
**Phase 1 — 并行数据收集(sessions_spawn):**
|
||||
|
||||
Orchestrator 同时 spawn 4 个分析师:
|
||||
```
|
||||
sessions_spawn → market-analyst (task: "分析 NVDA 技术面")
|
||||
sessions_spawn → fundamentals-analyst (task: "分析 NVDA 基本面")
|
||||
sessions_spawn → sentiment-analyst (task: "分析 NVDA 市场情绪")
|
||||
sessions_spawn → news-analyst (task: "分析 NVDA 宏观环境")
|
||||
```
|
||||
|
||||
每个 spawn 独立执行,完成后 announce 结果回 Orchestrator。
|
||||
|
||||
**Phase 2 — 多空辩论(sessions_send ping-pong):**
|
||||
|
||||
```
|
||||
Orchestrator ──sessions_send(报告摘要)──► Bull Agent
|
||||
Bull Agent 回复 bull case
|
||||
──自动 ping-pong──► Bear Agent 反驳
|
||||
──ping-pong──► Bull 再反驳
|
||||
...(最多 5 轮,或 agent 回复 REPLY_SKIP 结束)
|
||||
Orchestrator 收到完整辩论记录(announce step)
|
||||
```
|
||||
|
||||
**Phase 3 — 风控辩论(sessions_send ping-pong):**
|
||||
|
||||
同理,Aggressive ⇄ Conservative 2-3 轮。
|
||||
|
||||
**Phase 4 — 最终裁决:**
|
||||
|
||||
Orchestrator 综合所有报告 + 辩论记录,输出 BUY/SELL/HOLD。
|
||||
|
||||
---
|
||||
|
||||
## 五、实现路线图
|
||||
|
||||
### Phase 1:基础设施(1-2 天)
|
||||
|
||||
- [ ] 确保 openbb-invest-api 在 localhost:8000 运行
|
||||
- [ ] 安装 OpenClaw,`openclaw onboard`
|
||||
- [ ] 创建 9 个 agent workspace
|
||||
- [ ] 编写各 agent 的 SOUL.md(人格定义)
|
||||
|
||||
### Phase 2:4 个分析师 Skills(2-3 天)
|
||||
|
||||
- [ ] market-analyst skill:调用 `/technical/composite`, `/historical`
|
||||
- [ ] fundamentals-analyst skill:调用 `/metrics`, `/financials`
|
||||
- [ ] sentiment-analyst skill:调用 `/sentiment`, `/insider-trades`, `/reddit/trending`
|
||||
- [ ] news-analyst skill:调用 `/macro/overview`, `/economy/*`, `/fixed-income/yield-curve`
|
||||
- [ ] 每个 skill 用 `exec` 调用 curl 或封装 Python 脚本
|
||||
|
||||
### Phase 3:辩论 + 风控(1-2 天)
|
||||
|
||||
- [ ] 配置 `agentToAgent.enabled: true`
|
||||
- [ ] 测试 Bull ⇄ Bear `sessions_send` ping-pong
|
||||
- [ ] 测试 Aggressive ⇄ Conservative ping-pong
|
||||
- [ ] Orchestrator 的 trade-analyze skill 编排完整流程
|
||||
|
||||
### Phase 4:记忆 + 复盘(1 天)
|
||||
|
||||
- [ ] 利用 OpenClaw 内建 memory 系统
|
||||
- [ ] 每次决策存入 `memory/YYYY-MM-DD.md`
|
||||
- [ ] 用 `memory_search` 在辩论时检索相似历史
|
||||
- [ ] 实现 reflect 机制:对比实际收益,更新记忆
|
||||
|
||||
### Phase 5:通道对接 + 优化(1 天)
|
||||
|
||||
- [ ] 绑定 Telegram/WhatsApp,直接聊天触发分析
|
||||
- [ ] 优化 prompt(减少 token 消耗)
|
||||
- [ ] 添加 openbb-invest-api 独有数据源(做空、期权、DeFi)
|
||||
|
||||
---
|
||||
|
||||
## 六、与 TradingAgents 的差异对比
|
||||
|
||||
| 维度 | TradingAgents (LangGraph) | OpenClaw 混合架构 |
|
||||
|------|---|---|
|
||||
| 编排 | 显式状态机,条件路由 | sessions_spawn + sessions_send |
|
||||
| 并行 | 4 分析师真并行 | sessions_spawn 并行 |
|
||||
| 辩论 | 多轮循环,独立 LLM 调用 | ping-pong 机制,最多 5 轮 |
|
||||
| 记忆 | 自建 BM25 | OpenClaw 内建(BM25 + 向量 + 时间衰减) |
|
||||
| 数据 | yfinance 直调 | openbb-invest-api(133+ 端点) |
|
||||
| 交互 | 纯 CLI/API | WhatsApp/Telegram/Discord 直接对话 |
|
||||
| 部署 | 需要自托管 | OpenClaw 本地运行,开箱即用 |
|
||||
|
||||
---
|
||||
|
||||
## Related
|
||||
|
||||
- [[openbb-invest-api]]
|
||||
- [[OpenClaw]]
|
||||
Reference in New Issue
Block a user