TradingAgents 是 Tauric Research 開源的多代理 LLM 交易研究框架(GitHub 114,387 星、Apache-2.0、Python 撰寫、最新 v0.7.0)。它把「一家交易公司」拆成四個分析師、多空研究員辯論、交易員、風控團隊與投資組合經理,用 LangGraph 串成流程,一行指令就能對指定股票與日期產出完整研究報告。
為什麼需要「多代理」,而不是直接問 GPT 該不該買
如果你曾經拿股票問題去問 LLM,大概遇過這三件事:
- 它會編造事實——給你一個很具體但根本不存在的本益比
- 它沒有立場的張力——你問「該買嗎」,它傾向順著你的語氣回答
- 它不會記得上次錯在哪——同一支股票問十次,得到十份互不相關的樂觀報告
TradingAgents 的設計就是針對這三點。它不讓一個模型同時扮演所有角色,而是把「看財報的人」、「讀新聞的人」、「看線圖的人」、「唱多的人」、「唱空的人」、「負責風控的人」拆開,讓它們的結論互相打架,最後由投資組合經理裁決。
這個設計背後的假設很直白:一個模型很難同時是樂觀者與懷疑者,但兩個模型可以。
一表看懂:TradingAgents 基本資料
| 項目 | 內容 |
|---|---|
| 專案 | TauricResearch/TradingAgents |
| 定位 | 多代理 LLM 金融交易研究框架 |
| GitHub 星數 | 114,387(2026-10-25 以 GitHub API 查詢) |
| Fork 數 | 22,120 |
| 授權 | Apache-2.0 |
| 語言 | Python(需 3.11 以上,官方範例用 3.13) |
| 最新版本 | v0.7.0(2026-10) |
| 建立時間 | 2024-12-28;最後推送 2026-10-16 |
| 底層框架 | LangGraph |
| 論文 | arXiv 2412.20138(作者:Yijia Xiao、Edward Sun、Di Luo、Wei Wang) |
| 官方網站 | https://TradingAgents-AI.github.io |
| 授權範圍 | 可商用(Apache-2.0),但官方定位是研究用途,不是投資建議 |
星數這種東西會浮動,而且 GitHub 網頁顯示的常是快取值。上面這個數字是 API 直接查的,如果你要引用,建議自己重查一次。
架構拆解:五個團隊、一條決策鏈
TradingAgents 的流程不是「問答」,而是「開會」。整條鏈是這樣的:
| 階段 | 角色 | 做什麼 | 產出 |
|---|---|---|---|
| ① 分析 | 基本面分析師 | 讀公司財報與績效指標,找內在價值與紅旗 | 基本面報告 |
| ① 分析 | 情緒分析師 | 彙整新聞標題、StockTwits、Reddit 討論成單一情緒讀數 | 情緒報告 |
| ① 分析 | 新聞分析師 | 監控全球新聞與宏觀指標,判斷事件對市場的衝擊 | 新聞報告 |
| ① 分析 | 技術分析師 | 用 MACD、RSI 等技術指標找型態、預測走勢 | 技術報告 |
| ② 辯論 | 多方研究員 vs 空方研究員 | 對①的四份報告做批判性辯論,權衡潛在報酬與風險 | 研究共識 |
| ③ 決策 | 交易員(Trader) | 綜合分析師與研究員的結論,決定進出時機與部位大小 | 交易提案 |
| ④ 風控 | 風控團隊 | 評估波動度、流動性等風險因子,提出調整建議 | 風控報告 |
| ⑤ 裁決 | 投資組合經理 | 核准或駁回提案 | 最終決策訊號 |
| ⑥ 執行 | 模擬交易所 | 通過的話送單到模擬交易所執行 | 模擬成交紀錄 |
有一個細節值得注意:README 明寫四個分析師是同時跑(parallel)的,各自用自己的工具,等所有報告回來後才進入辯論階段。這是 v0.5.2 之後的改動,目的是縮短分析時間。
另一個關鍵設計是「兩層模型」(quick / deep):
| 模型層 | 服務的對象 | 建議用途 |
|---|---|---|
| quick_think | 分析師、研究員、辯論者、交易員 | 量大、任務明確,用便宜快的模型 |
| deep_think | 研究經理、投資組合經理 | 量少、要綜合判斷,用強的推理模型 |
這兩層還可以分別掛在不同供應商上。README 給的例子是:經理層用 Claude,其餘用 OpenAI。實務上這代表你可以「便宜的跑量、貴的跑關鍵判斷」,是控制成本最有效的一個開關。
安裝:官方指令原文,照貼就好
方式一:本機安裝
git clone https://github.com/TauricResearch/TradingAgents.git
cd TradingAgents
需要 Python 3.11 以上。建立虛擬環境(官方給 conda 與 uv 兩種):
conda create -n tradingagents python=3.13
conda activate tradingagents
或用 uv:
uv venv --python 3.13
source .venv/bin/activate
安裝套件(用 uv 的話是 uv pip install .):
pip install .
方式二:Docker
cp .env.example .env # add your API keys
docker compose run --rm tradingagents
更新 repo 後要重建映像:
docker compose build
Docker 模式下,結果、報告、記憶日誌與快取都存在 tradingagents_data volume。想改存到主機資料夾:
mkdir -p data && TRADINGAGENTS_DATA_DIR=./data docker compose run --rm tradingagents
要用本機 Ollama 模型:
docker compose --profile ollama run --rm tradingagents-ollama
需要哪些 API Key
這是我覺得最值得先看的一段,因為它直接決定你的成本結構。官方支援的供應商非常廣:
export OPENAI_API_KEY=... # OpenAI (GPT)
export GOOGLE_API_KEY=... # Google (Gemini)
export ANTHROPIC_API_KEY=... # Anthropic (Claude)
export XAI_API_KEY=... # xAI (Grok)
export DEEPSEEK_API_KEY=... # DeepSeek
export DASHSCOPE_API_KEY=... # Qwen (international)
export ZHIPU_API_KEY=... # GLM via Z.AI (international)
export MINIMAX_API_KEY=... # MiniMax (global)
export OPENROUTER_API_KEY=... # OpenRouter
export MOONSHOT_API_KEY=... # Kimi (Moonshot)
export GROQ_API_KEY=... # Groq
export NVIDIA_API_KEY=... # NVIDIA NIM
export FRED_API_KEY=... # FRED macro data (free, optional)
export ALPHA_VANTAGE_API_KEY=... # Alpha Vantage
export TYPESAFE_API_KEY=... # Jev social-post screening (optional)
其中兩個是免費且建議加上的:
- FRED_API_KEY:宏觀資料(免費)
- SEC EDGAR:不需要 key、不需要帳號,美國公司財報直接讀
如果你是 ChatGPT Plus / Pro 訂閱者,v0.7.0 新增了一條路:直接用自己的訂閱額度跑,不用 API key。
tradingagents login chatgpt
登入資訊存在 ~/.tradingagents/chatgpt-auth.json,tradingagents logout chatgpt 可撤銷。代價是:跑的量會計入你的方案用量上限,而且該方案不接受 temperature 與 max_tokens 參數。
想用本機模型(完全不出網、不燒 API 費)則設 llm_provider: "ollama",預設端點 http://localhost:11434/v1。任何 OpenAI 相容的伺服器(vLLM、LM Studio、llama.cpp)都可以走 openai_compatible:
config["llm_provider"] = "openai_compatible"
config["backend_url"] = "http://localhost:8000/v1" # vLLM
CLI 用法:互動式與無人值守兩種
互動式
tradingagents # installed command
python -m cli.main # alternative: run directly from source
會出現選單,讓你挑 ticker、分析日期、LLM 供應商、研究深度等。上一次的答案會變成下次的預設值,直接按 Enter 就是沿用。
無人值守(排程/腳本用)
export TRADINGAGENTS_LLM_PROVIDER=openai TRADINGAGENTS_QUICK_THINK_LLM=gpt-6-luna TRADINGAGENTS_DEEP_THINK_LLM=gpt-6-sol
export TRADINGAGENTS_OUTPUT_LANGUAGE=English TRADINGAGENTS_MAX_DEBATE_ROUNDS=1 TRADINGAGENTS_MAX_RISK_ROUNDS=1
tradingagents --ticker NVDA --date 2026-09-23 --analysts market,news,fundamentals --save --no-show
這行是本文最實用的一行。TRADINGAGENTS_OUTPUT_LANGUAGE=English 特別值得注意——如果你想要中文報告,這裡可以改(官方支援多語言輸出)。
常用參數一覽
| 參數 | 作用 | 實務建議 |
|---|---|---|
--ticker | 指定股票代號 | 支援交易所後綴,見下方市場表 |
--date | 分析基準日 | 一定要指定,否則會用到當下資料 |
--analysts | 選哪些分析師(market,news,fundamentals 等) | 只想要技術面就少開幾個,省 token |
--save | 儲存報告 | 建議開,會產出可讀的 HTML |
--no-show | 不自動開瀏覽器 | 排程必開 |
--no-html | 不產出單頁 HTML | 只要 markdown 時用 |
--checkpoint | 啟用斷點續跑 | 長時間跑或怕中斷時用 |
--clear-checkpoints | 跑前清掉所有 checkpoint | 懷疑狀態污染時用 |
--portfolio | 帶入你的實際持倉 JSON | 想讓建議對應真實部位時用 |
--save 會多產出一份 complete_report.html,把整份報告排成單頁、旁邊列章節,可印、可手機讀。這對「把報告丟給主管看」這件事滿方便的。
Python API:把 TradingAgents 塞進你自己的系統
最短的用法只有四行:
from tradingagents.graph.trading_graph import TradingAgentsGraph
from tradingagents.default_config import DEFAULT_CONFIG
ta = TradingAgentsGraph(debug=True, config=DEFAULT_CONFIG.copy())
# forward propagate
state, decision = ta.propagate("NVDA", "2026-09-01")
print(decision)
# the same report tree the CLI saves, under results_dir/reports
ta.save_reports(state, "NVDA")
要調參數的話:
config = DEFAULT_CONFIG.copy()
config["llm_provider"] = "openai"
config["deep_think_llm"] = "gpt-6-sol" # Model for complex reasoning
config["quick_think_llm"] = "gpt-6-luna" # Model for quick tasks
config["max_debate_rounds"] = 2
ta = TradingAgentsGraph(debug=True, config=config)
_, decision = ta.propagate("NVDA", "2026-09-01")
print(decision)
把兩層模型掛到不同供應商:
config["deep_think_provider"] = "anthropic"
config["deep_think_llm"] = "claude-opus-5-5"
帶入真實持倉
預設情況下,代理不知道你手上有什麼,所以建議是寫給「會自己套用到部位上的讀者」。想讓它針對你的實際部位給建議,要傳 portfolio:
from tradingagents.portfolio import PortfolioContext
portfolio = PortfolioContext.model_validate({
"cash": 25000.0,
"currency": "USD",
"positions": [{"ticker": "NVDA", "quantity": 120, "average_price": 150.0}],
})
_, decision = ta.propagate("NVDA", "2026-09-01", portfolio=portfolio)
CLI 版則吃 JSON 檔:tradingagents --portfolio my_book.json。
README 特別強調一個容易搞錯的細節:空 positions 陣列代表「空手」,與「沒有傳 portfolio」是不同的兩件事。 沒傳的情況永遠不會被當成空手。
支援哪些市場(以及台股的未解問題)
README 的說法是「works with any market Yahoo Finance covers, using the exchange-suffixed ticker」,公司識別與 alpha 基準會自動依市場解析。官方列出的範例:
| 市場 | 代號範例 |
|---|---|
| 美股 | AAPL、SPY |
| 港股 | 0700.HK |
| 東京 | 7203.T |
| 倫敦 | AZN.L |
| 印度 | RELIANCE.NS、.BO |
| 加拿大 | .TO |
| 澳洲 | .AX |
| 中國 A 股 | 上海 .SS、深圳 .SZ(例:600519.SS 貴州茅台) |
| 加密貨幣 | BTC-USD、ETH-USD |
注意:官方範例裡沒有台股。 依 Yahoo Finance 的代號規則,台股是 .TW(上市)與 .TWO(上櫃),理論上落在「any market Yahoo Finance covers」的範圍內,但 README 沒有列、我也沒有實測,所以要把它當成「需要自行驗證」的項目,而不是保證可用。如果你要試,第一步就是拿 2330.TW 跑一次 --date 指定到某個過去日期,看基本面資料抓不抓得到——抓不到的話,這個框架對台股就只能用技術面與新聞面。
記憶日誌:它會記得上次錯在哪
這是我認為 TradingAgents 最被低估的功能。記憶日誌預設開啟,位置在 ~/.tradingagents/memory/trading_memory.md。
運作方式是這樣:
- 每次跑完,把當次決策寫進日誌
- 下一次跑的時候,趁分析師還在工作的空檔,去結算「持有期已過」的舊決策
- 結算內容包含:實際報酬(原始報酬,以及相對於該市場基準的 alpha)
- 然後為每筆舊決策生成一段反思
- 投資組合經理會讀同標的的近期決策 + 其他標的的近期教訓
翻成白話:它會回頭檢查自己上次說買是對的還是錯的,並把教訓帶進這次的判斷。 這件事人類分析師會做,多數 LLM 工具不會。
想在不跑分析的情況下單獨結算(例如放在每日排程裡):
ta.settle_all_pending()
回測:一次跑一格沒有意義
一次跑出一個決策,無法判斷這個系統決策得好不好。TradingAgents 提供了 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
兩個設計細節值得知道:
- 每一格的評分基準是相對於該標的所屬市場基準的實質 alpha,不是絕對報酬
- 決策的進場點是「該日期之後的第一個收盤價」,因為一次分析會讀到當天收盤後才發布的新聞。這個設計是為了避免「當天就進場」造成的前視偏誤(look-ahead bias)
還有一個省錢設計:重跑同一組網格時帶 run_id=result.run_id,會跳過已經跑過的格子,中斷的掃描可以續跑。
五個必須知道的限制(官方自己寫的)
這一節是本文最該讀的部分。以下五點全部來自 README 或官方說明,不是我自己的推測:
① 兩次跑同一支股票,結果會不一樣
“TradingAgents is LLM-driven, so two runs of the same ticker and date can differ. This is expected for a research tool built on language models, not a defect.”
變異有三個來源:模型取樣本身不確定(推理型模型變異最大,因為它的內部推理也在取樣)、即時資料會動(今天跑和上週跑,看到的新聞與社群貼文不同)、以及溫度設定。
官方緩解方式:把 temperature 調低。但它也老實說了——目前精選的模型都是推理優先,大多忽略 temperature。想要更穩定,就得換成非推理型模型。這是個誠實但令人不太舒服的答案。
已經修掉的老問題也值得知道:README 提到早期報告曾出現「不同次跑到不同公司」與「編造價格水準」的狀況,現在靠兩個機制解決——公司身份在跑之前就由 ticker 決定性解析,市場分析師的價格與指標說法必須對齊一個已驗證的資料快照。
② 回測結果不保證能重現
“Backtest results are not guaranteed to match any published figure.”
論文裡的累積報酬、Sharpe、最大回撤,是在論文的實驗條件下量到的。你的模型、溫度、日期區間、資料品質都不一樣,跑出來就不一樣。官方建議把這個框架當成「研究多代理分析的鷹架」,而不是一個有固定可複製報酬的策略。
③ 它是研究工具,不是投資建議
README 與官網都有明確免責:設計目的是研究用途,交易績效會因底層模型、溫度、交易期間、資料品質等因素而變動,不構成財務、投資或交易建議。
④ 這不是「全自動交易機器人」
它下單到的是模擬交易所(simulated exchange)。框架裡沒有任何券商 API 串接。想接實盤你得自己寫,而且要自己承擔所有風險與法規問題。
⑤ 我沒有實測的部分(誠實揭露)
為了避免把別人的文件寫成自己的測試心得,這裡明列本文沒有做的事:
- 沒有實際安裝並跑完一次完整分析(需要 API key 與實際 token 費用,本文以官方 README、arXiv 論文摘要與 GitHub API 資料為依據)
- 沒有實測台股
.TW/.TWO(官方範例未列,見上方說明) - 沒有驗證論文中的績效數字,也沒有重跑回測
- 沒有比較過各供應商的實際花費——README 不公布單次跑的 token 用量,而一次完整分析會經過 4 個分析師、多輪辯論、交易員、風控與經理,呼叫次數是數十次量級,實際成本強烈取決於你選的模型與辯論輪數
成本怎麼估(給不想要帳單驚喜的人)
官方沒有公布單次分析的成本,但架構本身就給了省錢的槓桿:
| 槓桿 | 做法 | 影響 |
|---|---|---|
| 減少分析師 | --analysts market,news 只開兩個 | 直接砍掉分析階段的呼叫量 |
| 降低辯論輪數 | TRADINGAGENTS_MAX_DEBATE_ROUNDS=1、MAX_RISK_ROUNDS=1 | 這兩輪是最容易失控的地方 |
| 分層用模型 | quick 層掛便宜模型、deep 層才用強模型 | 通常是成本降最多的一招 |
| 用訂閱額度 | tradingagents login chatgpt | 不另計 API 費,但吃方案上限 |
| 完全本機 | Ollama + 開源模型 | 零 API 費,但品質與速度要自己接受 |
我的建議是:第一次跑先關掉一半分析師、辯論只跑一輪,用最便宜的模型確認流程通不通,再一次一項加回去。 反過來做(一開始就全開最強模型)很容易在還沒看懂報告之前就先被帳單嚇到。
誰適合、誰不適合
| 適合 | 不適合 |
|---|---|
| 想研究「多代理系統怎麼協作」的工程師 | 想要一個能直接接券商、自動下單的機器人 |
| 已經有交易想法,想找一個「唱反調的系統」來壓力測試 | 期待它告訴你明天該買什麼 |
| 想做 LLM 應用的 side project,需要一個成熟的多代理範例 | 不能接受付 API 費用或等報告跑完 |
| 在研究 agent 的記憶機制、辯論機制、風控機制 | 需要嚴格可重現的回測(LLM 本質上不保證) |
| 想學 LangGraph 怎麼串複雜的有狀態流程 | 完全沒有程式基礎 |
如果你屬於右邊那一欄,這篇文章的價值可能只剩下「知道有這個東西」——那也夠了,至少你不會花三個週末安裝它然後失望。
站內延伸閱讀
資料來源與查證方法
- GitHub repo:TauricResearch/TradingAgents(README 全文,v0.7.0 版本說明)
- GitHub API 資料:
api.github.com/repos/TauricResearch/TradingAgents,2026-10-25 查詢(星數 114,387、fork 22,120、Apache-2.0、最後推送 2026-10-16) - 論文:TradingAgents: Multi-Agents LLM Financial Trading Framework(arXiv 2412.20138,q-fin.TR)
- 官方網站:https://TradingAgents-AI.github.io
- 官方免責聲明:https://tauric.ai/disclaimer/
查證說明:本文的安裝指令、CLI 參數、Python 範例與限制說明全部取自官方 README 原文,未經改寫。星數與授權以 GitHub API 為準(網頁顯示值可能是快取)。所有「未實測」項目已在第 ⑤ 點明確列出,不與官方文件混淆。
⚠️ 本文為工具教學與技術研究整理,不構成任何投資建議。TradingAgents 官方定位為研究框架,下單對象為模擬交易所,其回測與論文績效不保證重現。實際投資決策請自行判斷並承擔風險。
