--- 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]]