基础交易示例
此示例演示如何使用 TradingAgents 分析股票并做出交易决策。我们将完整演示对英伟达(NVDA)股票的分析。
简单股票分析
以下是分析英伟达股票的基本示例:
from tradingagents.graph.trading_graph import TradingAgentsGraph
from tradingagents.default_config import DEFAULT_CONFIG
# 初始化 TradingAgents
ta = TradingAgentsGraph(debug=True, config=DEFAULT_CONFIG.copy())
# 分析英伟达股票
symbol = "NVDA"
date = "2024-05-10"
print(f"正在分析 {symbol},日期:{date}...")
# 运行多智能体分析
state, decision = ta.propagate(symbol, date)
# 显示结果
print("\n" + "="*50)
print("交易决策报告")
print("="*50)
print(f"股票代码: {symbol}")
print(f"日期: {date}")
print(f"决策: {decision['action']}")
print(f"置信度: {decision['confidence']}/10")
print(f"风险水平: {decision['risk_level']}")
print("\n关键推理:")
for factor in decision['key_factors']:
print(f"• {factor}")
if decision['risk_warnings']:
print("\n风险警告:")
for warning in decision['risk_warnings']:
print(f"⚠️ {warning}")
预期输出
运行此示例时,您将看到类似以下的输出:
正在分析 NVDA,日期:2024-05-10...
[智能体活动]
✓ 基本面分析师: 分析公司财务数据...
✓ 情绪分析师: 处理市场情绪...
✓ 新闻分析师: 审查最新新闻...
✓ 技术分析师: 计算技术指标...
✓ 看涨研究员: 构建积极论证...
✓ 看跌研究员: 识别风险...
✓ 交易智能体: 综合分析...
✓ 风险管理员: 评估投资组合影响...
==================================================
交易决策报告
==================================================
股票代码: NVDA
日期: 2024-05-10
决策: BUY
置信度: 8.5/10
风险水平: MODERATE
关键推理:
• Q1收益超预期,收入增长18%
• AI芯片需求持续加速
• 技术突破900美元阻力位
• 收益后分析师积极上调评级
风险警告:
⚠️ 由于AI板块动能,预期高波动性
⚠️ 估值倍数处于历史高位
⚠️ 潜在市场调整可能影响成长股
详细分析检查
您还可以检查每个智能体的详细分析:
# 访问各个智能体的分析
fundamentals = state['fundamentals_analysis']
sentiment = state['sentiment_analysis']
technical = state['technical_analysis']
debate = state['debate_results']
print("基本面分析:")
print(f"收入增长: {fundamentals['revenue_growth']}")
print(f"利润率: {fundamentals['profit_margins']}")
print(f"估值评分: {fundamentals['valuation_score']}")
print("\n情绪分析:")
print(f"整体情绪: {sentiment['overall_sentiment']}")
print(f"社交媒体评分: {sentiment['social_media_score']}")
print(f"新闻情绪: {sentiment['news_sentiment']}")
print("\n技术分析:")
print(f"RSI: {technical['rsi']}")
print(f"MACD信号: {technical['macd_signal']}")
print(f"支撑/阻力: {technical['support_resistance']}")
print("\n研究员辩论:")
print(f"看涨论点: {len(debate['bullish_points'])}")
print(f"看跌论点: {len(debate['bearish_points'])}")
print(f"共识: {debate['consensus']}")
多股票比较
比较多只股票的分析:
# 分析多只科技股
stocks = ["NVDA", "AAPL", "GOOGL", "MSFT", "TSLA"]
date = "2024-05-10"
results = {}
for stock in stocks:
print(f"正在分析 {stock}...")
_, decision = ta.propagate(stock, date)
results[stock] = {
'action': decision['action'],
'confidence': decision['confidence'],
'risk_level': decision['risk_level']
}
# 显示比较
print("\n股票比较:")
print("-" * 60)
print(f"{'代码':<8} {'决策':<6} {'置信度':<12} {'风险':<10}")
print("-" * 60)
for stock, result in results.items():
print(f"{stock:<8} {result['action']:<6} {result['confidence']:<12.1f} {result['risk_level']:<10}")
时间序列分析
分析同一股票在多个日期的表现:
import datetime
symbol = "AAPL"
start_date = datetime.date(2024, 5, 1)
end_date = datetime.date(2024, 5, 10)
# 生成日期范围(仅工作日)
current_date = start_date
dates = []
while current_date <= end_date:
if current_date.weekday() < 5: # 周一=0, 周五=4
dates.append(current_date.strftime("%Y-%m-%d"))
current_date += datetime.timedelta(days=1)
# 跨日期分析
time_series = {}
for date in dates:
print(f"正在分析 {symbol},日期:{date}...")
_, decision = ta.propagate(symbol, date)
time_series[date] = decision
# 显示时间序列
print(f"\n{symbol} 时间序列分析:")
print("-" * 50)
for date, decision in time_series.items():
print(f"{date}: {decision['action']} (置信度: {decision['confidence']:.1f})")
自定义配置示例
为特定需求自定义分析:
from tradingagents.default_config import DEFAULT_CONFIG
# 创建成本效益测试配置
test_config = DEFAULT_CONFIG.copy()
test_config.update({
"deep_think_llm": "gpt-4o-mini", # 更便宜的模型
"quick_think_llm": "gpt-4o-mini",
"max_debate_rounds": 1, # 更快执行
"online_tools": False, # 使用缓存数据
"risk_tolerance": "moderate"
})
# 使用测试配置初始化
ta_test = TradingAgentsGraph(debug=False, config=test_config)
# 快速分析
_, decision = ta_test.propagate("AAPL", "2024-05-10")
print(f"快速分析: {decision['action']},置信度 {decision['confidence']:.1f}")
错误处理示例
优雅地处理常见错误:
from tradingagents.exceptions import TradingAgentsError, InvalidSymbolError
def safe_analysis(symbol, date):
try:
state, decision = ta.propagate(symbol, date)
return decision
except InvalidSymbolError:
print(f"错误: '{symbol}' 不是有效的股票代码")
return None
except TradingAgentsError as e:
print(f"分析错误: {e}")
return None
except Exception as e:
print(f"意外错误: {e}")
return None
# 使用无效代码测试
result = safe_analysis("INVALID", "2024-05-10")
if result:
print(f"决策: {result['action']}")
else:
print("分析失败")
# 使用有效代码测试
result = safe_analysis("AAPL", "2024-05-10")
if result:
print(f"决策: {result['action']}")
投资组合分析示例
分析完整的投资组合:
def analyze_portfolio(portfolio, date, target_allocation=None):
"""
分析股票投资组合
参数:
portfolio: 股票代码列表
date: 分析日期
target_allocation: 可选的目标配置字典
"""
results = {}
total_confidence = 0
buy_recommendations = []
for symbol in portfolio:
print(f"正在分析 {symbol}...")
try:
_, decision = ta.propagate(symbol, date)
results[symbol] = decision
total_confidence += decision['confidence']
if decision['action'] == 'BUY':
buy_recommendations.append({
'symbol': symbol,
'confidence': decision['confidence'],
'risk_level': decision['risk_level']
})
except Exception as e:
print(f"分析 {symbol} 时出错: {e}")
results[symbol] = {'error': str(e)}
# 投资组合摘要
avg_confidence = total_confidence / len([r for r in results.values() if 'error' not in r])
print(f"\n投资组合分析摘要:")
print(f"平均置信度: {avg_confidence:.1f}")
print(f"买入建议: {len(buy_recommendations)}")
# 按置信度排序买入建议
buy_recommendations.sort(key=lambda x: x['confidence'], reverse=True)
print("\n顶级买入建议:")
for i, rec in enumerate(buy_recommendations[:3], 1):
print(f"{i}. {rec['symbol']} (置信度: {rec['confidence']:.1f}, 风险: {rec['risk_level']})")
return results
# 示例投资组合
my_portfolio = ["AAPL", "GOOGL", "MSFT", "NVDA", "TSLA", "AMZN"]
portfolio_results = analyze_portfolio(my_portfolio, "2024-05-10")
下一步
运行这些示例后: