tradingagents-astock-multi-agent-framework
Compare original and translation side by side
🇺🇸
Original
English🇨🇳
Translation
ChineseTradingAgents-Astock Multi-Agent Framework
TradingAgents-Astock 多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
undefinedbash
undefinedClone the repository
克隆仓库
git clone https://github.com/simonlin1212/tradingagents-astock.git
cd tradingagents-astock
git clone https://github.com/simonlin1212/tradingagents-astock.git
cd tradingagents-astock
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]"
undefinedpip install -e ".[google]"
undefinedConfiguration
配置
LLM Provider Setup
LLM提供商设置
Create a file in the project root with your chosen LLM provider:
.envbash
undefined在项目根目录创建文件,填入所选LLM提供商的密钥:
.envbash
undefinedMiniMax (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
undefinedANTHROPIC_AUTH_TOKEN=your-kimi-token
undefinedGraph 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 TradingAgentsGraphpython
from tradingagents.graph.trading_graph import TradingAgentsGraphInitialize 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']}")
undefinedprint(f"信号: {decision['signal']}") # BUY, HOLD, 或 SELL
print(f"置信度: {decision['confidence']}") # 0-100
print(f"仓位: {decision['position_size']}") # 建议仓位大小
print(f"推理逻辑: {decision['reasoning']}")
undefinedUsing 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"]
undefinedbull_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"]
undefinedCLI Commands
CLI命令
Interactive Mode
交互模式
bash
undefinedbash
undefinedLaunch 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提供商选择
undefinedundefinedDirect Execution
直接执行
bash
undefinedbash
undefinedAnalyze 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
--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
--provider deepseek
--deep-model deepseek-chat
--quick-model deepseek-chat
Enable debug output
启用调试输出
tradingagents --stock 000001 --date 2026-05-20 --debug
undefinedtradingagents --stock 000001 --date 2026-05-20 --debug
undefinedWeb UI
Web UI
bash
undefinedbash
undefinedLaunch Streamlit web interface
启动Streamlit Web界面
tradingagents-web
tradingagents-web
Alternative
替代方式
streamlit run web/app.py
streamlit run web/app.py
Access at http://localhost:8501
undefinedundefinedData Source Integration
数据源集成
Available Data Tools
可用数据工具
The framework provides these tools to analysts (all free, no API keys needed):
python
undefined框架为分析师提供以下工具(均免费,无需API密钥):
python
undefinedMarket 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获取
undefinedundefinedData Provider Mapping
数据源映射
| Data Type | Provider | Protocol |
|---|---|---|
| OHLCV K-lines | mootdx | TCP 7709 |
| PE/PB/Market Cap | Tencent Finance | HTTP |
| Dragon-Tiger List | EastMoney | HTTP |
| Lockup Schedule | EastMoney | HTTP |
| Financial Statements | Sina Finance | HTTP |
| EPS Consensus | THS (10jqka) | HTTP |
| News Feed | CLS.cn | HTTP |
| Sector Classification | Baidu Finance | HTTP |
| 数据类型 | 提供商 | 协议 |
|---|---|---|
| OHLCK线 | mootdx | TCP 7709 |
| PE/PB/市值 | 腾讯财经 | HTTP |
| 龙虎榜 | 东方财富 | HTTP |
| 限售股时间表 | 东方财富 | HTTP |
| 财务报表 | 新浪财经 | HTTP |
| EPS一致预期 | 同花顺(10jqka) | HTTP |
| 新闻资讯 | CLS.cn | HTTP |
| 行业分类 | 百度财经 | HTTP |
Agent Pipeline Architecture
Agent流水线架构
12-Stage Execution Flow
12阶段执行流程
python
undefinedpython
undefinedStage 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做出最终的买入/持有/卖出决策
undefinedundefinedCustom Analyst Configuration
自定义分析师配置
python
undefinedpython
undefinedDisable 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)
undefinedconfig = {
"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)
undefinedA-Share Trading Constraints
A股交易约束
The framework automatically applies A-share market rules:
python
undefined框架会自动应用A股市场规则:
python
undefinedT+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
undefinedstocks = ["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
undefinedTime 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']}%)")
undefinedprint(f"{ticker}的信号历史:")
for s in signals:
print(f"{s['date']}: {s['signal']} ({s['confidence']}%)")
undefinedCustom LLM Backend
自定义LLM后端
python
undefinedpython
undefinedUse 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")
undefinedconfig = {
"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")
undefinedExtracting 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}")
undefineddef 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}")
undefinedTroubleshooting
故障排除
API Key Issues
API密钥问题
python
undefinedpython
undefinedVerify 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",
}
undefinedconfig = {
"llm_provider": "minimax",
"api_key": "sk-your-key-here", # 覆盖环境变量
"deep_think_llm": "MiniMax-M2.7",
"quick_think_llm": "MiniMax-M2.7-highspeed",
}
undefinedData Source Failures
数据源获取失败
python
undefinedpython
undefinedTest 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
undefinedfrom 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}")
# 备选方案:检查网络,尝试不同日期范围
undefinedInvalid Stock Code
无效股票代码
python
undefinedpython
undefinedValidate 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}")
undefinedimport 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}")
undefinedRate Limiting
请求速率限制
python
undefinedpython
undefinedAdd 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
undefinedimport 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秒
undefinedDebug Mode
调试模式
python
undefinedpython
undefinedEnable 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"])
undefinedprint("市场分析师报告:")
print(final_state["market_analyst_report"])
print("\n多头研究报告:")
print(final_state["bull_researcher_report"])
print("\n空头研究报告:")
print(final_state["bear_researcher_report"])
undefinedLLM Response Parsing Errors
LLM响应解析错误
python
undefinedpython
undefinedIf 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)
undefinedconfig = {
"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)
undefinedProject 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.mdtradingagents-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.mdBest Practices
最佳实践
- Always use environment variables for API keys
- Start with debug=True to understand the pipeline
- Use MiniMax or DeepSeek for cost-effective China-based inference
- Check data availability before running batch analyses (market holidays, weekends)
- Monitor LLM costs — each analysis requires 30-50 API calls
- Validate stock codes before passing to
propagate() - Set appropriate — more rounds = higher cost but potentially better decisions
max_debate_rounds - Use quick_think_llm for analysts and researchers, reserve deep_think_llm for final decisions
- 始终使用环境变量存储API密钥
- 启动时开启debug=True以理解流水线运行逻辑
- 使用MiniMax或DeepSeek进行高性价比的国内推理
- 批量分析前检查数据可用性(市场节假日、周末)
- 监控LLM成本 — 每次分析需要30-50次API调用
- 传入propagate()前验证股票代码
- 设置合适的max_debate_rounds — 轮次越多成本越高,但决策可能更优
- 分析师和研究员使用quick_think_llm,将deep_think_llm留作最终决策使用