TradingAgents/GEMINI.md

209 lines
8.0 KiB
Markdown

# Gemini Code Assistant Workspace Configuration
This document provides a comprehensive guide for the Gemini Code Assistant to effectively understand and contribute to the `TradingAgents` project.
## Project Overview
`TradingAgents` is a multi-agent LLM framework for financial trading that simulates a real-world trading firm. It leverages a team of specialized LLM-powered agents, including analysts, researchers, and a trader, to collaboratively analyze market conditions and make informed trading decisions. The framework is built on `LangGraph`, which enables a modular and flexible agent-based architecture.
The core of the project is the `TradingAgentsGraph`, which orchestrates the interactions between the different agents. The agents are organized into teams:
* **Analyst Team:** Gathers and analyzes different types of data (e.g., fundamentals, news, social media).
* **Researcher Team:** Debates the findings of the analyst team to form an investment plan.
* **Trader Agent:** Makes the final trading decision based on the input from the other teams.
* **Risk Management Team:** Assesses the risk of the proposed trade.
## Getting Started
### Installation
1. Clone the repository:
```bash
git clone https://github.com/TauricResearch/TradingAgents.git
cd TradingAgents
```
2. Create and activate a virtual environment:
```bash
conda create -n tradingagents python=3.13
conda activate tradingagents
```
3. Install the required dependencies:
```bash
pip install -r requirements.txt
```
### API Keys
The project requires the following API keys to be set as environment variables:
* **FinnHub:** For financial data.
```bash
export FINNHUB_API_KEY=$YOUR_FINNHUB_API_KEY
```
* **OpenAI:** For the LLM agents.
```bash
export OPENAI_API_KEY=$YOUR_OPENAI_API_KEY
```
* **OpenRouter (optional):** If you want to use OpenRouter as your LLM provider.
```bash
export OPENROUTER_API_KEY=$YOUR_OPENROUTER_API_KEY
```
## Project Structure
```
C:\Users\kevin\repo\TradingAgents\
├───.gitignore
├───.python-version
├───ERROR_HANDLING_GUIDE.md
├───LICENSE
├───main.py
├───openrouter_status.py
├───pyproject.toml
├───README.md
├───requirements.txt
├───setup.py
├───uv.lock
├───.git\...
├───.venv\
│ ├───include\...
│ ├───Lib\...
│ ├───Scripts\...
│ └───share\...
├───assets\
│ ├───analyst.png
│ ├───researcher.png
│ ├───risk.png
│ ├───schema.png
│ ├───TauricResearch.png
│ ├───trader.png
│ ├───wechat.png
│ └───cli\
│ ├───cli_init.png
│ ├───cli_news.png
│ ├───cli_technical.png
│ └───cli_transaction.png
├───cli\
│ ├───__init__.py
│ ├───main.py
│ ├───models.py
│ ├───utils.py
│ ├───__pycache__\
│ └───static\
│ └───welcome.txt
├───results\
│ ├───AAPL\...
│ └───TSLA\...
└───tradingagents\
├───default_config.py
├───__pycache__\
├───agents\
│ ├───__init__.py
│ ├───__pycache__\
│ ├───analysts\
│ │ ├───fundamentals_analyst.py
│ │ ├───market_analyst.py
│ │ ├───news_analyst.py
│ │ ├───social_media_analyst.py
│ │ └───__pycache__\
│ ├───managers\
│ │ ├───research_manager.py
│ │ ├───risk_manager.py
│ │ └───__pycache__\
│ ├───researchers\
│ │ ├───bear_researcher.py
│ │ ├───bull_researcher.py
│ │ └───__pycache__\
│ ├───risk_mgmt\
│ │ ├───aggresive_debator.py
│ │ ├───conservative_debator.py
│ │ ├───neutral_debator.py
│ │ └───__pycache__\
│ ├───trader\
│ │ ├───trader.py
│ │ └───__pycache__\
│ └───utils\
│ ├───agent_states.py
│ ├───agent_utils.py
│ ├───memory.py
│ └───__pycache__\
├───dataflows\
│ ├───__init__.py
│ ├───config.py
│ ├───finnhub_utils.py
│ ├───googlenews_utils.py
│ ├───interface.py
│ ├───reddit_utils.py
│ ├───stockstats_utils.py
│ ├───utils.py
│ ├───yfin_utils.py
│ ├───__pycache__\
│ └───data_cache\
└───graph\
├───__init__.py
├───conditional_logic.py
├───propagation.py
├───reflection.py
├───setup.py
├───signal_processing.py
├───trading_graph.py
└───__pycache__\
```
* **`main.py`**: A simple script demonstrating how to use the `TradingAgentsGraph` as a Python package.
* **`cli/main.py`**: The main entry point for the command-line interface.
* **`tradingagents/`**: The core Python package.
* **`agents/`**: Contains the implementation of the different agents.
* **`dataflows/`**: Handles data acquisition from various APIs.
* **`graph/`**: Defines the `LangGraph` graph and the overall orchestration of the agents.
* **`default_config.py`**: The default configuration for the project.
* **`requirements.txt`**: A list of the Python dependencies.
* **`pyproject.toml`**: Project metadata and dependencies.
* **`README.md`**: The main README file for the project.
## Core Concepts
### TradingAgentsGraph
The `TradingAgentsGraph` class in `tradingagents/graph/trading_graph.py` is the central orchestrator of the framework. It initializes the LLMs, tools, and agents, and then constructs a `LangGraph` graph to define the workflow. The `propagate` method executes the graph for a given company and date.
### Agents
Agents are defined in the `tradingagents/agents/` directory. Each agent is a "node" in the `LangGraph` graph. The agents are created by functions that take the LLM and other necessary components as input. These functions return a node function that processes the current state of the graph and returns an updated state.
### Dataflows
The `tradingagents/dataflows/` directory contains the logic for fetching data from various financial data APIs, such as Finnhub, Yahoo Finance, and Reddit. The `Toolkit` class in `tradingagents/agents/__init__.py` provides a unified interface for the agents to access these data sources.
## Development Guidelines
### Adding a New Agent
1. Create a new Python file in the appropriate subdirectory of `tradingagents/agents/`.
2. Define a `create_<agent_name>_agent` function that takes the LLM and any other necessary components as input.
3. Inside this function, define a node function that takes the current state of the graph as input.
4. Prepare a prompt for the LLM and invoke it.
5. Return an updated state dictionary.
6. Add the new agent to the `TradingAgentsGraph` in `tradingagents/graph/trading_graph.py`.
### Adding a New Tool
1. Add a new function to the appropriate file in `tradingagents/dataflows/`.
2. Add the new function to the `Toolkit` class in `tradingagents/agents/__init__.py`.
3. Add the new tool to the appropriate `ToolNode` in the `_create_tool_nodes` method of the `TradingAgentsGraph` class.
### Running Tests
This project does not currently have a dedicated test suite. When adding new features, it is recommended to add unit tests to ensure the correctness of the code.
## Key Commands
* **Run the CLI:**
```bash
python -m cli.main
```
* **Run the package example:**
```bash
python main.py
```