Customizing Data Vendor Configuration in TradingAgents: yfinance vs Alpha Vantage
TradingAgents uses a three-layer configuration system defined in default_config.py and runtime helpers in config.py to route data requests to either yfinance or Alpha Vantage without modifying application code.
TradingAgents separates data requirements from data sources through a flexible vendor configuration system. Whether you need free real-time data from yfinance or premium fundamental data from Alpha Vantage, you can customize the data vendor configuration in TradingAgents without touching the core trading logic. This guide covers the three-layer configuration system implemented in TauricResearch/TradingAgents.
Understanding the Three-Layer Configuration System
The framework routes every data request through a cascading decision tree controlled by three distinct configuration layers.
Category-Level Defaults (data_vendors)
The data_vendors dictionary in tradingagents/default_config.py assigns a default vendor to entire categories of data operations. The default mapping covers:
core_stock_apis– OHLCV price datatechnical_indicators– indicator calculationsfundamental_data– balance sheets, cashflow statementsnews_data– news and insider transactions
By default, all categories point to "yfinance".
Tool-Level Overrides (tool_vendors)
The tool_vendors dictionary allows granular overrides for individual method names. For example, you can route get_stock_data to Alpha Vantage while keeping all other price tools on yfinance.
Runtime Configuration Changes
For single-run modifications without editing source files, tradingagents/dataflows/config.py provides:
initialize_config()– loads a fresh copy ofDEFAULT_CONFIGset_config(custom_dict)– merges user overrides into the running configget_config()– returns the current configuration state
How Data Vendor Routing Works
The routing logic lives in tradingagents/dataflows/interface.py. When a public method like get_stock_data is invoked, the system executes the following sequence:
- Categorize the method via
get_category_for_method(e.g.,get_stock_data→core_stock_apis). - Select the vendor via
get_vendor, which first checkstool_vendorsfor an explicit override, then falls back to the category entry indata_vendors. - Build a fallback chain – the configuration value may contain comma-separated vendors (e.g.,
"yfinance,alpha_vantage"). - Execute with failover –
route_to_vendoriterates through the chain, calling the vendor-specific implementation (e.g.,get_YFin_data_onlineiny_finance.pyorget_AV_stock_datainalpha_vantage_stock.py). If anAlphaVantageRateLimitErroris raised, the system automatically proceeds to the next vendor in the list.
This architecture makes the system both configurable and resilient, allowing automatic failover between yfinance and Alpha Vantage based on API quotas or rate limits.
Configuring yfinance vs Alpha Vantage
Switching All Stock APIs to Alpha Vantage
To route all core stock price requests to Alpha Vantage at runtime:
from tradingagents.dataflows.config import set_config, get_config
set_config({
"data_vendors": {
"core_stock_apis": "alpha_vantage"
}
})
print(get_config()["data_vendors"]["core_stock_apis"])
# Output: alpha_vantage
Overriding a Single Tool Method
To use Alpha Vantage only for get_stock_data while keeping other tools on yfinance:
from tradingagents.dataflows.config import set_config
set_config({
"tool_vendors": {
"get_stock_data": "alpha_vantage"
}
})
Setting Up Fallback Chains
Configure automatic failover by providing a comma-separated list. The system tries yfinance first, then falls back to Alpha Vantage if rate-limited:
from tradingagents.dataflows.config import set_config
set_config({
"data_vendors": {
"technical_indicators": "yfinance,alpha_vantage"
}
})
Import-Time Configuration for Scripts
For persistent changes in analysis scripts, set the configuration immediately after import:
# my_strategy.py
from tradingagents.dataflows.config import set_config
set_config({
"data_vendors": {
"fundamental_data": "alpha_vantage"
}
})
from tradingagents.dataflows.interface import route_to_vendor
# This call now uses Alpha Vantage
balance_sheet = route_to_vendor("get_fundamentals", "AAPL")
Key Source Files and Implementation Details
| File | Role |
|---|---|
tradingagents/default_config.py |
Defines DEFAULT_CONFIG with data_vendors and tool_vendors mappings. |
tradingagents/dataflows/config.py |
Provides initialize_config(), set_config(), and get_config() for runtime manipulation. |
tradingagents/dataflows/interface.py |
Contains route_to_vendor(), get_vendor(), and get_category_for_method() routing logic. |
tradingagents/dataflows/y_finance.py |
yfinance implementation for price data and fundamentals. |
tradingagents/dataflows/yfinance_news.py |
yfinance news and insider data implementation. |
tradingagents/dataflows/alpha_vantage_stock.py |
Alpha Vantage stock price API wrapper. |
tradingagents/dataflows/alpha_vantage_indicator.py |
Alpha Vantage technical indicators. |
tradingagents/dataflows/alpha_vantage_fundamentals.py |
Alpha Vantage balance sheet and cashflow data. |
tradingagents/dataflows/alpha_vantage_news.py |
Alpha Vantage news and sentiment APIs. |
Summary
- TradingAgents separates data logic from vendor implementation through a configuration-driven architecture in
tradingagents/default_config.py. - Three configuration layers control routing: category-level defaults (
data_vendors), tool-level overrides (tool_vendors), and runtime changes viaset_config(). - Automatic failover supports comma-separated vendor lists (e.g.,
"yfinance,alpha_vantage"), allowing the system to fall back to Alpha Vantage when yfinance is unavailable or vice versa. - Routing logic in
tradingagents/dataflows/interface.pymaps method calls to vendor-specific implementations based on the active configuration.
Frequently Asked Questions
How do I change the default data vendor for all price data in TradingAgents?
Update the core_stock_apis entry in the data_vendors configuration using set_config() from tradingagents.dataflows.config. This redirects all OHLCV price requests to your chosen vendor without modifying individual tool calls.
Can I use both yfinance and Alpha Vantage in the same TradingAgents workflow?
Yes. Configure a fallback chain by providing a comma-separated string like "yfinance,alpha_vantage" in the configuration. The routing logic in interface.py will attempt yfinance first and automatically switch to Alpha Vantage if the first vendor fails or hits a rate limit.
What happens if Alpha Vantage hits a rate limit during a TradingAgents data call?
When AlphaVantageRateLimitError is raised, the route_to_vendor function in tradingagents/dataflows/interface.py catches the exception and proceeds to the next vendor in the fallback chain. If no vendors remain, the error propagates to the caller.
Where is the vendor routing logic implemented in the TradingAgents source code?
The central routing mechanism resides in tradingagents/dataflows/interface.py, which contains route_to_vendor, get_vendor, and get_category_for_method. Configuration management is handled in tradingagents/dataflows/config.py, while default mappings are defined in tradingagents/default_config.py.
Have a question about this repo?
These articles cover the highlights, but your codebase questions are specific. Give your agent direct access to the source. Share this with your agent to get started:
curl -s "https://instagit.com/install.md" Maintain an open-source project? Get it listed too →