13 KiB
13 KiB
created, type, status, deadline, tags
| created | type | status | deadline | tags | |||||
|---|---|---|---|---|---|---|---|---|---|
| 2026-03-21 | project | active |
|
Trading Agents 混合架构方案
目标
基于 openbb-invest-api 的数据层,在 OpenClaw 上实现类似 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 尚未实现(Issue #18869,PR 未合并)。即使实现了,sessions_send 方案也更优:
| 维度 | 群聊辩论 | sessions_send 辩论 |
|---|---|---|
| 流程控制 | 混乱,谁先说不确定 | 结构化,轮次可控 |
| 循环风险 | 高(可能死循环) | 无(maxPingPongTurns 硬限制) |
| 上下文 | 所有人共享一个上下文窗口 | 每个 agent 独立上下文,更专注 |
| Token 成本 | N 个 agent × 完整群聊历史 | 仅辩论双方共享必要上下文 |
| 可观测性 | 难以追踪谁说了什么 | 完整的 session 记录 |
| 当前可用性 | ❌ 未实现 | ✅ 已可用 |
学术依据
- ICLR 2025 MAD 研究:异构 agent + 结构化拓扑效果最好
- Adaptive HMAD:异构辩论比同构辩论准确率高 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)
{
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_sendping-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 本地运行,开箱即用 |