懶人包
- TradingAgents 是 Tauric Research 開源的 Python 框架(Apache-2.0,2026-11-03 查 120,080 星,最新 v0.7.1),讓分析師、多空研究員、交易員、風控與投資組合經理等角色用 LangGraph 開會,最後給出五級評等。
- 安裝只要三步:
git clone、Python 3.11 以上建虛擬環境、pip install .;我在 Windows 11 + Python 3.11.9 裝完,tradingagents.__version__回 0.7.1。- 沒有 API key 也能跑:框架支援
openai_compatible端點,我寫了 173 行的轉接程式把請求轉給claude -p,扣的是 Claude 訂閱方案的用量。- 台股直接用 Yahoo Finance 代號
2330.TW;一次分析約 3.5 到 4 分鐘、15 到 16 次 LLM 呼叫、約 13 到 15 萬輸入 token。- 同一檔台積電跑兩次,結論從 Underweight(減碼)翻成 Overweight(加碼):第一次基準日在過去,框架的防前視機制擋掉了所有財報;第二次拿到財報才翻多。
- 適合拿來學多代理人設計、讀多空論點;不適合照評等下單,論文的回測結果表只列 3 檔美股、約 3 個月。
Prism Research 在 IG 發了一篇 TradingAgents 的介紹(2026-10-29),封面寫著「GitHub 11 萬星的開源 AI 交易團隊」,要看安裝教學得先留言「分析」。我沒有留言,直接照 GitHub README 裝起來,接上自己的 Claude 訂閱,對台積電跑了兩次。
這篇是完整過程:怎麼裝、怎麼接模型、怎麼跑台股,以及兩次結論為什麼剛好相反。
TradingAgents 是什麼?
TradingAgents 是 Tauric Research 開源的多代理人交易分析框架,配套論文是 arXiv 2412.20138。它照交易公司的分工設計角色,每個角色是一個 LLM 呼叫,用 LangGraph 串成固定流程:
| 階段 | 角色 | 產出 |
|---|---|---|
| 1 分析 | 市場、情緒、新聞、基本面分析師(可自選) | 各自一份報告,並行產生 |
| 2 研究 | 多方、空方研究員辯論,研究經理裁決 | 投資計畫 |
| 3 交易 | 交易員 | 交易提案(進場區間、停損) |
| 4 風控 | 激進、保守、中立三位辯論 | 風險意見 |
| 5 決策 | 投資組合經理 | Buy/Overweight/Hold/Underweight/Sell |
quick_think_llm 給分析師、研究員、交易員和風控,deep_think_llm 給兩位經理。每個角色的報告都會存成 Markdown,跑完可以逐份讀,這是它比「丟一句提示詞問 AI 該不該買」有價值的地方。
我在 2026-11-03 用 gh api 查到的 repo 狀態:120,080 星、22,969 fork、Apache-2.0,最新版本 v0.7.1(2026-10-27 發布)。IG 封面寫的 11 萬星是貼文當時的數字。
安裝前要準備什麼?
| 項目 | 需求 | 我的環境 |
|---|---|---|
| 作業系統 | 不限,官方另有 Docker | Windows 11 |
| Python | 3.11 以上(README 範例用 3.13) | 3.11.9 |
| git | 用來 clone repo | 已安裝 |
| LLM | API key、ChatGPT 訂閱、Ollama 或任何 OpenAI 相容端點,四選一 | Claude 訂閱 + 自寫轉接程式 |
| 選配資料 key | FRED_API_KEY(免費,總經資料)、ALPHA_VANTAGE_API_KEY | 都沒設 |
TradingAgents 怎麼安裝?
照 README 的 Installation 段落,我在 Windows 的 Git Bash 實際跑的指令如下。python 要是 3.11 以上;裝了多個版本時,Windows 可以用 py -3.11 -m venv .venv 指定:
git clone --depth 1 https://github.com/TauricResearch/TradingAgents.git
cd TradingAgents
python -m venv .venv
source .venv/Scripts/activate # macOS / Linux 改成 source .venv/bin/activate
pip install .
2026-11-03 我在全新目錄重跑一次這組指令,clone 加 pip install 共 5 分 9 秒。裝完先確認版本:
python -c "import tradingagents; print(tradingagents.__version__)"
0.7.1
README 也提供 conda、uv 和 Docker 三種裝法:
# Docker:先把 API key 填進 .env
cp .env.example .env
docker compose run --rm tradingagents
要接哪個 LLM?四種方式比較
| 方式 | 設定 | 費用 | 我的結果 |
|---|---|---|---|
| API key | export OPENAI_API_KEY=...,另支援 Anthropic、Google、DeepSeek 等十多家 | 按 token 計費 | 手上的 OpenAI key 回 401,已失效 |
| ChatGPT 訂閱 | tradingagents login chatgpt,在瀏覽器授權 | 算進 Plus/Pro 方案用量 | 沒試,需要人在瀏覽器前授權 |
| Ollama 本機模型 | llm_provider: "ollama" | 免費 | 本機 Ollama 啟動失敗(Unable to init instance) |
| OpenAI 相容端點 | llm_provider: "openai_compatible" + backend_url | 看端點 | 採用:自寫轉接程式接 claude -p |
用 Claude 訂閱跑 TradingAgents:173 行轉接程式
TradingAgents 會對 backend_url 發 OpenAI 格式的 /v1/chat/completions 請求,其中分析師要呼叫工具抓股價、財報,所以請求會帶 function calling。我寫的 claude_relay.py 做三件事:
- 把 OpenAI 的 messages 攤平成一段對話文字,工具定義塞進 system prompt。
- 要求模型只回一個 JSON:要呼叫工具就回
{"tool_calls": [...]},要回答就回{"content": "..."}。 - 把這個 JSON 轉回 OpenAI 的
tool_calls或一般回應格式。
cmd = ["claude", "-p", "--model", MODEL, "--tools", "", "--strict-mcp-config",
"--no-session-persistence", "--setting-sources", "", "--output-format", "json",
"--system-prompt", system_text]
proc = subprocess.run(cmd, input=prompt_text, capture_output=True, text=True,
encoding="utf-8", env=env, timeout=CLAUDE_TIMEOUT_SEC)
解析 JSON 時要加 strict=False。第一次跑完,市場分析報告開頭殘留了 {"content": ...} 外殼,原因是模型在 JSON 字串裡輸出真的換行字元,json.loads 預設會拒絕,程式就退回把整段原文當答案。改成 json.loads(..., strict=False) 後,第二次跑的報告沒有殘留。
obj = json.loads(cleaned[start:end + 1], strict=False)
轉接程式起在本機,再讓 TradingAgents 指過去:
python claude_relay.py 8765 sonnet
# claude relay on http://127.0.0.1:8765/v1 model=sonnet
這個做法扣的是 Claude 訂閱方案的用量,不另外產生 API 帳單。代價是轉接程式不支援串流,每次呼叫都要等 claude -p 整段跑完。同樣的轉接思路我之前也用在 MemPalace 接 claude -p。
怎麼用 TradingAgents 分析台股?
README 寫的是「Yahoo Finance 支援的市場都能用,代號要帶交易所後綴」,列出的例子沒有台股,但台股在 Yahoo Finance 的格式就是 代號.TW(上市)。台積電是 2330.TW,我實測可以跑。
我用 Python 呼叫,選三位分析師,辯論各 1 輪,輸出繁體中文:
from tradingagents.graph.trading_graph import TradingAgentsGraph
from tradingagents.default_config import DEFAULT_CONFIG
cfg = DEFAULT_CONFIG.copy()
cfg.update({
"llm_provider": "openai_compatible",
"backend_url": "http://127.0.0.1:8765/v1",
"quick_think_llm": "claude-sonnet-via-relay",
"deep_think_llm": "claude-sonnet-via-relay",
"max_debate_rounds": 1,
"max_risk_discuss_rounds": 1,
"output_language": "Traditional Chinese",
"results_dir": "./results",
})
ta = TradingAgentsGraph(selected_analysts=["market", "news", "fundamentals"], config=cfg)
state, decision = ta.propagate("2330.TW", "2026-11-03")
print(decision)
ta.save_reports(state, "2330.TW")
不想寫程式也可以用 CLI。README 的非互動範例是用旗標帶參數:
tradingagents --ticker NVDA --date 2026-09-23 --analysts market,news,fundamentals --save --no-show
save_reports() 會照階段輸出資料夾,另附一份 complete_report.html:
2330.TW_20261103_111143/
├── 1_analysts/ market.md news.md fundamentals.md
├── 2_research/ bull.md bear.md manager.md
├── 3_trading/ trader.md
├── 4_risk/ aggressive.md conservative.md neutral.md
├── 5_portfolio/ decision.md
├── complete_report.md
└── complete_report.html
實測:台積電跑兩次,結論為什麼相反?
兩次設定完全相同,只差分析基準日。數字來自執行 log 與轉接程式記下的每次呼叫紀錄:
| 第 1 次 | 第 2 次 | |
|---|---|---|
| 分析基準日 | 2026-10-30(收盤 2370) | 2026-11-03(收盤 2325) |
| 耗時 | 203.3 秒 | 232.5 秒 |
| LLM 呼叫/工具呼叫 | 16/27 | 15/24 |
| 輸入/輸出 token | 約 134k/23k | 約 153k/27k |
| 基本面資料 | 無,全部被擋 | 有:2026Q3 營收年增約 51%、毛利率 66.4% |
| 最終評等 | Underweight(減碼 15–20%) | Overweight(分批小量加碼) |
技術面兩次都偏空:股價在 10 EMA 與 50 SMA 之下、MACD 柱狀圖為負。差別在基本面。
第 1 次的基本面分析師回報「五項基本面工具全部回傳資料被保留(withheld)」。原因在 tradingagents/dataflows/date_window.py 的防前視機制:當基準日是過去,Yahoo 這類只用報表期間標日期、沒有申報日的資料源,框架無法確定那天財報是否已經公開,所以整份不給。美股可以改走 SEC EDGAR 的實際申報版本;2330.TW 這次沒有走到這條路,五項工具全被擋。
第 2 次基準日是當天,財報照常讀到。投資組合經理的結論直接寫「基本面證據明顯勝出」,把評等翻成加碼。
這個機制本身是對的,它防止模型讀到「當時還不知道的數字」。但結果是:同一套框架、同一檔股票,評等可以只因為一類資料有沒有進來就整個翻面。只看最後那個字,會漏掉這件事;把五個資料夾的報告讀過一遍才看得出來。
兩份完整報告我做成了一個網頁:TradingAgents 台積電實測成果頁。
跑的時候會踩到哪些坑?資料缺口一覽
兩次執行都出現下面三個訊息,框架會換下一個資料源或略過,不會中斷:
| 訊息 | 影響 | 處理方式 |
|---|---|---|
yfinance 新聞回 YFDataException | 新聞分析師拿不到 Yahoo 新聞 | 換其他新聞資料源,或接受新聞報告較薄 |
Polymarket 回 self-signed certificate | 預測市場資料連不上 | 憑證鏈出現自簽憑證,通常是網路環境或代理造成,我沒有再排查 |
FRED_API_KEY 沒設定 | 沒有總經數據(利率等) | 到 FRED 申請免費 key,設成環境變數 |
decision。
TradingAgents 的建議能拿來下單嗎?
我的判斷是不行,原因有三個:
- 論文的回測範圍小。論文的回測期間是 2024-01-01 到 2024-03-29,結果表列的是 AAPL、GOOGL、AMZN 三檔。AAPL 的 Sharpe ratio 8.21,作者在註腳自己寫「最高的 Sharpe ratio 超出我們預期的經驗範圍」。
- 前視偏誤的疑慮。回測期間在 LLM 的訓練資料範圍內,模型可能早就「看過」那段行情。新版框架對資料做了防前視處理,但模型本身的知識擋不掉。
- 我的實測就是反例。兩次相隔兩個交易日,評等從減碼翻到加碼,主因是資料有沒有進來,不是行情變了。
- 學多代理人設計:角色分工、多空辯論、風控辯論、結構化輸出,全部有原始碼和逐角色報告可對照。
- 當成論點檢查清單:多方、空方、保守派風控各自提出的論點整理得不錯,可以拿來檢查自己有沒有漏看什麼。
本文只分享工具安裝與實測過程,不構成任何投資建議。
延伸資源
- TradingAgents GitHub repo:README 的 Installation、Required APIs、CLI Usage 三段就是本文安裝步驟的來源。
- TradingAgents 論文(arXiv 2412.20138):回測期間、結果表與 Sharpe ratio 註腳。
- TradingAgents 台積電實測成果頁:兩次分析的各角色報告原文。
- FRED API key 申請頁:補上總經資料用。
常見問題
TradingAgents 一定要付 API 費嗎?
不一定。它支援 ChatGPT Plus/Pro 訂閱登入、Ollama 本機模型,以及任何 OpenAI 相容端點。我用自寫的轉接程式接 claude -p,扣的是 Claude 訂閱方案的用量。
TradingAgents 可以分析台股嗎?
可以。代號用 Yahoo Finance 格式,上市股票加 .TW,例如台積電是 2330.TW。要注意基準日設在過去時,台股財報會被防前視機制擋掉,基本面報告會是空的。
跑一次 TradingAgents 要多久?
我的設定是三位分析師、辯論各 1 輪、全部角色用 Claude Sonnet,一次 203 到 233 秒,15 到 16 次 LLM 呼叫。分析師越多、辯論輪數越多,時間和 token 都會增加。
為什麼同一檔股票跑兩次結果不一樣?
我的兩次實測差在基本面資料:基準日在過去的那次財報全被擋,只能靠偏空的技術面,所以給減碼;拿到財報的那次翻成加碼。另外 LLM 輸出本來就有隨機性,就算資料完全相同,兩次的論點和評等也可能不同。