使用方式与应用场景
使用方式与应用场景
前三篇文章从架构、Agent 角色和工作流角度深度剖析了 TradingAgents。本文聚焦实践:怎么用、在哪用、用得好。
快速开始
环境要求
- Python >= 3.10
- LLM API Key(至少一个):OpenAI / Anthropic / Google Gemini / DeepSeek 等
安装
# 克隆仓库
git clone https://github.com/TauricResearch/TradingAgents.git
cd TradingAgents
# 安装依赖
pip install -e .配置 API Key
# .env 文件
OPENAI_API_KEY=sk-xxx # OpenAI 或兼容 API
ANTHROPIC_API_KEY=sk-ant-xxx # Anthropic Claude
GOOGLE_API_KEY=xxx # Google Gemini最简运行
from tradingagents.graph.trading_graph import TradingAgentsGraph
from tradingagents.default_config import DEFAULT_CONFIG
from dotenv import load_dotenv
load_dotenv()
# 使用默认配置(OpenAI + yfinance,无需额外 API Key)
ta = TradingAgentsGraph(debug=True, config=DEFAULT_CONFIG)
# 分析英伟达,交易日期 2024-05-10
_, decision = ta.propagate("NVDA", "2024-05-10")
print(decision)输出是一份包含 五档评级(Buy/Overweight/Hold/Underweight/Sell)的完整投资分析报告。
使用方式
TradingAgents 提供两种使用入口。
方式一:Python API(推荐用于回测和集成)
适合嵌入自己的量化流水线:
from tradingagents.graph.trading_graph import TradingAgentsGraph
from tradingagents.default_config import DEFAULT_CONFIG
config = DEFAULT_CONFIG.copy()
# ---- 模型选择 ----
config["llm_provider"] = "openai"
config["deep_think_llm"] = "gpt-5.4-mini" # 深度推理(管理层)
config["quick_think_llm"] = "gpt-5.4-mini" # 快速推理(分析师)
# ---- 辩论深度 ----
config["max_debate_rounds"] = 2 # 多头vs空头辩论轮次
config["max_risk_discuss_rounds"] = 2 # 风控辩论轮次
# ---- 数据源 ----
config["data_vendors"] = {
"core_stock_apis": "yfinance",
"technical_indicators": "yfinance",
"fundamental_data": "yfinance",
"news_data": "yfinance",
}
ta = TradingAgentsGraph(debug=True, config=config)
_, decision = ta.propagate("AAPL", "2024-12-01")选择分析师子集:如果只关心基本面和技术面,可以跳过社交和新闻分析:
ta = TradingAgentsGraph(
selected_analysts=["market", "fundamentals"],
config=config,
)方式二:CLI 命令行
更友好的交互式终端界面:
tradingagents run
# 交互式选择:股票代码 → 日期 → 分析师 → 模型 → 数据源CLI 使用 Typer + Rich 构建,提供:
- 实时进度展示
- 彩色终端输出
- 各 Agent 阶段进展可视化
- LLM Token 用量统计
tradingagents --help
# Usage: tradingagents [OPTIONS] COMMAND [ARGS]...
#
# TradingAgents CLI: Multi-Agents LLM Financial Trading Framework
#
# Commands:
# run 运行交易分析
# config 查看/编辑配置
# backtest 批量回测关键配置详解
模型选择策略
TradingAgents 的双模型策略允许在不同节点使用不同级别的模型:
| 场景 | 推荐 deep_think_llm | 推荐 quick_think_llm | 月成本估算 |
|---|---|---|---|
| 省钱体验 | gpt-5.4-mini | gpt-5.4-mini | ~$15 |
| 生产轻量 | gpt-5.4 | gpt-5.4-mini | ~$50 |
| 生产完整 | gpt-5.4 | gpt-5.4 | ~$80 |
| 国产模型 | deepseek-chat | deepseek-chat | ~$5 |
成本估算基于每日分析 5-10 支股票的月消耗,实际取决于辩论轮次和分析师数量。
# 使用 DeepSeek 降低成本
config["llm_provider"] = "openai" # DeepSeek 兼容 OpenAI API
config["backend_url"] = "https://api.deepseek.com/v1"
config["deep_think_llm"] = "deepseek-chat"
config["quick_think_llm"] = "deepseek-chat"辩论深度权衡
max_debate_rounds 和 max_risk_discuss_rounds 直接影响分析质量和成本:
| 辩论轮次 | Token 消耗 | 分析深度 | 适用场景 |
|---|---|---|---|
| 1 轮 | ~15K tokens | 基本覆盖 | 快速扫描、批量初筛 |
| 2 轮 | ~30K tokens | 深度辩论 | 常规分析 |
| 3 轮 | ~50K tokens | 穷尽讨论 | 重大决策、高不确定性标的 |
数据源选择
| 数据源 | 优势 | 劣势 | 适用场景 |
|---|---|---|---|
| Yahoo Finance | 免费、无需 API Key、覆盖广 | 数据质量不稳定、限流风险 | 个人学习、快速原型 |
| Alpha Vantage | 专业级数据、API 稳定 | 免费额度有限(5次/分钟) | 生产环境、需要可靠数据 |
# 混合配置:关键数据用 Alpha Vantage,其他用 Yahoo Finance
config["tool_vendors"] = {
"get_fundamentals": "alpha_vantage", # 基本面数据要求准确
}应用场景
场景一:每日交易信号生成
典型流程:
import schedule
from datetime import datetime, timedelta
def daily_analysis():
"""每日盘前分析关注列表"""
watchlist = ["AAPL", "NVDA", "MSFT", "GOOGL", "TSLA"]
today = datetime.now().strftime("%Y-%m-%d")
for ticker in watchlist:
try:
_, decision = ta.propagate(ticker, today)
# 提取评级和关键因素存入数据库
rating = parse_rating(decision)
save_to_db(ticker, today, rating, decision)
except Exception as e:
log_error(ticker, e)
# 每个交易日盘前运行
schedule.every().monday.at("08:00").do(daily_analysis)
schedule.every().tuesday.at("08:00").do(daily_analysis)
# ...输出:每日一份信号清单,标注每支股票的评级、置信度和关键驱动因素。
场景二:历史回测与策略验证
利用事后反思机制进行历史回测:
from datetime import datetime, timedelta
def backtest_period(ticker, start_date, end_date, interval_days=7):
"""在历史区间上回测 TradingAgents 的决策质量"""
results = []
current = datetime.strptime(start_date, "%Y-%m-%d")
end = datetime.strptime(end_date, "%Y-%m-%d")
past_context = "" # 累积的历史教训
while current <= end:
date_str = current.strftime("%Y-%m-%d")
# Phase A: 运行分析
_, decision = ta.propagate(ticker, date_str, past_context=past_context)
# Phase B: 获取该日期之后的价格走势来验证
future_date = (current + timedelta(days=interval_days)).strftime("%Y-%m-%d")
actual_return = calculate_return(ticker, date_str, future_date)
# Phase C: 记录并进行事后反思
ta.reflect_and_remember(actual_return)
results.append({
"date": date_str,
"decision": decision,
"actual_return": actual_return,
})
current += timedelta(days=interval_days)
return results
# 回测 NVDA 在 2024 年的表现
results = backtest_period("NVDA", "2024-01-01", "2024-12-31")输出:每个时间点的决策 vs 实际走势对比,评估系统在不同市场环境下的表现。
场景三:研究辅助与深度分析
当你需要快速了解一支不熟悉的股票时,TradingAgents 比手动阅读财报和研报高效得多:
# 深度模式:分析师全开 + 2轮辩论
config["max_debate_rounds"] = 2
config["max_risk_discuss_rounds"] = 2
ta = TradingAgentsGraph(
selected_analysts=["market", "social", "news", "fundamentals"],
config=config,
)
# 获取全面的多维度分析
_, report = ta.propagate("RIVN", "2024-12-01")
print(report)你获得的不只是数据罗列,而是包含多空辩论后的综合判断:
- 看多逻辑和看空逻辑的完整对比
- 风险因素的概率权重评估
- 具体的催化剂和时间线
场景四:投资组合定期审查
每月或每季度对持仓进行一次系统性审查:
def portfolio_review(holdings, review_date):
"""对投资组合进行全面审查"""
review_results = {}
for ticker, position in holdings.items():
# 注入该持仓的历史分析经验
past_lessons = load_past_lessons(ticker)
_, decision = ta.propagate(
ticker,
review_date,
past_context=past_lessons,
)
review_results[ticker] = {
"current_rating": parse_rating(decision),
"confidence": parse_confidence(decision),
"key_risks": parse_risk_factors(decision),
"should_adjust": position["weight"] > 0.1 and parse_rating(decision) == "Sell",
}
return review_results场景五:市场事件快速响应
当重大事件发生时(财报发布、政策变化、行业新闻),快速评估对持仓的影响:
def event_impact_analysis(event_ticker, event_description, affected_tickers):
"""分析事件对相关标的的影响"""
results = {}
context = f"Breaking event: {event_description}"
for ticker in affected_tickers:
_, decision = ta.propagate(
ticker,
datetime.now().strftime("%Y-%m-%d"),
past_context=context,
)
results[ticker] = decision
return results
# 例如:台积电宣布涨价后,分析对芯片股的影响
results = event_impact_analysis(
event_ticker="TSM",
event_description="TSMC announces 20% price increase for advanced nodes",
affected_tickers=["NVDA", "AMD", "INTC", "QCOM"],
)断点续跑:应对长时间分析
分析 20 支股票可能耗时数小时。启用 checkpoint 避免因网络中断而重新开始:
config["checkpoint_enabled"] = True
ta = TradingAgentsGraph(config=config)
# 第一次运行——可能在 Portfolio Manager 阶段中断
try:
_, decision = ta.propagate("NVDA", "2024-05-10")
except Exception:
pass
# 重新运行——自动从上次中断处恢复(无需重新执行分析师和辩论)
_, decision = ta.propagate("NVDA", "2024-05-10")Checkpoint 数据保存在 ~/.tradingagents/cache/checkpoints.db,基于 {ticker}_{date} 作为 thread_id。
与回测框架集成
TradingAgents 依赖 backtrader 但不直接绑定。你可以将 TradingAgents 的决策信号接入任何回测系统:
import backtrader as bt
class TradingAgentsStrategy(bt.Strategy):
"""将 TradingAgents 信号作为策略输入"""
def __init__(self):
self.ta = TradingAgentsGraph(config=config)
self.last_rating = None
self.last_check_date = None
def next(self):
current_date = self.datas[0].datetime.date(0).strftime("%Y-%m-%d")
# 每天或每周运行一次分析(避免频繁调用)
if self.should_analyze(current_date):
_, decision = self.ta.propagate(
self.ticker, current_date
)
self.last_rating = parse_rating(decision)
self.last_check_date = current_date
# 根据评级执行交易
if self.last_rating == "Buy" and not self.position:
self.buy(size=self.calculate_position_size())
elif self.last_rating == "Sell" and self.position:
self.sell(size=self.position.size)成本优化策略
1. 模型降级策略
# 非关键标的用 mini 模型全线
config["deep_think_llm"] = "gpt-5.4-mini"
config["quick_think_llm"] = "gpt-5.4-mini"
# 重要标的才用全尺寸模型
if ticker in ["AAPL", "NVDA", "MSFT"]:
config["deep_think_llm"] = "gpt-5.4"2. 分析师按需启用
# 中低频场景:只用基本面 + 技术面
ta = TradingAgentsGraph(selected_analysts=["market", "fundamentals"])
# 财报季:加开新闻分析
ta = TradingAgentsGraph(selected_analysts=["market", "fundamentals", "news"])3. 辩论轮次动态调整
# 根据上次评级的置信度决定本次辩论深度
last_confidence = get_last_confidence(ticker)
if last_confidence == "Low":
config["max_debate_rounds"] = 3 # 不确定性高,深入辩论
else:
config["max_debate_rounds"] = 1 # 已有把握,快速确认注意事项
数据时效性
TradingAgents 在给定 trade_date 时只会获取该日期及之前的数据,模拟真实交易场景中只有历史数据可用的情况。这意味着:
# 正确:用历史数据做回测
ta.propagate("AAPL", "2024-06-15") # 只获取 2024-06-15 之前的数据
# 正确:用今天的数据做决策
ta.propagate("AAPL", datetime.now().strftime("%Y-%m-%d"))免责声明
TradingAgents 是一个研究和教育工具,不是生产级交易系统。LLM 的输出存在幻觉风险,所有分析结果仅供参考,不构成投资建议。实际交易前请务必:
- 人工复核 Agent 引用的数据是否准确
- 交叉验证多个数据源
- 结合自身的风险偏好和市场判断
小结
TradingAgents 的适用场景覆盖了从快速扫描到深度研究的完整光谱:
| 场景 | 分析师 | 辩论轮次 | 模型 | 单次成本 |
|---|---|---|---|---|
| 快速初筛 | 2个 | 1轮 | mini | ~$0.05 |
| 常规分析 | 4个 | 1-2轮 | mini/标准混合 | ~$0.15 |
| 深度研究 | 4个 | 2-3轮 | 标准 | ~$0.40 |
| 批量回测 | 按需 | 动态 | 按重要性分级 | 可变 |
核心价值不在于替代人类分析师,而在于加速信息收集和初步推理——把几个小时的手动数据汇总和交叉分析缩短到几分钟。