TradingAgents 评测:把一家「LLM 交易公司」装进 Python 包,多空研究员先吵架再下单
你让大模型「分析一下 NVDA 该不该买」。单轮问答给你一段流畅的分析,但谁去质疑它?谁负责风险?谁在两周后复盘这笔决策实际赚没赚?
TradingAgents 是 HKU 的 Tauric Research 实验室开源的多智能体交易框架(arXiv 2412.20138)。它的思路不是「让 LLM 更聪明」,而是把一家交易公司的组织结构直接复刻成 Agent 图:四类分析师并行干活 → 多空研究员对辩 → Trader 整合出买卖建议 → 风控团队和基金经理终审 → 订单进模拟交易所执行。全程 LangGraph 编排,CLI 一行跑完。
截至今天,仓库有 117,473 Star、约 1.8 万 Fork,Python 编写,MIT 协议,最新版 v0.7.1(2026-10 发布),今天挂在 GitHub Trending 上(单日 +1,067),被 trendshift 标记为「#1 Repository of the Day」。
工具简介
TradingAgents 是一个面向研究场景的多智能体金融交易框架。它不接真实交易,不承诺收益,也不提供投资建议——它提供的是一个可反复运行、可回测、可复盘的「LLM 交易公司」,用来研究多角色 LLM 协作做市场判断这件事本身。
- GitHub:https://github.com/TauricResearch/TradingAgents
- 论文:https://arxiv.org/abs/2412.20138
- Discord:https://discord.com/invite/hk9PGKShPK
- 发布方:Tauric Research(HKU Data Science Lab)
- 最新稳定版:v0.7.1(2026-10),v0.7.0 起支持用自己的 ChatGPT Plus/Pro 订阅跑
- Star / Fork:117,473 / ~18k
- 主语言:Python(3.11+),基于 LangGraph
- 协议:MIT
- 安装:
pip install .(源码)或 Docker Compose;uv venv --python 3.13可替代 conda - 运行要求:任意 LLM API key(OpenAI / Anthropic / Google / xAI / DeepSeek / Qwen / GLM / MiniMax / OpenRouter / Groq / Mistral / Kimi / NVIDIA NIM / Azure / Bedrock / Ollama 本地 / 任意 OpenAI 兼容端点),或 ChatGPT Plus/Pro 订阅登录
- 市场覆盖:Yahoo Finance 全市场——美股、港股(
0700.HK)、日股(7203.T)、A 股(600519.SS)、印加澳,以及加密货币(BTC-USD)
核心功能
1. 复刻交易公司的「组织架构图」,不是单体 Agent
整个框架是一张 LangGraph 状态机,角色分工和真实卖方/买方机构高度对应:
| 团队 | Agent | 职责 |
|---|---|---|
| 分析师团队 | Fundamentals Analyst | 读财报与财务指标,找内在价值与红旗 |
| Sentiment Analyst | 聚合新闻头条、StockTwits、Reddit 成单一情绪读数 | |
| News Analyst | 盯全球新闻与宏观指标(可选接 FRED、Polymarket) | |
| Technical Analyst | MACD、RSI 等技术指标找交易形态 | |
| 研究员团队 | Bullish / Bearish Researcher | 成对评估分析师结论,结构化辩论权衡收益与风险 |
| 交易执行 | Trader | 综合全部报告决定交易时机与幅度,价格有数据快照 grounding |
| 风控与终审 | Risk Management Team + Portfolio Manager | 评估波动、流动性,批准后订单送进模拟交易所 |
关键设计:四类分析师并行执行(v0.5.2 起),等所有报告齐了才开辩论——研究开销是加法不是乘法。两个「思考档位」的模型可以跑在不同 provider 上(v0.6.0 起):分析师和研究员用便宜的 quick 模型,经理级角色用贵的 deep 模型,比如研究员跑 GPT、风控经理跑 Claude。
2. Point-in-time 完整性:「2010 年的运行读不到 2012 年才披露的数字」
这是这个仓库最有工程含量的部分,也是多数 LLM 交易研究容易翻车的地方。v0.4.0 起,整个数据链路做了一轮 look-ahead 修复:
- 美国公司财报走 SEC EDGAR,按「上报日」而非「覆盖期」取数。官方例子很直白:Apple 2008 年总资产当初报的是 39.6B,2010 年 restatement 改成了 36.2B——一个日期落在 2008–2010 之间的运行,读到的就是 39.6B,restated 后的数字不会出现。EDGAR 免账号、免 key。
- 未上市即未提供:财年内结束但还没上报的季度不返回,Q4 单独上报前只藏在年报里,框架直接报 unavailable 而不是「推导」。
- 非美公司财报走 Yahoo Finance,但 Yahoo 按覆盖期而非发布期记录日期,无法证明某历史日期时哪些数字已公开——所以过去日期的运行会被明确告知这些财报被 withheld,宁可缺数据也不造假数据。
- FRED 宏观、社交媒体情绪、决策日志全部过同一套 point-in-time 过滤(v0.4.0/v0.5.0)。
- v0.7.1 修掉了一个「模型日期可能读到运行日之后发布的文件」的隐患。
一句话:它把「时间旅行作弊」在数据层堵死了,这是拿 LLM 做多期研究的人最该检查的一环。
3. 记忆日志:决策会在下一次运行时「自动结算」
记忆日志默认开启,跑完的每次决策追加到 ~/.tradingagents/memory/trading_memory.md。更关键的是结算机制:下一次运行某只股票时,框架会把持有期已到期的历史决策逐条结算——拉取实际收益(原始收益 + 相对该市场地区基准的 alpha),生成一段反思。Portfolio Manager 会先读同 ticker 的近期决策和跨 ticker 的教训,再开始新一轮分析。
- 只想结算不跑分析:
ta.settle_all_pending() - v0.7.1 起结算只在最终收盘价上计分,长假跨期的持仓也会正常结算
- 结算失败不阻塞运行,但报告里会写明
相当于给这套 LLM 系统装了一个「交易日志 + 复盘」的习惯,而不是一批互相孤立的问答。
4. 网格回测:一次运行只证明不了什么,一片格子才说明问题
run_backtest 在「ticker × 日期」网格上重复整条流水线,用独立的记忆日志评分(不污染你自己的日志):
from tradingagents.backtest import iter_grid, run_backtest, summarize
dates = iter_grid("2026-06-01", "2026-08-01", every_n_days=7)
result = run_backtest(["NVDA", "AAPL"], dates, config, selected_analysts=["market", "news"])
print(summarize(result).render())
CLI 等价:tradingagents backtest NVDA,AAPL --start 2026-06-01 --end 2026-08-01 --every 7
v0.7.0 起的计分规则是按决策日之后的第一个收盘价入场——因为运行日当天读到的是收盘后发布的新闻,这个细节直接决定了回测不掺「偷看未来」的水分。run_id 支持断点续跑:中途中断的网格重新执行时跳过已完成的格子。
5. 全本地、全订阅、全企业,provider 随便挑
v0.7.0 之后它支持用你自己的 ChatGPT Plus/Pro 订阅替代 API key:tradingagents login chatgpt 走浏览器 OAuth 落到 127.0.0.1 回调,凭据存 ~/.tradingagents/chatgpt-auth.json,注意订阅模式不吃 temperature / max_tokens。其他路径:
- 本地模型:Ollama(
llm_provider: "ollama"),支持远程ollama-serve - 任意 OpenAI 兼容端点:vLLM、LM Studio、llama.cpp、自建 relay,
llm_provider: "openai_compatible"+backend_url - 企业:Azure OpenAI、AWS Bedrock(
pip install ".[bedrock]") - 可选的 Jev 社交帖筛选(
TYPESAFE_API_KEY):情绪分析师读 StockTwits/Reddit 前先过一道「是否真的在谈这家公司」,并按立场(bullish/bearish/neutral/unclear)计数
适用人群
- 量化研究者 / 学术团队:多智能体 LLM 做市场判断的 baseline 框架,有 paper 有 reproducible 路径,point-in-time 完整性直接解决了 LLM 交易研究里最常见的「未来函数」质疑
- 有回测习惯的个人研究者:
run_backtest网格 + 记忆日志结算的组合,是目前 LLM 类工具里少见地把你逼着回答「这套系统长期到底对不对」的 - 想白嫖 LLM 算力的用户:ChatGPT Plus/Pro 订阅 + Ollama 本地模型两条路都不额外付 API 账单
- 非美市场投资者:港股、日股、A 股、印度、加密货币都覆盖,alpha 基准按市场地区自动解析(v0.5.0 起)
- A 股场景:
600519.SS这类带交易所后缀的 ticker 直接可用,基本面数据走 EDGAR 之外降级到 Yahoo 链路(注意第 2 点的 withheld 限制)
不太适合:想要「买入即执行、自动下单」实盘的人(它只连模拟交易所)、想要「固定可复现收益曲线」的人(官方明说 LLM 采样和实时数据源决定了结果不可逐字节复现,框架是研究脚手架不是策略)、以及不想配一堆 API key 想「装完就跑」的人——provider 选项多到需要自己挑。
与同类工具对比
| 维度 | TradingAgents | FinGPT | FinRL | 单 Agent 问答(直接用 ChatGPT/Claude) | 传统策略框架(Zipline/Backtrader) |
|---|---|---|---|---|---|
| Star | 117k | ~3k | ~6k | — | ~2k |
| 定位 | 多智能体 LLM 交易公司(研究) | LLM 金融应用套件 | 强化学习交易 | 一次性分析 | 确定性策略回测 |
| 多角色协作 | 分析师×4 + 多空研究员 + Trader + 风控 + 基金经理 | 无(单 LLM) | 无(RL 单一策略) | 无 | 无 |
| 辩论机制 | 结构化多空对辩,轮数可配 | 无 | 无 | 靠追问 | 无 |
| Point-in-time 数据 | EDGAR 按上报日 + look-ahead 过滤 | 弱 | 无 | 无 | 有(数据层自己做) |
| 决策结算/复盘 | 记忆日志自动结算 alpha | 无 | 回测 | 无 | 回测 |
| 网格回测 | run_backtest,支持断点续跑 | 无 | 训练/测试 | 无 | 核心能力 |
| 真实下单 | 模拟交易所 | 无 | 有接口 | 无 | 对接 broker |
| 本地/订阅模型 | Ollama / ChatGPT 订阅 / OpenAI 兼容 | Ollama | Ollama | 视模型 | 不适用 |
| 适合 | LLM 多智能体交易研究 | LLM 金融 NLP | RL 策略 | 快速判断 | 已验证策略的执行 |
怎么选:想验证「多角色 LLM 辩论」这个研究问题本身,TradingAgents 是当下工程完成度最高的开源实现(v0.7.x 的数据完整性和结算机制是同类产品里没有的);想训一个 RL 交易策略,FinRL 更对口;已经有确定性策略只想找回测执行引擎,Backtrader/Zipline 足够,不需要 LLM;只是「帮我看看这只股票」,直接开个对话框成本最低——TradingAgents 一跑就是十几个 LLM 调用加多轮辩论,别拿它当搜索引擎。
它和本站评测过的 OpenShell 是同一代「Agent 密集」基建的另一面:OpenShell 管的是「Agent 能被允许碰什么」,TradingAgents 是「一群 Agent 分工干活」的范例。真要接实盘前,把风控那层单独搬出来用 OpenShell 的思路做隔离,是合理的组合。
如何使用
第 1 步:装环境
git clone https://github.com/TauricResearch/TradingAgents.git
cd TradingAgents
uv venv --python 3.13
source .venv/bin/activate
uv pip install .
或者 Docker:cp .env.example .env(填 key)后 docker compose run --rm tradingagents;本地模型用 docker compose --profile ollama run --rm tradingagents-ollama。
第 2 步:配 key,至少一个
export OPENAI_API_KEY=... # 或 ANTHROPIC_API_KEY / GOOGLE_API_KEY / DEEPSEEK_API_KEY ...
不想付 API 账单:CLI 里选 Subscription 然后 tradingagents login chatgpt,浏览器里完成登录即可。
第 3 步:交互式跑第一只股票
tradingagents
选 ticker(支持 0700.HK、600519.SS、BTC-USD)、分析日期、provider、研究深度。上次的答案会变成默认值直接回车。想跑本地模型不花钱,CLI 里选 Ollama 加 Custom model ID。
第 4 步:无交互跑(脚本 / 定时任务 / CI)
export TRADINGAGENTS_LLM_PROVIDER=openai \
TRADINGAGENTS_QUICK_THINK_LLM=gpt-6-luna \
TRADINGAGENTS_DEEP_THINK_LLM=gpt-6-sol
export TRADINGAGENTS_OUTPUT_LANGUAGE=Chinese TRADINGAGENTS_MAX_DEBATE_ROUNDS=1
tradingagents --ticker NVDA --date 2026-09-23 --analysts market,news,fundamentals --save --no-show
没有终端环境下缺答案会在开跑前停下并指明缺哪个 flag 或变量——这是专门为无人值守场景设计的失败方式。报告默认存 results_dir/reports,complete_report.html 可开浏览器/手机/打印。
第 5 步:带上你自己的持仓
from tradingagents.portfolio import PortfolioContext
portfolio = PortfolioContext.model_validate({
"cash": 25000.0, "currency": "USD",
"positions": [{"ticker": "NVDA", "quantity": 120, "average_price": 150.0}],
})
CLI 等价:tradingagents --portfolio my_book.json。注意区分三态:不传 portfolio(分析师按「读者自己持仓」写建议)、传空 positions(明确的空仓)、传实际持仓(风控和基金经理对着真实账面做判断)。
第 6 步:跑网格回测再下结论
tradingagents backtest NVDA,AAPL --start 2026-06-01 --end 2026-08-01 --every 7
--checkpoint 可让中途中断的运行断点续跑,--clear-checkpoints 重置某 ticker 的历史检查点(存在 ~/.tradingagents/cache/checkpoints/<TICKER>.db)。
报告分析:数据先别进 LLM
分析师读进 LLM 的数据(财报、新闻、社交帖)值得先过一遍再定论。用本站的 JSON 格式化工具 把 results_dir 里的报告 JSON 拉直对齐,核对字段完整性;用 文本差异对比工具 对比两次「同 ticker 不同运行日」的报告,快速定位是哪个数据源变了导致结论漂移(注意社交源永远反映「现在」,不是「分析日」);用 正则测试工具 从记忆日志里筛出「结算失败」或「alpha 为负」的历史决策,比肉眼翻 trading_memory.md 靠谱。
局限与注意事项
- 官方立场:研究框架,不是策略,更不是投资建议:收益取决于模型、温度、数据质量和采样,官方明确「backtest results are not guaranteed to match any published figure」。拿它的回测曲线当「未来收益预测」是用错了工具。
- 不可逐字节复现:即使温度设 0,推理型模型(默认 GPT-6 系)的内部思考链本身被采样;新闻和 StockTwits/Reddit 永远反映当前时刻。想要更紧的可复现性,得显式选非推理模型——README 里专门写了这段,别默认温度 0 就够了。
- 非美公司财报的 point-in-time 是「宁缺勿假」:Yahoo 按覆盖期记录日期,无法证明历史日期的公开状态,所以过去日期的运行会直接 withheld 非美财报和 insider trades。做 A 股 / 港股历史回测时要意识到基本面输入比美股(EDGAR 全量)薄。
- API key 配置面广:支持近 20 种 provider,灵活但意味着环境管理是真实成本——
.env配错、key 过期、Bedrock 缺 IAM 角色,都是常见卡点。 - ChatGPT 订阅模式有限制:不吃
temperature/max_tokens,跑的是你订阅内的配额,跑多了影响日常使用;tradingagents logout chatgpt撤销登录。 - 社交情绪数据质量依赖源:StockTwits/Reddit 不设置 Jev 筛选(
TYPESAFE_API_KEY)时,与目标公司无关的帖子会原样进情绪分析师——官方默认行为是「不筛」,做结论前最好开启并固定版本(TYPESAFE_DEFAULT_MODEL)。 - SEC 请求要带联系人:EDGAR 会拒绝不识别的调用方,默认带项目方占位 UA,官方建议你设
SEC_EDGAR_USER_AGENT="你的名字 你的邮箱"。 - 模拟交易,不接实盘:订单只进内置模拟交易所。真要接 broker,风控层和 Portfolio Manager 的架构可以借鉴,但执行链要自己重写。
总结
推荐指数:★★★★☆(4/5)
TradingAgents 做的事情很聪明:它没有试图让「LLM 炒股」这件事本身变得可预测,而是把「LLM 交易公司」这个研究对象做得足够真实——组织架构图有分析师、有对手盘(多空研究员)、有风控、有终审;数据层堵死了 look-ahead;决策会在下次运行时自动结算 alpha;回测按网格跑且支持断点。这套完整的「研究脚手架」在开源 LLM 金融项目里,目前没有第二个做到 point-in-time + 记忆结算 + 网格回测三件齐全。
扣的那颗星扣在三件事:它明说了「不可复现、不是策略、不是投资建议」,所以别用它当实盘前置;非美市场基本面数据在历史回测里会变薄;20 种 provider 的配置面让「装完就跑」的门槛比同类工具高。
适合谁:做多智能体金融决策研究的研究者、想验证「LLM 辩论是否真的比单模型判断好」的人、有 ChatGPT 订阅想拿来跑量化思路的用户、以及任何在 LLM 交易回测里被「未来函数」坑过、需要一套数据层兜底的人。跑之前先读官方免责声明:它给你的是研究框架,不是收益承诺。