tradingagents-astock-multi-agent-framework

Compare original and translation side by side

🇺🇸

Original

English
🇨🇳

Translation

Chinese

TradingAgents-Astock Multi-Agent Framework

TradingAgents-Astock 多Agent框架

Skill by ara.so — AI Agent Skills collection.
ara.so 提供的Skill — AI Agent技能集合。

Overview

概述

TradingAgents-Astock is a multi-agent investment research framework specifically adapted for Chinese A-share markets. It orchestrates 7 specialized AI analyst agents that generate research reports, engage in bull/bear debates, perform risk assessment, and produce trading decisions. The framework handles A-share specific constraints (T+1 settlement, price limits, minimum lots) and uses free Chinese data sources (mootdx, EastMoney, Sina, THS) instead of Western APIs.
Key Features:
  • 7 specialized analysts (Market, Social, News, Fundamentals, Policy, Hot Money, Lockup)
  • Bull vs Bear research debate system
  • 3-way risk assessment (Aggressive, Conservative, Neutral)
  • A-share trading constraints (T+1, 涨跌停, minimum lots, ST rules)
  • Dual LLM architecture (quick_think + deep_think)
  • Web UI with real-time progress tracking
  • Chinese output with English internal reasoning
TradingAgents-Astock是专门适配中国A股市场的多Agent投资研究框架。它协调7个专业AI分析师Agent生成研究报告、开展多空辩论、进行风险评估并生成交易决策。该框架适配A股特有的约束条件(T+1结算、涨跌停限制、最小交易单位),并使用免费的中文数据源(mootdx、东方财富、新浪、同花顺)而非西方API。
核心特性:
  • 7个专业分析师(市场、舆情、新闻、基本面、政策、游资、限售股)
  • 多空研究辩论系统
  • 三元风险评估(激进型、保守型、中性型)
  • A股交易约束(T+1、涨跌停、最小交易单位、ST规则)
  • 双LLM架构(quick_think + deep_think)
  • 带实时进度追踪的Web UI
  • 中文输出搭配英文内部推理逻辑

Installation

安装

bash
undefined
bash
undefined

Clone the repository

克隆仓库

Install base package (Python >= 3.10)

安装基础包(Python >= 3.10)

pip install -e .
pip install -e .

Optional: Install with Google Gemini support

可选:安装Google Gemini支持

pip install -e ".[google]"
undefined
pip install -e ".[google]"
undefined

Configuration

配置

LLM Provider Setup

LLM提供商设置

Create a
.env
file in the project root with your chosen LLM provider:
bash
undefined
在项目根目录创建
.env
文件,填入所选LLM提供商的密钥:
bash
undefined

MiniMax (Recommended for China, cost-effective)

MiniMax(推荐国内使用,性价比高)

MINIMAX_API_KEY=sk-your-key-here
MINIMAX_API_KEY=sk-your-key-here

DeepSeek

DeepSeek

DEEPSEEK_API_KEY=sk-your-key-here
DEEPSEEK_API_KEY=sk-your-key-here

Zhipu GLM

智谱GLM

ZHIPU_API_KEY=your-key-here
ZHIPU_API_KEY=your-key-here

Alibaba Qwen

阿里通义千问

DASHSCOPE_API_KEY=sk-your-key-here
DASHSCOPE_API_KEY=sk-your-key-here

OpenAI

OpenAI

OPENAI_API_KEY=sk-your-key-here
OPENAI_API_KEY=sk-your-key-here

Anthropic

Anthropic

ANTHROPIC_API_KEY=sk-ant-your-key-here
ANTHROPIC_API_KEY=sk-ant-your-key-here

Kimi (uses Anthropic-compatible API)

Kimi(兼容Anthropic API)

ANTHROPIC_AUTH_TOKEN=your-kimi-token
undefined
ANTHROPIC_AUTH_TOKEN=your-kimi-token
undefined

Graph Configuration Object

图配置对象

