6.7 KiB
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. It simulates a trading firm with specialized agents: analysts (market, social, news, fundamentals), researchers (bull/bear), trader, and risk management teams. The system supports multiple LLM providers (OpenAI, Anthropic, Google, xAI, OpenRouter, Ollama) and data vendors (Yahoo Finance, Alpha Vantage).
Essential Commands
Python Environment
Always activate the project's virtual environment before running Python commands:
# Windows
.venv\Scripts\activate
# Linux/macOS
source .venv/bin/activate
Installation (requires Python >=3.10)
pip install -r requirements.txt
# OR for editable install with CLI entry point
pip install -e .
CLI Usage
python -m cli.main
# or if installed via pip install -e .
tradingagents
Python API Usage
from tradingagents.graph.trading_graph import TradingAgentsGraph
from tradingagents.default_config import DEFAULT_CONFIG
ta = TradingAgentsGraph(debug=True, config=DEFAULT_CONFIG.copy())
_, decision = ta.propagate("NVDA", "2026-01-15")
print(decision)
# After observing actual returns, memorize mistakes for future runs
# ta.reflect_and_remember(returns) # parameter is the position returns (e.g. 1000)
Testing and Linting
No formal test suite or linting configuration exists. test.py at root is a manual smoke test for Yahoo Finance data functions.
Environment Variables
Set via .env file (loaded with python-dotenv) or shell exports. Only the provider you use is required:
OPENAI_API_KEY=... # OpenAI (GPT)
GOOGLE_API_KEY=... # Google (Gemini)
ANTHROPIC_API_KEY=... # Anthropic (Claude)
XAI_API_KEY=... # xAI (Grok)
OPENROUTER_API_KEY=... # OpenRouter
ZHIPU_API_KEY=... # Zhipu AI
ALPHA_VANTAGE_API_KEY=... # Alpha Vantage (optional, for non-yfinance data)
TRADINGAGENTS_RESULTS_DIR=... # Optional results directory override
Architecture
Core Workflow (LangGraph State Machine)
The trading graph follows a sequential multi-phase workflow:
- Analyst Phase - Each selected analyst runs sequentially, uses tools to gather data, clears messages after completion
- Research Phase - Bull/Bear researchers debate with analyst reports as context; Research Manager finalizes after
max_debate_rounds - Trading Phase - Trader synthesizes research into investment plan
- Risk Phase - Aggressive/Conservative/Neutral agents debate; Risk Judge finalizes after
max_risk_discuss_rounds
Key files:
tradingagents/graph/trading_graph.py- Main TradingAgentsGraph classtradingagents/graph/setup.py- GraphSetup for building workflowtradingagents/graph/conditional_logic.py- Routing logictradingagents/graph/propagation.py- State initialization
Directory Structure
cli/ # Command-line interface (Typer-based)
tradingagents/
agents/
analysts/ # Initial analysis agents
researchers/ # Bull/bear researchers + manager
managers/ # Research and risk managers
trader/ # Trading decision agent
risk_mgmt/ # Risk assessment agents
utils/ # Agent states, tools, memory (BM25)
graph/ # LangGraph workflow orchestration
dataflows/ # Data source abstraction (vendor routing)
llm_clients/ # Multi-provider LLM factory
LLM Client Factory
tradingagents/llm_clients/factory.py implements the factory pattern for creating LLM clients. Base client class in base_client.py with provider-specific implementations (OpenAI, Anthropic, Google). Provider-specific thinking configuration:
- Google:
google_thinking_level("high", "minimal") - OpenAI:
openai_reasoning_effort("medium", "high", "low")
Data Vendor Routing
tradingagents/dataflows/interface.py routes tool calls to vendor implementations. Configuration via default_config.py:
- Category-level:
data_vendors["core_stock_apis"] = "yfinance" - Tool-level override:
tool_vendors["get_stock_data"] = "alpha_vantage"
Supported vendors: Yahoo Finance (free, default), Alpha Vantage (requires API key).
Agent State Management
Agent states are TypedDict classes in agents/utils/agent_states.py:
AgentState- Base state for analyst agentsInvestDebateState- Research team debate stateRiskDebateState- Risk management debate state
Each agent function takes state and returns state updates. Messages are cleared between phases to manage context window.
Tool Definition
All data tools use @tool decorator from langchain_core.tools and are defined in agents/utils/. Tools route via dataflows.interface.route_to_vendor() to vendor implementations.
Configuration
tradingagents/default_config.py defines the default configuration:
llm_provider- "openai", "google", "anthropic", "xai", "openrouter", "ollama"deep_think_llm- Model for complex reasoning (default: "gpt-5.2")quick_think_llm- Model for quick tasks (default: "gpt-5-mini")backend_url- Custom API endpoint (default: OpenAI's endpoint)max_debate_rounds- Research team debate iterations (default: 1)max_risk_discuss_rounds- Risk team debate iterations (default: 1)max_recur_limit- LangGraph recursion limit (default: 100)data_vendors- Per-category vendor selection (categories: core_stock_apis, technical_indicators, fundamental_data, news_data)tool_vendors- Per-tool vendor overrides (takes precedence over category-level)
Copy and modify DEFAULT_CONFIG to customize. Always use .copy() to avoid mutating the shared default.
Important Patterns
- Agent Functions - Each agent is a function
agent(state) -> dictreturning state updates - Message Clearing - Analysts clear messages after completion to prevent context bloat
- Tool Decorators - Use
@toolfromlangchain_core.toolsfor all data tools - Factory Pattern - LLM clients via
create_llm_client()inllm_clients/factory.py - Memory - BM25-based lexical matching in
agents/utils/memory.py(no API calls, offline-capable) - Caching - Data cached in
tradingagents/dataflows/data_cache/
Results and Output
Analysis logs and reports are saved to results/ directory (configurable via TRADINGAGENTS_RESULTS_DIR env var). The CLI provides real-time progress display using Rich library.
Key Entry Points
- CLI:
cli/main.py(Typer app) - Trading Graph:
tradingagents/graph/trading_graph.py-TradingAgentsGraph.propagate() - LLM Factory:
tradingagents/llm_clients/factory.py-create_llm_client() - Data Interface:
tradingagents/dataflows/interface.py-route_to_vendor()