TradingAgents/FRED_MACRO_INTEGRATION.md

311 lines
8.6 KiB
Markdown

# FRED API Macro Data Integration
## Summary
Added FRED (Federal Reserve Economic Data) API support to the TradingAgents vendor methods system for macroeconomic analysis, including a new **Macro Analyst** agent.
## Files Added
### 1. `tradingagents/dataflows/macro_utils.py`
New module providing FRED API integration with the following functions:
- **`get_fred_api_key()`** - Get FRED API key from config or environment
- **`get_fred_data(series_id, start_date, end_date)`** - Core FRED API wrapper
- **`get_treasury_yield_curve(curr_date)`** - Treasury yield curve data with inversion analysis
- **`get_economic_indicators_report(curr_date, lookback_days=90)`** - Comprehensive economic indicators
- Federal Funds Rate
- Consumer Price Index (CPI)
- Producer Price Index (PPI)
- Unemployment Rate
- Nonfarm Payrolls
- GDP Growth Rate
- ISM Manufacturing PMI
- Consumer Confidence
- VIX (Market Volatility)
- **`get_fed_calendar_and_minutes(curr_date)`** - Federal Reserve meeting calendar and policy updates
- **`get_macro_economic_summary(curr_date, lookback_days=90)`** - Complete macro economic analysis combining all components
### 2. `tradingagents/agents/analysts/macro_analyst.py`
New macro analyst agent that uses FRED API tools to analyze economic conditions:
- Analyzes Federal Reserve policy and economic indicators
- Evaluates inflation, employment, and growth trends
- Assesses Treasury yield curve and recession signals
- Provides market implications and trading considerations
### 3. `tradingagents/agents/utils/macro_data_tools.py`
Tool wrapper functions for LangChain integration:
- **`get_economic_indicators(curr_date, lookback_days)`** - Comprehensive economic indicators
- **`get_yield_curve(curr_date)`** - Treasury yield curve with inversion analysis
- **`get_fed_calendar(curr_date)`** - Fed meeting calendar and policy updates
## Files Modified
### 4. `tradingagents/dataflows/interface.py`
Updated vendor routing system to include FRED macro data:
**Added Imports:**
```python
from .macro_utils import get_economic_indicators_report, get_treasury_yield_curve, get_fed_calendar_and_minutes
```
**Updated VENDOR_LIST:**
```python
VENDOR_LIST = [
"local",
"yfinance",
"openai",
"google",
"fred" # New
]
```
**New TOOLS_CATEGORIES Entry:**
```python
"macro_data": {
"description": "Macroeconomic indicators and Federal Reserve data",
"tools": [
"get_economic_indicators",
"get_yield_curve",
"get_fed_calendar"
]
}
```
**New VENDOR_METHODS Entries:**
```python
# macro_data
"get_economic_indicators": {
"fred": get_economic_indicators_report,
},
"get_yield_curve": {
"fred": get_treasury_yield_curve,
},
"get_fed_calendar": {
"fred": get_fed_calendar_and_minutes,
},
```
### 5. `tradingagents/agents/__init__.py`
Added macro analyst to exports:
```python
from .analysts.macro_analyst import create_macro_analyst
__all__ = [
# ... existing exports ...
"create_macro_analyst",
]
```
### 6. `tradingagents/agents/utils/agent_utils.py`
Added macro tool imports:
```python
from tradingagents.agents.utils.macro_data_tools import (
get_economic_indicators,
get_yield_curve,
get_fed_calendar
)
```
### 7. `tradingagents/graph/setup.py`
Added macro analyst option to graph setup:
```python
def setup_graph(
self, selected_analysts=["market", "social", "news", "fundamentals"]
):
"""Set up and compile the agent workflow graph.
Args:
selected_analysts (list): List of analyst types to include. Options are:
- "market": Market analyst
- "social": Social media analyst
- "news": News analyst
- "fundamentals": Fundamentals analyst
- "macro": Macro economic analyst # New!
"""
# ... existing analyst setup ...
if "macro" in selected_analysts:
analyst_nodes["macro"] = create_macro_analyst(
self.quick_thinking_llm
)
delete_nodes["macro"] = create_msg_delete()
tool_nodes["macro"] = self.tool_nodes["macro"]
```
### 8. `tradingagents/graph/trading_graph.py`
Added macro tools import and tool node:
```python
from tradingagents.agents.utils.agent_utils import (
# ... existing imports ...
get_economic_indicators,
get_yield_curve,
get_fed_calendar
)
def _create_tool_nodes(self) -> Dict[str, ToolNode]:
return {
# ... existing tool nodes ...
"macro": ToolNode(
[
get_economic_indicators,
get_yield_curve,
get_fed_calendar,
]
),
}
```
## Configuration Required
To use FRED API features, set the FRED API key via:
1. **Environment Variable:**
```bash
export FRED_API_KEY="your_api_key_here"
```
2. **Or via Config System:**
The `get_fred_api_key()` function will check:
- Config system via `get_api_key("fred_api_key", "FRED_API_KEY")`
- Environment variable `FRED_API_KEY`
3. **Get a Free API Key:**
- Visit: https://fred.stlouisfed.org/
- Register for a free account
- Generate API key under "My Account" → "API Keys"
## Usage Examples
### Enable Macro Analyst in Graph
```python
from tradingagents.graph.trading_graph import TradingAgentsGraph
# Create graph with macro analyst enabled
graph = TradingAgentsGraph(
selected_analysts=["market", "fundamentals", "macro"], # Include "macro"
debug=True,
config=your_config
)
# Run analysis
result = graph.propagate("AAPL", "2025-10-06")
```
### Via Vendor Routing System
```python
from tradingagents.dataflows.interface import route_to_vendor
# Get economic indicators
indicators = route_to_vendor(
"get_economic_indicators",
curr_date="2025-10-06",
lookback_days=90
)
# Get yield curve
yield_curve = route_to_vendor(
"get_yield_curve",
curr_date="2025-10-06"
)
# Get Fed calendar
fed_calendar = route_to_vendor(
"get_fed_calendar",
curr_date="2025-10-06"
)
```
### Direct Function Calls
```python
from tradingagents.dataflows.macro_utils import (
get_economic_indicators_report,
get_treasury_yield_curve,
get_fed_calendar_and_minutes,
get_macro_economic_summary
)
# Complete macro analysis
summary = get_macro_economic_summary(
curr_date="2025-10-06",
lookback_days=90
)
# Individual components
indicators = get_economic_indicators_report("2025-10-06", 90)
yield_curve = get_treasury_yield_curve("2025-10-06")
fed_data = get_fed_calendar_and_minutes("2025-10-06")
```
## Integration with Macro Analyst
The macro analyst can now use these tools through the vendor routing system. The tools are automatically available through the `macro_data` category:
```python
# In agent configuration
config = {
"data_vendors": {
"macro_data": "fred" # Use FRED for macro data
}
}
```
## Data Returned
All functions return formatted markdown strings suitable for LLM analysis:
- **Economic Indicators**: Markdown tables with current values, changes, and analysis
- **Yield Curve**: Markdown table with maturities, yields, and inversion warnings
- **Fed Calendar**: FOMC meeting schedule and policy trajectory
- **Trading Implications**: Actionable insights for different economic scenarios
## PR Compatibility Notes
Changes were made with minimal modifications to existing code:
1.**New files only** - `macro_utils.py`, `macro_analyst.py`, `macro_data_tools.py` are new additions
2.**Additive changes** - Only added new entries to existing dictionaries and imports
3.**No breaking changes** - Existing functionality unchanged
4.**Follows existing patterns** - Uses same vendor routing and analyst architecture
5.**Consistent naming** - Follows existing naming conventions (`get_*`, `create_*_analyst` patterns)
6.**Optional feature** - Macro analyst is opt-in via `selected_analysts` parameter
## Testing
To verify the integration works:
```python
# Test FRED API connection
from tradingagents.dataflows.macro_utils import get_fred_data
result = get_fred_data("FEDFUNDS", "2025-01-01", "2025-10-06")
print(result)
# Test vendor routing
from tradingagents.dataflows.interface import route_to_vendor
indicators = route_to_vendor(
"get_economic_indicators",
curr_date="2025-10-06",
lookback_days=30
)
print(indicators)
```
## Dependencies
No new dependencies required. Uses existing dependencies:
- `requests` - For FRED API calls
- `pandas` - For data manipulation
- `datetime` - For date handling
- Existing config system for API key management
## Future Enhancements
Potential improvements:
- Add caching for FRED API responses (similar to YFinanceDataProvider)
- Add more FRED series (housing data, commodity prices, etc.)
- Add international economic indicators
- Add custom FRED series ID support for advanced users