python
config = {
    "llm_provider": "minimax",              # Provider: minimax, deepseek, zhipu, qwen, openai, anthropic, google, xai, ollama
    "deep_think_llm": "MiniMax-M2.7",       # Model for Research Manager & Portfolio Manager
    "quick_think_llm": "MiniMax-M2.7-highspeed",  # Model for analysts, researchers, traders
    "output_language": "Chinese",            # Final report language (Chinese/English)
    "backend_url": None,                    # Optional: Custom API endpoint
    "max_debate_rounds": 3,                 # Bull/Bear debate iterations
    "enable_policy_analyst": True,          # A-share specific analysts
    "enable_hotmoney_analyst": True,
    "enable_lockup_analyst": True,
}
python
config = {
    "llm_provider": "minimax",              # 提供商:minimax, deepseek, zhipu, qwen, openai, anthropic, google, xai, ollama
    "deep_think_llm": "MiniMax-M2.7",       # 用于研究经理和投资组合经理的模型
    "quick_think_llm": "MiniMax-M2.7-highspeed",  # 用于分析师、研究员、交易员的模型
    "output_language": "Chinese",            # 最终报告语言(Chinese/English)
    "backend_url": None,                    # 可选:自定义API端点
    "max_debate_rounds": 3,                 # 多空辩论轮次
    "enable_policy_analyst": True,          # 启用A股专属分析师
    "enable_hotmoney_analyst": True,
    "enable_lockup_analyst": True,
}

Core API Usage

核心API使用

Basic Analysis

基础分析

python
from tradingagents.graph.trading_graph import TradingAgentsGraph
python
from tradingagents.graph.trading_graph import TradingAgentsGraph

Initialize with MiniMax

使用MiniMax初始化

config = { "llm_provider": "minimax", "deep_think_llm": "MiniMax-M2.7", "quick_think_llm": "MiniMax-M2.7-highspeed", "output_language": "Chinese", }
ta = TradingAgentsGraph(debug=True, config=config)
config = { "llm_provider": "minimax", "deep_think_llm": "MiniMax-M2.7", "quick_think_llm": "MiniMax-M2.7-highspeed", "output_language": "Chinese", }
ta = TradingAgentsGraph(debug=True, config=config)

Run analysis for stock 688017 on 2026-05-12

对股票688017在2026-05-12进行分析

final_state, decision = ta.propagate("688017", "2026-05-12")
final_state, decision = ta.propagate("688017", "2026-05-12")

Access decision

获取决策结果

print(f"Signal: {decision['signal']}") # BUY, HOLD, or SELL print(f"Confidence: {decision['confidence']}") # 0-100 print(f"Position: {decision['position_size']}") # Suggested position size print(f"Reasoning: {decision['reasoning']}")
undefined
print(f"信号: {decision['signal']}") # BUY, HOLD, 或 SELL print(f"置信度: {decision['confidence']}") # 0-100 print(f"仓位: {decision['position_size']}") # 建议仓位大小 print(f"推理逻辑: {decision['reasoning']}")
undefined

Using DeepSeek

使用DeepSeek

python
config = {
    "llm_provider": "deepseek",
    "deep_think_llm": "deepseek-chat",
    "quick_think_llm": "deepseek-chat",
    "output_language": "Chinese",
}

ta = TradingAgentsGraph(config=config)
final_state, decision = ta.propagate("600519", "2026-05-15")
python
config = {
    "llm_provider": "deepseek",
    "deep_think_llm": "deepseek-chat",
    "quick_think_llm": "deepseek-chat",
    "output_language": "Chinese",
}

ta = TradingAgentsGraph(config=config)
final_state, decision = ta.propagate("600519", "2026-05-15")

Using Anthropic with Kimi Backend

使用Anthropic搭配Kimi后端

python
config = {
    "llm_provider": "anthropic",
    "deep_think_llm": "claude-sonnet-4-6",
    "quick_think_llm": "claude-sonnet-4-6",
    "backend_url": "https://api.kimi.com/coding/",
    "output_language": "Chinese",
}

ta = TradingAgentsGraph(config=config)
final_state, decision = ta.propagate("000001", "2026-05-20")
python
config = {
    "llm_provider": "anthropic",
    "deep_think_llm": "claude-sonnet-4-6",
    "quick_think_llm": "claude-sonnet-4-6",
    "backend_url": "https://api.kimi.com/coding/",
    "output_language": "Chinese",
}

ta = TradingAgentsGraph(config=config)
final_state, decision = ta.propagate("000001", "2026-05-20")

Accessing Individual Analyst Reports

获取单个分析师报告

python
final_state, decision = ta.propagate("688017", "2026-05-12")
python
final_state, decision = ta.propagate("688017", "2026-05-12")

Access 7 analyst reports

获取7份分析师报告

