13 KiB
13 KiB
TradingAgents 核心架构与逻辑指南
📋 项目概述
TradingAgents是一个基于多代理大语言模型的金融交易分析框架,模拟真实交易公司的运作模式。通过多个专门的AI代理协作,从不同维度分析市场数据,最终形成综合的交易决策建议。
🏗️ 整体架构
核心设计理念
TradingAgents采用多代理协作的设计模式,每个代理都有明确的角色定位和职责分工:
┌─────────────────────────────────────────────────────────────┐
│ TradingAgents 架构图 │
├─────────────────────────────────────────────────────────────┤
│ 数据层 (Data Layer) │
│ ┌─────────┬─────────┬─────────┬─────────┬─────────┐ │
│ │Yahoo │FinnHub │Reddit │Google │技术指标 │ │
│ │Finance │数据 │数据 │News │计算 │ │
│ └─────────┴─────────┴─────────┴─────────┴─────────┘ │
├─────────────────────────────────────────────────────────────┤
│ 代理层 (Agent Layer) │
│ ┌─────────┬─────────┬─────────┬─────────┬─────────┐ │
│ │市场分析师│基本面分析师│新闻分析师│社交媒体分析师│风险管理 │ │
│ └─────────┴─────────┴─────────┴─────────┴─────────┘ │
│ ┌─────────┬─────────┬─────────┬─────────┬─────────┐ │
│ │看涨研究员│看跌研究员│研究经理 │交易员 │风险经理 │ │
│ └─────────┴─────────┴─────────┴─────────┴─────────┘ │
├─────────────────────────────────────────────────────────────┤
│ 协调层 (Coordination Layer) │
│ ┌─────────┬─────────┬─────────┬─────────┐ │
│ │图构建 │状态管理 │条件逻辑 │信号处理 │ │
│ └─────────┴─────────┴─────────┴─────────┘ │
├─────────────────────────────────────────────────────────────┤
│ 决策层 (Decision Layer) │
│ ┌─────────┬─────────┬─────────┐ │
│ │辩论机制 │风险评估 │最终决策 │ │
│ └─────────┴─────────┴─────────┘ │
└─────────────────────────────────────────────────────────────┘
🚀 代码入口与执行流程
1. 主要入口点
入口1: 直接运行 (main.py)
# 导入核心模块
from tradingagents.graph.trading_graph import TradingAgentsGraph
from tradingagents.default_config import DEFAULT_CONFIG
# 创建配置
config = DEFAULT_CONFIG.copy()
config["llm_provider"] = "qwen" # 使用国内免费模型
# 初始化交易代理图
ta = TradingAgentsGraph(debug=True, config=config)
# 运行分析
_, decision = ta.propagate("NVDA", "2024-05-10")
入口2: 命令行界面 (cli/main.py)
python -m cli.main
2. 核心执行流程
graph TD
A[用户输入: 股票代码+日期] --> B[创建初始状态]
B --> C[市场分析师]
C --> D[基本面分析师]
D --> E[新闻分析师]
E --> F[社交媒体分析师]
F --> G[看涨研究员]
G --> H[看跌研究员]
H --> I[研究经理]
I --> J[交易员]
J --> K[风险分析师]
K --> L[风险经理]
L --> M[最终决策]
🔧 核心模块详解
1. 图系统 (tradingagents/graph/)
TradingAgentsGraph - 主协调器
文件: tradingagents/graph/trading_graph.py
核心职责:
- 初始化所有AI模型和代理
- 协调整个分析流程
- 管理状态传递和结果输出
关键方法:
def __init__(self, selected_analysts, debug, config):
# 初始化AI模型
# 创建代理节点
# 设置图结构
def propagate(self, company_name, trade_date):
# 创建初始状态
# 执行图流程
# 返回最终决策
GraphSetup - 图构建器
文件: tradingagents/graph/setup.py
核心职责:
- 构建LangGraph工作流
- 定义代理之间的连接关系
- 设置条件分支逻辑
关键组件:
def setup_graph(self, selected_analysts):
# 创建分析师节点
# 创建研究员节点
# 创建管理节点
# 定义边连接
# 设置条件逻辑
Propagator - 状态传播器
文件: tradingagents/graph/propagation.py
核心职责:
- 创建初始分析状态
- 管理状态在代理间的传递
- 控制递归限制
关键方法:
def create_initial_state(self, company_name, trade_date):
# 初始化状态字典
# 设置公司信息和交易日期
# 创建辩论状态
def get_graph_args(self):
# 返回图执行参数
# 设置递归限制
ConditionalLogic - 条件逻辑控制器
文件: tradingagents/graph/conditional_logic.py
核心职责:
- 控制代理间的流程分支
- 决定是否需要工具调用
- 管理辩论轮数
关键方法:
def should_continue_market(self, state):
# 判断市场分析是否需要工具调用
def should_continue_debate(self, state):
# 判断辩论是否继续
2. 代理系统 (tradingagents/agents/)
分析师代理 (analysts/)
市场分析师 (market_analyst.py)
- 职责: 技术分析,计算技术指标
- 工具: Yahoo Finance数据、技术指标计算
- 输出: 市场趋势报告
基本面分析师 (fundamentals_analyst.py)
- 职责: 财务分析,评估公司价值
- 工具: 财务报表数据、内部交易数据
- 输出: 基本面分析报告
新闻分析师 (news_analyst.py)
- 职责: 新闻事件分析,宏观影响评估
- 工具: Google News、FinnHub新闻
- 输出: 新闻影响报告
社交媒体分析师 (social_media_analyst.py)
- 职责: 社交媒体情绪分析
- 工具: Reddit数据、社交媒体API
- 输出: 情绪分析报告
研究员代理 (researchers/)
看涨研究员 (bull_researcher.py)
- 职责: 构建看涨论点,寻找投资机会
- 输入: 所有分析师报告
- 输出: 看涨分析报告
看跌研究员 (bear_researcher.py)
- 职责: 构建看跌论点,识别风险因素
- 输入: 所有分析师报告
- 输出: 看跌分析报告
管理代理 (managers/)
研究经理 (research_manager.py)
- 职责: 综合看涨和看跌观点,形成投资计划
- 输入: 看涨/看跌研究报告
- 输出: 综合投资计划
风险经理 (risk_manager.py)
- 职责: 评估投资风险,调整交易策略
- 输入: 交易建议、风险分析
- 输出: 最终交易决策
交易代理 (trader/)
交易员 (trader.py)
- 职责: 基于研究结果制定具体交易策略
- 输入: 投资计划、市场分析
- 输出: 交易建议
3. 数据流系统 (tradingagents/dataflows/)
数据接口统一管理 (interface.py)
- 职责: 提供统一的数据访问接口
- 功能: 封装各种数据源的调用逻辑
具体数据工具
yfin_utils.py: Yahoo Finance数据获取finnhub_utils.py: FinnHub数据读取(本地缓存)reddit_utils.py: Reddit数据获取googlenews_utils.py: Google新闻搜索stockstats_utils.py: 技术指标计算
4. 状态管理系统
AgentState - 主状态
class AgentState(MessagesState):
company_of_interest: str # 目标公司
trade_date: str # 交易日期
investment_debate_state: InvestDebateState # 投资辩论状态
risk_debate_state: RiskDebateState # 风险辩论状态
market_report: str # 市场分析报告
fundamentals_report: str # 基本面分析报告
sentiment_report: str # 情绪分析报告
news_report: str # 新闻分析报告
investment_plan: str # 投资计划
final_trade_decision: str # 最终交易决策
🔄 详细执行流程
阶段1: 初始化
- 配置加载: 读取默认配置,支持自定义配置
- 模型初始化: 根据配置初始化AI模型(支持国内外多种模型)
- 代理创建: 创建所有需要的代理节点
- 图构建: 使用LangGraph构建工作流图
阶段2: 数据分析
-
市场分析师:
- 获取股票价格数据
- 计算技术指标(RSI、MACD、布林带等)
- 生成技术分析报告
-
基本面分析师:
- 获取财务报表数据
- 分析内部交易情况
- 生成基本面分析报告
-
新闻分析师:
- 搜索相关新闻
- 分析宏观环境影响
- 生成新闻影响报告
-
社交媒体分析师:
- 获取社交媒体数据
- 进行情绪分析
- 生成情绪分析报告
阶段3: 研究辩论
-
看涨研究员:
- 基于所有分析报告
- 构建看涨论点
- 寻找投资机会
-
看跌研究员:
- 基于所有分析报告
- 构建看跌论点
- 识别风险因素
-
研究经理:
- 综合看涨和看跌观点
- 形成平衡的投资计划
- 制定投资策略
阶段4: 交易决策
-
交易员:
- 基于投资计划
- 制定具体交易策略
- 确定买卖时机和数量
-
风险分析师:
- 评估交易风险
- 进行压力测试
- 提供风险建议
-
风险经理:
- 综合所有信息
- 做出最终交易决策
- 输出最终建议
🛠️ 关键特性
1. 多模型支持
- 国外模型: OpenAI GPT、Anthropic Claude、Google Gemini
- 国内模型: 通义千问、文心一言、智谱AI、月之暗面Kimi
2. 灵活配置
- 可选择不同的分析师组合
- 可调整辩论轮数
- 支持在线/离线数据模式
3. 状态管理
- 完整的状态跟踪
- 支持调试模式
- 状态持久化
4. 工具集成
- 丰富的金融数据源
- 技术指标计算
- 新闻和社交媒体数据
📊 数据流图
graph LR
A[用户输入] --> B[TradingAgentsGraph]
B --> C[Propagator创建初始状态]
C --> D[GraphSetup构建工作流]
D --> E[分析师代理执行]
E --> F[研究员代理辩论]
F --> G[管理代理决策]
G --> H[最终输出]
E --> I[数据工具调用]
I --> J[Yahoo Finance]
I --> K[FinnHub数据]
I --> L[Reddit数据]
I --> M[Google News]
🔍 调试与监控
调试模式
ta = TradingAgentsGraph(debug=True, config=config)
- 显示详细的执行过程
- 打印每个代理的输出
- 跟踪状态变化
状态日志
- 自动记录每次分析的状态
- 支持状态回放和分析
- 便于问题排查
🚨 注意事项
- API限制: 注意各种API的调用限制和费用
- 数据质量: 确保数据源的可靠性和时效性
- 模型选择: 根据任务复杂度选择合适的模型
- 风险控制: 本框架仅用于研究,不构成投资建议
📈 扩展性
添加新的分析师
- 在
tradingagents/agents/analysts/中创建新文件 - 实现分析师逻辑
- 在
GraphSetup中注册新节点
添加新的数据源
- 在
tradingagents/dataflows/中创建新工具 - 在
interface.py中注册新接口 - 在代理中使用新工具
添加新的模型
- 在
tradingagents/llm_adapters/中创建适配器 - 在
TradingAgentsGraph中添加模型支持 - 更新配置文件
这个指南提供了TradingAgents项目的完整架构和逻辑梳理,帮助开发者深入理解项目的设计思路和实现细节。