6.6 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
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()