market_report = final_state["market_analyst_report"] social_report = final_state["social_analyst_report"] news_report = final_state["news_analyst_report"] fundamentals_report = final_state["fundamentals_analyst_report"] policy_report = final_state["policy_analyst_report"] hotmoney_report = final_state["hotmoney_analyst_report"] lockup_report = final_state["lockup_analyst_report"]
market_report = final_state["market_analyst_report"] social_report = final_state["social_analyst_report"] news_report = final_state["news_analyst_report"] fundamentals_report = final_state["fundamentals_analyst_report"] policy_report = final_state["policy_analyst_report"] hotmoney_report = final_state["hotmoney_analyst_report"] lockup_report = final_state["lockup_analyst_report"]

Access debate and risk assessment

获取辩论和风险评估结果

bull_research = final_state["bull_researcher_report"] bear_research = final_state["bear_researcher_report"] risk_assessment = final_state["risk_assessment"] trading_plan = final_state["trading_plan"]
undefined
bull_research = final_state["bull_researcher_report"] bear_research = final_state["bear_researcher_report"] risk_assessment = final_state["risk_assessment"] trading_plan = final_state["trading_plan"]
undefined

CLI Commands

CLI命令

Interactive Mode

交互模式

bash
undefined
bash
undefined

Launch interactive CLI

启动交互式CLI

tradingagents
tradingagents

CLI will prompt for:

CLI会提示输入:

- Stock code (e.g., 688017, 600519)

- 股票代码(例如:688017, 600519)

- Analysis date (YYYY-MM-DD)

- 分析日期(YYYY-MM-DD)

- LLM provider selection

- LLM提供商选择

undefined
undefined

Direct Execution

直接执行

bash
undefined
bash
undefined

Analyze with specific parameters

使用指定参数进行分析

tradingagents --stock 688017 --date 2026-05-12 --provider minimax
tradingagents --stock 688017 --date 2026-05-12 --provider minimax

Use different models

使用不同模型

tradingagents --stock 600519 --date 2026-05-15
--provider deepseek
--deep-model deepseek-chat
--quick-model deepseek-chat
tradingagents --stock 600519 --date 2026-05-15
--provider deepseek
--deep-model deepseek-chat
--quick-model deepseek-chat

Enable debug output

启用调试输出

tradingagents --stock 000001 --date 2026-05-20 --debug
undefined
tradingagents --stock 000001 --date 2026-05-20 --debug
undefined

Web UI

Web UI

bash
undefined
bash
undefined

Launch Streamlit web interface

启动Streamlit Web界面

tradingagents-web
tradingagents-web

Alternative

替代方式

streamlit run web/app.py
streamlit run web/app.py
undefined
undefined

Data Source Integration

数据源集成

Available Data Tools

可用数据工具

The framework provides these tools to analysts (all free, no API keys needed):
python
undefined
框架为分析师提供以下工具(均免费,无需API密钥):
python
undefined

Market data (OHLCV, indicators)

市场数据(OHLCV、指标)

get_stock_data(ticker, start_date, end_date) get_indicators(ticker, start_date, end_date)
get_stock_data(ticker, start_date, end_date) get_indicators(ticker, start_date, end_date)

Fundamental data

基本面数据

get_fundamentals(ticker) get_balance_sheet(ticker) get_cashflow(ticker) get_income_statement(ticker)
get_fundamentals(ticker) get_balance_sheet(ticker) get_cashflow(ticker) get_income_statement(ticker)

News and sentiment

新闻与舆情

get_news(ticker, start_date, end_date) get_global_news(start_date, end_date)
get_news(ticker, start_date, end_date) get_global_news(start_date, end_date)

A-share specific

A股专属数据

get_insider_transactions(ticker) # Lockup releases, insider trading
get_insider_transactions(ticker) # 限售股解禁、内幕交易

Dragon-Tiger list data available via get_news

龙虎榜数据可通过get_news获取

undefined
undefined

Data Provider Mapping

数据源映射

Data TypeProviderProtocol
OHLCV K-linesmootdxTCP 7709
PE/PB/Market CapTencent FinanceHTTP
Dragon-Tiger ListEastMoneyHTTP
Lockup ScheduleEastMoneyHTTP
Financial StatementsSina FinanceHTTP
EPS ConsensusTHS (10jqka)HTTP
News FeedCLS.cnHTTP
Sector ClassificationBaidu FinanceHTTP
数据类型提供商协议
OHLCK线mootdxTCP 7709
PE/PB/市值腾讯财经HTTP
龙虎榜东方财富HTTP
限售股时间表东方财富HTTP
财务报表新浪财经HTTP
EPS一致预期同花顺(10jqka)HTTP
新闻资讯CLS.cnHTTP
行业分类百度财经HTTP

Agent Pipeline Architecture

Agent流水线架构

12-Stage Execution Flow

12阶段执行流程

python
undefined
python
undefined

Stage 1-7: Analyst Reports

阶段1-7:分析师报告

stages = [ "market_analyst", # Technical analysis "social_analyst", # Social sentiment "news_analyst", # News and events "fundamentals_analyst", # Financial statements "policy_analyst", # Regulatory policy (A-share specific) "hotmoney_analyst", # Dragon-Tiger list tracking (A-share specific) "lockup_analyst", # Share lockup monitoring (A-share specific) ]
stages = [ "market_analyst", # 技术分析 "social_analyst", # 舆情分析 "news_analyst", # 新闻与事件分析 "fundamentals_analyst", # 财务报表分析 "policy_analyst", # 监管政策分析(A股专属) "hotmoney_analyst", # 龙虎榜追踪(A股专属) "lockup_analyst", # 限售股监控(A股专属) ]

Stage 8: Quality Gate

阶段8:质量校验

Checks if analysts provided sufficient data

检查分析师是否提供了足够的数据

Stage 9-10: Bull/Bear Debate

阶段9-10:多空辩论

Bull and Bear researchers debate up to N rounds

多头和空头研究员进行最多N轮辩论

Stage 11: Research Manager

阶段11:研究经理

Deep-think LLM synthesizes debate into investment plan

深度思考LLM将辩论内容整合为投资方案

Stage 12: Trader + Risk Assessment

阶段12:交易员 + 风险评估

Trader proposes execution plan

交易员提出执行方案

3 risk debaters (Aggressive, Conservative, Neutral) assess

3位风险辩论者(激进型、保守型、中性型)进行评估

Stage 13: Portfolio Manager

阶段13:投资组合经理

Deep-think LLM makes final BUY/HOLD/SELL decision

深度思考LLM做出最终的买入/持有/卖出决策

undefined
undefined

Custom Analyst Configuration

自定义分析师配置

python
undefined
python
undefined

Disable A-share specific analysts

禁用A股专属分析师

config = { "llm_provider": "minimax", "deep_think_llm": "MiniMax-M2.7", "quick_think_llm": "MiniMax-M2.7-highspeed", "output_language": "Chinese", "enable_policy_analyst": False, "enable_hotmoney_analyst": False, "enable_lockup_analyst": False, }
ta = TradingAgentsGraph(config=config)
undefined
config = { "llm_provider": "minimax", "deep_think_llm": "MiniMax-M2.7", "quick_think_llm": "MiniMax-M2.7-highspeed", "output_language": "Chinese", "enable_policy_analyst": False, "enable_hotmoney_analyst": False, "enable_lockup_analyst": False, }
ta = TradingAgentsGraph(config=config)
undefined

A-Share Trading Constraints

A股交易约束

The framework automatically applies A-share market rules:
python
undefined
框架会自动应用A股市场规则:
python
undefined

T+1 Settlement

T+1结算

Cannot sell shares bought today

当日买入的股票无法卖出

Price Limits

涨跌停限制

ST stocks: ±5%

ST股:±5%

Regular stocks: ±10% (or ±20% for ChiNext/STAR)

普通股票:±10%(创业板/科创板为±20%)

Minimum Lot Size

最小交易单位

100 shares (1 lot)

100股(1手)

Must trade in multiples of 100

必须以100股的倍数进行交易

Trading Hours

交易时间

Morning: 09:30-11:30

上午:09:30-11:30

Afternoon: 13:00-15:00

下午:13:00-15:00

Call auction: 09:15-09:25, 14:57-15:00

集合竞价:09:15-09:25、14:57-15:00


These constraints are built into the Trader agent's decision logic.

这些约束已内置到交易员Agent的决策逻辑中。

Common Patterns

常见用法

Batch Analysis

批量分析

python
from tradingagents.graph.trading_graph import TradingAgentsGraph
from datetime import datetime, timedelta

config = {
    "llm_provider": "minimax",
    "deep_think_llm": "MiniMax-M2.7",
    "quick_think_llm": "MiniMax-M2.7-highspeed",
    "output_language": "Chinese",
}

ta = TradingAgentsGraph(config=config)
python
from tradingagents.graph.trading_graph import TradingAgentsGraph
from datetime import datetime, timedelta

config = {
    "llm_provider": "minimax",
    "deep_think_llm": "MiniMax-M2.7",
    "quick_think_llm": "MiniMax-M2.7-highspeed",
    "output_language": "Chinese",
}

ta = TradingAgentsGraph(config=config)

Analyze portfolio of stocks

分析股票组合

stocks = ["600519", "000858", "600036", "601318"] date = "2026-05-15"
results = {} for ticker in stocks: try: final_state, decision = ta.propagate(ticker, date) results[ticker] = decision print(f"{ticker}: {decision['signal']} (confidence: {decision['confidence']})") except Exception as e: print(f"Error analyzing {ticker}: {e}") continue
undefined
stocks = ["600519", "000858", "600036", "601318"] date = "2026-05-15"
results = {} for ticker in stocks: try: final_state, decision = ta.propagate(ticker, date) results[ticker] = decision print(f"{ticker}: {decision['signal']} (置信度: {decision['confidence']})") except Exception as e: print(f"分析{ticker}出错: {e}") continue
undefined

Time Series Analysis

时间序列分析

python
from datetime import datetime, timedelta

ta = TradingAgentsGraph(config=config)
ticker = "688017"
python
from datetime import datetime, timedelta

ta = TradingAgentsGraph(config=config)
ticker = "688017"

Analyze over 5 trading days

分析连续5个交易日

base_date = datetime(2026, 5, 10) signals = []
for i in range(5): analysis_date = (base_date + timedelta(days=i)).strftime("%Y-%m-%d") try: final_state, decision = ta.propagate(ticker, analysis_date) signals.append({ "date": analysis_date, "signal": decision["signal"], "confidence": decision["confidence"], }) except Exception as e: print(f"Error on {analysis_date}: {e}") continue
base_date = datetime(2026, 5, 10) signals = []
for i in range(5): analysis_date = (base_date + timedelta(days=i)).strftime("%Y-%m-%d") try: final_state, decision = ta.propagate(ticker, analysis_date) signals.append({ "date": analysis_date, "signal": decision["signal"], "confidence": decision["confidence"], }) except Exception as e: print(f"{analysis_date}分析出错: {e}") continue

Track signal consistency

追踪信号一致性

print(f"Signal history for {ticker}:") for s in signals: print(f"{s['date']}: {s['signal']} ({s['confidence']}%)")
undefined
print(f"{ticker}的信号历史:") for s in signals: print(f"{s['date']}: {s['signal']} ({s['confidence']}%)")
undefined

Custom LLM Backend

自定义LLM后端

python
undefined
python
undefined

Use local Ollama instance

使用本地Ollama实例

config = { "llm_provider": "ollama", "deep_think_llm": "qwen2.5:32b", "quick_think_llm": "qwen2.5:14b", "backend_url": "http://localhost:11434", "output_language": "Chinese", }
ta = TradingAgentsGraph(config=config) final_state, decision = ta.propagate("600519", "2026-05-15")
undefined
config = { "llm_provider": "ollama", "deep_think_llm": "qwen2.5:32b", "quick_think_llm": "qwen2.5:14b", "backend_url": "http://localhost:11434", "output_language": "Chinese", }
ta = TradingAgentsGraph(config=config) final_state, decision = ta.propagate("600519", "2026-05-15")
undefined

Extracting Structured Data

提取结构化数据

python
final_state, decision = ta.propagate("688017", "2026-05-12")
python
final_state, decision = ta.propagate("688017", "2026-05-12")

Extract key metrics from analyst reports

从分析师报告中提取关键指标

def extract_pe_ratio(fundamentals_report): # Parse PE from report text import re match = re.search(r'PE.*?(\d+.\d+)', fundamentals_report) return float(match.group(1)) if match else None
def extract_lockup_events(lockup_report): # Parse lockup schedule events = [] lines = lockup_report.split('\n') for line in lines: if '解禁' in line: events.append(line.strip()) return events
pe_ratio = extract_pe_ratio(final_state["fundamentals_analyst_report"]) lockup_events = extract_lockup_events(final_state["lockup_analyst_report"])
print(f"PE Ratio: {pe_ratio}") print(f"Upcoming lockups: {lockup_events}")
undefined
def extract_pe_ratio(fundamentals_report): # 从报告文本中解析PE值 import re match = re.search(r'PE.*?(\d+.\d+)', fundamentals_report) return float(match.group(1)) if match else None
def extract_lockup_events(lockup_report): # 解析限售股解禁时间表 events = [] lines = lockup_report.split('\n') for line in lines: if '解禁' in line: events.append(line.strip()) return events
pe_ratio = extract_pe_ratio(final_state["fundamentals_analyst_report"]) lockup_events = extract_lockup_events(final_state["lockup_analyst_report"])
print(f"PE比率: {pe_ratio}") print(f"即将到来的解禁事件: {lockup_events}")
undefined

Troubleshooting

故障排除

API Key Issues

API密钥问题

python
undefined
python
undefined

Verify env vars are loaded

验证环境变量是否加载

import os from dotenv import load_dotenv
load_dotenv() print(f"MINIMAX_API_KEY exists: {bool(os.getenv('MINIMAX_API_KEY'))}")
import os from dotenv import load_dotenv
load_dotenv() print(f"MINIMAX_API_KEY已存在: {bool(os.getenv('MINIMAX_API_KEY'))}")

If still failing, pass key directly (not recommended for production)

如果仍失败,直接传入密钥(不推荐生产环境使用)

config = { "llm_provider": "minimax", "api_key": "sk-your-key-here", # Override env var "deep_think_llm": "MiniMax-M2.7", "quick_think_llm": "MiniMax-M2.7-highspeed", }
undefined
config = { "llm_provider": "minimax", "api_key": "sk-your-key-here", # 覆盖环境变量 "deep_think_llm": "MiniMax-M2.7", "quick_think_llm": "MiniMax-M2.7-highspeed", }
undefined

Data Source Failures

数据源获取失败

python
undefined
python
undefined

Test data connectivity

测试数据连接

from tradingagents.tools.astock_tools import get_stock_data
try: data = get_stock_data("688017", "2026-04-01", "2026-05-01") print(f"Successfully fetched {len(data)} rows") except Exception as e: print(f"Data fetch failed: {e}") # Fallback: Check network, try different date range
undefined
from tradingagents.tools.astock_tools import get_stock_data
try: data = get_stock_data("688017", "2026-04-01", "2026-05-01") print(f"成功获取{len(data)}条数据") except Exception as e: print(f"数据获取失败: {e}") # 备选方案:检查网络,尝试不同日期范围
undefined

Invalid Stock Code

无效股票代码

python
undefined
python
undefined

Validate A-share ticker format

验证A股代码格式

import re
def validate_astock_ticker(ticker): # A-share codes: 6 digits # Shanghai: 600xxx, 601xxx, 603xxx, 688xxx (STAR) # Shenzhen: 000xxx, 001xxx, 002xxx, 003xxx, 300xxx (ChiNext) pattern = r'^(600|601|603|688|000|001|002|003|300)\d{3}$' return bool(re.match(pattern, ticker))
ticker = "688017" if not validate_astock_ticker(ticker): print(f"Invalid ticker: {ticker}")
undefined
import re
def validate_astock_ticker(ticker): # A股代码:6位数字 # 沪市:600xxx, 601xxx, 603xxx, 688xxx(科创板) # 深市:000xxx, 001xxx, 002xxx, 003xxx, 300xxx(创业板) pattern = r'^(600|601|603|688|000|001|002|003|300)\d{3}$' return bool(re.match(pattern, ticker))
ticker = "688017" if not validate_astock_ticker(ticker): print(f"无效代码: {ticker}")
undefined

Rate Limiting

请求速率限制

python
undefined
python
undefined

Add delays for batch analysis

批量分析时添加延迟

import time
ta = TradingAgentsGraph(config=config) tickers = ["600519", "000858", "600036"]
for ticker in tickers: final_state, decision = ta.propagate(ticker, "2026-05-15") print(f"{ticker}: {decision['signal']}") time.sleep(5) # 5 second delay between requests
undefined
import time
ta = TradingAgentsGraph(config=config) tickers = ["600519", "000858", "600036"]
for ticker in tickers: final_state, decision = ta.propagate(ticker, "2026-05-15") print(f"{ticker}: {decision['signal']}") time.sleep(5) # 请求间隔5秒
undefined

Debug Mode

调试模式

python
undefined
python
undefined

Enable verbose logging

启用详细日志

ta = TradingAgentsGraph(debug=True, config=config) final_state, decision = ta.propagate("688017", "2026-05-12")
ta = TradingAgentsGraph(debug=True, config=config) final_state, decision = ta.propagate("688017", "2026-05-12")

Inspect intermediate states

查看中间状态

print("Market Analyst Report:") print(final_state["market_analyst_report"]) print("\nBull Research:") print(final_state["bull_researcher_report"]) print("\nBear Research:") print(final_state["bear_researcher_report"])
undefined
print("市场分析师报告:") print(final_state["market_analyst_report"]) print("\n多头研究报告:") print(final_state["bull_researcher_report"]) print("\n空头研究报告:") print(final_state["bear_researcher_report"])
undefined

LLM Response Parsing Errors

LLM响应解析错误

python
undefined
python
undefined

If LLM returns malformed JSON, enable retry logic

如果LLM返回格式错误的JSON,启用重试逻辑

config = { "llm_provider": "minimax", "deep_think_llm": "MiniMax-M2.7", "quick_think_llm": "MiniMax-M2.7-highspeed", "max_retries": 3, # Retry up to 3 times on parse errors "temperature": 0.7, # Lower temperature for more consistent formatting }
ta = TradingAgentsGraph(config=config)
undefined
config = { "llm_provider": "minimax", "deep_think_llm": "MiniMax-M2.7", "quick_think_llm": "MiniMax-M2.7-highspeed", "max_retries": 3, # 解析错误时最多重试3次 "temperature": 0.7, # 降低温度以获得更一致的格式 }
ta = TradingAgentsGraph(config=config)
undefined

Project Structure

项目结构

tradingagents-astock/
├── tradingagents/
│   ├── graph/
│   │   ├── trading_graph.py      # Main TradingAgentsGraph class
│   │   └── nodes.py               # Individual agent node implementations
│   ├── tools/
│   │   ├── astock_tools.py        # A-share data fetching tools
│   │   └── tool_registry.py       # Tool registration system
│   ├── llm/
│   │   ├── llm_factory.py         # LLM provider abstraction
│   │   └── providers/             # Provider-specific implementations
│   └── agents/
│       ├── analysts/              # 7 analyst agent prompts
│       ├── researchers/           # Bull/Bear researchers
│       ├── risk/                  # 3 risk debaters
│       └── portfolio_manager/     # Final decision maker
├── web/
│   └── app.py                     # Streamlit UI
├── .env.example                   # Environment variable template
└── README.md
tradingagents-astock/
├── tradingagents/
│   ├── graph/
│   │   ├── trading_graph.py      # 核心TradingAgentsGraph类
│   │   └── nodes.py               # 单个Agent节点实现
│   ├── tools/
│   │   ├── astock_tools.py        # A股数据获取工具
│   │   └── tool_registry.py       # 工具注册系统
│   ├── llm/
│   │   ├── llm_factory.py         # LLM提供商抽象层
│   │   └── providers/             # 各提供商的具体实现
│   └── agents/
│       ├── analysts/              # 7个分析师Agent的提示词
│       ├── researchers/           # 多空研究员
│       ├── risk/                  # 3位风险辩论者
│       └── portfolio_manager/     # 最终决策制定者
├── web/
│   └── app.py                     # Streamlit UI应用
├── .env.example                   # 环境变量模板
└── README.md

Best Practices

最佳实践

  1. Always use environment variables for API keys
  2. Start with debug=True to understand the pipeline
  3. Use MiniMax or DeepSeek for cost-effective China-based inference
  4. Check data availability before running batch analyses (market holidays, weekends)
  5. Monitor LLM costs — each analysis requires 30-50 API calls
  6. Validate stock codes before passing to
    propagate()
  7. Set appropriate
    max_debate_rounds
    — more rounds = higher cost but potentially better decisions
  8. Use quick_think_llm for analysts and researchers, reserve deep_think_llm for final decisions
  1. 始终使用环境变量存储API密钥
  2. 启动时开启debug=True以理解流水线运行逻辑
  3. 使用MiniMax或DeepSeek进行高性价比的国内推理
  4. 批量分析前检查数据可用性(市场节假日、周末)
  5. 监控LLM成本 — 每次分析需要30-50次API调用
  6. 传入propagate()前验证股票代码
  7. 设置合适的max_debate_rounds — 轮次越多成本越高,但决策可能更优
  8. 分析师和研究员使用quick_think_llm,将deep_think_llm留作最终决策使用