TradingAgents/CLAUDE.md

274 lines
9.2 KiB
Markdown

# CLAUDE.md
This file provides guidance to Claude Code (claude.ai/code) when working with code in this repository.
## Project Overview
TradingAgents is a multi-agent LLM financial trading framework built with LangGraph that mirrors real-world trading firm dynamics. The framework uses specialized LLM agents (analysts, researchers, traders, and risk managers) to collaboratively evaluate market conditions and make informed trading decisions.
**Research Paper**: arXiv:2412.20138
## Core Architecture
### Multi-Agent Pipeline Flow
The system follows a sequential pipeline mimicking institutional trading:
```
Analyst Team → Research Team → Trader → Risk Management → Portfolio Manager
```
### Agent Teams Structure
**1. Analyst Team** (`tradingagents/agents/analysts/`)
- `market_analyst.py` - Technical analysis using MACD, RSI, price patterns
- `social_media_analyst.py` - Sentiment analysis from social media
- `news_analyst.py` - Global news and macroeconomic indicators
- `fundamentals_analyst.py` - Company financials and intrinsic values
**2. Research Team** (`tradingagents/agents/researchers/`)
- `bull_researcher.py` - Bullish perspective analysis
- `bear_researcher.py` - Bearish perspective analysis
- `research_manager.py` - Debate moderator and final decision maker
**3. Trading Team** (`tradingagents/agents/trader/`)
- `trader.py` - Composes reports and makes trading decisions
**4. Risk Management** (`tradingagents/agents/risk_mgmt/`)
- `aggresive_debator.py` - High-risk tolerance perspective
- `conservative_debator.py` - Low-risk tolerance perspective
- `neutral_debator.py` - Balanced risk perspective
**5. Portfolio Management** (`tradingagents/agents/managers/`)
- `risk_manager.py` - Final approval/rejection of trades
### State Management
States are defined in `tradingagents/agents/utils/agent_states.py`:
- **AgentState**: Main state flowing through the graph (company, date, reports, decisions)
- **InvestDebateState**: Research team debate state (bull/bear history, judge decision)
- **RiskDebateState**: Risk management debate state (risky/safe/neutral perspectives)
### Graph Orchestration
The LangGraph workflow is managed in `tradingagents/graph/`:
- `trading_graph.py` - Main orchestration class (`TradingAgentsGraph`)
- `setup.py` - Graph construction and node configuration (`GraphSetup`)
- `propagation.py` - State initialization and execution (`Propagator`)
- `conditional_logic.py` - Routing logic between nodes (`ConditionalLogic`)
- `reflection.py` - Learning from past decisions (`Reflector`)
- `signal_processing.py` - Extract trading signals from decisions (`SignalProcessor`)
### Data Layer
Data flows through an abstraction layer in `tradingagents/dataflows/`:
**Configuration System**:
- `config.py` - Global config management with `set_config()` and `get_config()`
- `interface.py` - Abstract tool interface that routes to appropriate vendor
- `default_config.py` - Default settings including data vendors
**Vendor Implementations**:
- `alpha_vantage*.py` - Alpha Vantage API (fundamental, news, stock data)
- `y_finance.py` / `yfin_utils.py` - Yahoo Finance API (market data, indicators)
- `google.py` / `googlenews_utils.py` - Google News (alternative news source)
- `local.py` - Local data vendor for offline testing
- `openai.py` - LLM-based data vendor for fundamental/news analysis
**Tool Abstraction** (`tradingagents/agents/utils/agent_utils.py`):
Abstract functions automatically route to configured vendor:
- `get_stock_data()`, `get_indicators()` - Market data
- `get_fundamentals()`, `get_balance_sheet()`, `get_cashflow()`, `get_income_statement()` - Fundamental data
- `get_news()`, `get_global_news()` - News data
- `get_insider_sentiment()`, `get_insider_transactions()` - Insider data
## Installation and Setup
### Environment Setup
```bash
# Clone and create virtual environment
conda create -n tradingagents python=3.13
conda activate tradingagents
# Install dependencies
pip install -r requirements.txt
```
### API Keys Configuration
**Required APIs**:
- OpenAI API (for LLM agents)
- Alpha Vantage API (for fundamental and news data - default config)
**Setup via environment variables**:
```bash
export OPENAI_API_KEY=$YOUR_OPENAI_API_KEY
export ALPHA_VANTAGE_API_KEY=$YOUR_ALPHA_VANTAGE_API_KEY
```
**Setup via .env file**:
```bash
cp .env.example .env
# Edit .env with your actual API keys
```
### Data Vendor Configuration
Modify `tradingagents/default_config.py` to change data sources:
```python
"data_vendors": {
"core_stock_apis": "yfinance", # yfinance, alpha_vantage, local
"technical_indicators": "yfinance", # yfinance, alpha_vantage, local
"fundamental_data": "alpha_vantage", # openai, alpha_vantage, local
"news_data": "alpha_vantage", # openai, alpha_vantage, google, local
}
```
## Running the Framework
### CLI Mode (Interactive)
```bash
python -m cli.main
```
This launches an interactive CLI with:
- Ticker selection
- Date selection
- Analyst team selection
- Research depth configuration (debate rounds)
- LLM provider and model selection
- Real-time progress tracking
### Python API Mode
**Basic usage** (`main.py`):
```python
from tradingagents.graph.trading_graph import TradingAgentsGraph
from tradingagents.default_config import DEFAULT_CONFIG
ta = TradingAgentsGraph(debug=True, config=DEFAULT_CONFIG.copy())
# Run analysis
_, decision = ta.propagate("NVDA", "2024-05-10")
print(decision)
```
**Custom configuration**:
```python
config = DEFAULT_CONFIG.copy()
config["deep_think_llm"] = "gpt-4o-mini" # Deep thinking model
config["quick_think_llm"] = "gpt-4o-mini" # Quick thinking model
config["max_debate_rounds"] = 1 # Research debate rounds
config["max_risk_discuss_rounds"] = 1 # Risk debate rounds
# LLM provider options: "openai", "anthropic", "google", "ollama", "openrouter"
config["llm_provider"] = "openai"
config["backend_url"] = "https://api.openai.com/v1"
ta = TradingAgentsGraph(debug=True, config=config)
_, decision = ta.propagate("AAPL", "2024-05-10")
```
**Reflection and learning**:
```python
# After getting returns, reflect and update memory
ta.reflect_and_remember(returns_losses=1000) # Positive returns
```
## LLM Provider Support
The framework supports multiple LLM providers (configured in `tradingagents/graph/trading_graph.py:75-85`):
- **OpenAI**: `llm_provider: "openai"`, backend_url: `https://api.openai.com/v1`
- **Anthropic**: `llm_provider: "anthropic"`
- **Google**: `llm_provider: "google"`
- **Ollama**: `llm_provider: "ollama"` (local models)
- **OpenRouter**: `llm_provider: "openrouter"`
## Key Configuration Parameters
Located in `tradingagents/default_config.py`:
- `results_dir` - Output directory for results (default: `./results`)
- `deep_think_llm` - Model for complex reasoning (default: `o4-mini`)
- `quick_think_llm` - Model for quick tasks (default: `gpt-4o-mini`)
- `max_debate_rounds` - Research team debate rounds (default: `1`)
- `max_risk_discuss_rounds` - Risk team debate rounds (default: `1`)
- `data_vendors` - Data source configuration per category
## Output Structure
Results are saved to:
```
results/
└── {TICKER}/
└── {DATE}/
├── reports/
│ ├── market_report.md
│ ├── sentiment_report.md
│ ├── news_report.md
│ ├── fundamentals_report.md
│ ├── investment_plan.md
│ ├── trader_investment_plan.md
│ └── final_trade_decision.md
└── message_tool.log
eval_results/
└── {TICKER}/
└── TradingAgentsStrategy_logs/
└── full_states_log_{DATE}.json
```
## Memory System
The framework includes a reflection-based learning system (`tradingagents/agents/utils/memory.py`):
- **FinancialSituationMemory**: Stores past decisions and outcomes
- Memories are agent-specific (bull, bear, trader, judge, risk manager)
- Uses ChromaDB for vector storage
- Enables learning from past trading mistakes
Memory is updated via:
```python
ta.reflect_and_remember(returns_losses)
```
## Testing and Development
**Cost-saving for testing**:
- Use `gpt-4o-mini` or `gpt-4.1-mini` instead of `o1-preview`/`gpt-4o`
- Set `max_debate_rounds: 1` to reduce API calls
- Use `local` data vendor with pre-downloaded data
**Debug mode**:
```python
ta = TradingAgentsGraph(debug=True, config=config)
```
This enables:
- LangGraph state tracing
- Pretty-printed message outputs
- Detailed logging
## Important Notes
1. **API Rate Limits**: The framework makes many API calls. Consider Alpha Vantage Premium for production use.
2. **Data Vendor Fallbacks**: The system has fallback logic when primary vendors fail (see `tradingagents/agents/utils/core_stock_tools.py:23-45`).
3. **Research Disclaimer**: This framework is designed for research purposes. Trading performance varies based on LLM models, temperature, data quality, and other factors. Not intended as financial advice.
4. **Analyst Selection**: When initializing `TradingAgentsGraph`, you can select specific analysts:
```python
ta = TradingAgentsGraph(
selected_analysts=["market", "news", "fundamentals"], # Skip social
config=config
)
```
5. **State Logging**: All states are automatically logged to JSON files for analysis and debugging.