TradingAgents-CN 美股数据源配置指南:yfinance / Alpha Vantage / Finnhub 三级数据源体系与自动降级实战
【免费下载链接】TradingAgents-CN基于多智能体LLM的中文金融交易框架 - TradingAgents中文增强版项目地址: https://gitcode.com/GitHub_Trending/tr/TradingAgents-CN
本文以 TradingAgents-CN 的多智能体金融交易框架为背景,系统讲解美股数据源(yfinance、Alpha Vantage、Finnhub)的选型、配置、优先级与自动降级机制。读者完成阅读后,将掌握通过 Web 后台、环境变量、MongoDB 三种方式接入美股数据源,理解数据源管理器(USDataSourceManager)的底层读取逻辑,并能够自行验证与排查数据源配置问题。
支持的数据源总览
TradingAgents-CN 为美股行情提供三类在线数据源,外加一个 MongoDB 缓存层(最高优先级)。它们在数据类型、费用、API Key 要求与限制上各有侧重,实际使用时通常按「免费优先、准确度兜底」的原则组合:
| 数据源 | 提供商 | 数据类型 | 费用 | API Key | 限制 | 定位 |
|---|---|---|---|---|---|---|
| yfinance | Yahoo Finance | 股票价格、技术指标、基本面信息 | 完全免费 | 不需要 | 无严格限制 | 推荐,默认主力源 |
| Alpha Vantage | Alpha Vantage | 基本面数据、新闻、内部人交易 | 免费版 25 请求/天,付费版无限制 | 需要(免费申请) | 免费版有速率限制 | 推荐,基本面与新闻增强 |
| Finnhub | Finnhub | 股票价格、基本面、新闻 | 免费版 60 请求/分钟,付费版无限制 | 需要(免费申请) | 免费版有速率限制 | 备用数据源 |
在源码中,这四类来源被统一抽象为USDataSource枚举(见 data_source_manager.py),并与 data_sources.py 中的统一数据源编码DataSourceCode(YFINANCE = "yfinance"、ALPHA_VANTAGE = "alpha_vantage"、FINNHUB = "finnhub")保持同步:
class USDataSource(Enum): MONGODB = DataSourceCode.MONGODB # MongoDB数据库缓存(最高优先级) YFINANCE = DataSourceCode.YFINANCE # Yahoo Finance(免费,股票价格和技术指标) ALPHA_VANTAGE = DataSourceCode.ALPHA_VANTAGE # Alpha Vantage(基本面和新闻) FINNHUB = DataSourceCode.FINNHUB # Finnhub(备用数据源)yfinance:免费主力
yfinance 是 Yahoo Finance 的非官方 Python 客户端,也是本项目默认的美股数据源。它的核心优势在于完全免费、无需注册、覆盖全球市场,且同时支持实时与历史数据。更重要的是,框架基于它封装了13 种技术指标的计算(详见 yfinance.py):close_50_sma、close_200_sma、close_10_ema、macd、macds、macdh、rsi、boll、boll_ub、boll_lb、atr、vwma、mfi,每一项都附带了完整的中文用途说明与使用提示(如 RSI 建议应用 70/30 阈值并观察背离、ATR 用于设置止损位等)。
Alpha Vantage:基本面与新闻增强
Alpha Vantage 官方提供基本面数据(财务报表、估值指标)、带情感分析的新闻数据以及内部人交易数据,数据准确度高、官方支持可靠。免费版每日 25 次请求对个人用户基本够用,更高频需求可升级付费版。API Key 免费申请。
Finnhub:备用数据源
Finnhub 免费版 60 请求/分钟,覆盖范围广、支持实时数据,常作为前两者失败后的兜底选择。API Key 免费申请。
配置方式
框架提供三种等价的数据源配置入口,从运维便捷性看优先级依次为:Web 后台 > 环境变量 > 直接操作 MongoDB(仅数据库不可用时的兜底手段)。
方式一:Web 后台配置(推荐)
- 打开浏览器访问
http://localhost:3000/settings/data-sources配置页面; - 按数据源类型添加配置,将占位符替换为真实 API Key:
{ "type": "alpha_vantage", "api_key": "YOUR_ALPHA_VANTAGE_API_KEY", "enabled": true, "description": "Alpha Vantage - 基本面和新闻数据" }{ "type": "finnhub", "api_key": "YOUR_FINNHUB_API_KEY", "enabled": true, "description": "Finnhub - 备用数据源" }{ "type": "yfinance", "enabled": true, "description": "yfinance - 免费股票数据" }注意:yfinance 无需api_key字段,只需enabled: true即可启用。
- 在
datasource_groupings集合中设置数据源优先级(数字越大优先级越高):
[ { "data_source_name": "yfinance", "market_category_id": "us_stocks", "priority": 100, "enabled": true, "description": "yfinance - 股票价格和技术指标" }, { "data_source_name": "alpha_vantage", "market_category_id": "us_stocks", "priority": 90, "enabled": true, "description": "Alpha Vantage - 基本面和新闻" }, { "data_source_name": "finnhub", "market_category_id": "us_stocks", "priority": 80, "enabled": true, "description": "Finnhub - 备用数据源" } ]优先级说明:
priority数字越大,优先级越高;- 系统会按优先级从高到低尝试数据源;
- 如果高优先级数据源失败,自动降级到下一个数据源。
方式二:环境变量配置
在.env文件中添加:
# Alpha Vantage API Key ALPHA_VANTAGE_API_KEY=your_alpha_vantage_api_key_here # Finnhub API Key FINNHUB_API_KEY=your_finnhub_api_key_here # 默认美股数据源(可选) DEFAULT_US_DATA_SOURCE=yfinance其中DEFAULT_US_DATA_SOURCE可取值yfinance、alpha_vantage、finnhub,缺省时默认yfinance。从源码看,该环境变量在USDataSourceManager._get_default_source()中被读取(见 data_source_manager.py),并通过source_mapping映射为对应枚举。
方式三:直接操作 MongoDB
仅当 Web 后台不可用时使用。先连接数据库:
mongosh mongodb://localhost:27017/tradingagents然后向system_configs集合插入数据源配置:
db.system_configs.updateOne( { is_active: true }, { $set: { data_source_configs: [ { type: "alpha_vantage", api_key: "YOUR_ALPHA_VANTAGE_API_KEY", enabled: true }, { type: "finnhub", api_key: "YOUR_FINNHUB_API_KEY", enabled: true }, { type: "yfinance", enabled: true } ] } } )再配置数据源优先级:
db.datasource_groupings.insertMany([ { data_source_name: "yfinance", market_category_id: "us_stocks", priority: 100, enabled: true, created_at: new Date(), updated_at: new Date() }, { data_source_name: "alpha_vantage", market_category_id: "us_stocks", priority: 90, enabled: true, created_at: new Date(), updated_at: new Date() }, { data_source_name: "finnhub", market_category_id: "us_stocks", priority: 80, enabled: true, created_at: new Date(), updated_at: new Date() } ])配置读取优先级
系统读取配置的优先级顺序为:
- 数据库配置(
system_configs集合)— 最高优先级; - 环境变量(
.env文件); - 配置文件(
~/.tradingagents/config.json)。
推荐使用数据库配置,因为:Web 后台修改后立即生效、无需重启服务、提供统一的配置管理、支持版本控制与回滚。
这一顺序在源码中有清晰的实现证据。以 Alpha Vantage 为例,alpha_vantage_common.py 的get_api_key()依次执行三步查找:先通过_get_api_key_from_database()查询system_configs集合中is_active: True的最新版本配置,找到type == 'alpha_vantage'且非your_占位符的api_key即返回;再从环境变量ALPHA_VANTAGE_API_KEY读取;最后回退到ConfigManager的配置文件。三步全部失败才抛出ValueError,并在错误信息中给出三种配置途径的提示。同样,USDataSourceManager._check_available_sources()在检查 Alpha Vantage 与 Finnhub 可用性时,也是「优先从数据库配置读取 API Key,其次从环境变量读取」(见 data_source_manager.py)。
值得注意的是,optimized.py 中 Finnhub 的 API Key 读取路径为os.getenv('FINNHUB_API_KEY'),因此配置 Finnhub 时环境变量名必须严格使用FINNHUB_API_KEY,不要使用其他拼写变体。
数据源优先级与自动降级机制
系统会按优先级自动尝试数据源,失败则逐级降级,整体降级链示意如下:
yfinance (优先级 100) ↓ 失败 Alpha Vantage (优先级 90) ↓ 失败 Finnhub (优先级 80) ↓ 失败 OpenAI (特殊处理,如果配置了) ↓ 失败 返回错误日志示例:
📊 [美股基本面] 数据源优先级: ['yfinance', 'alpha_vantage', 'finnhub'] 📊 [yfinance] 获取 AAPL 的基本面数据... ✅ [yfinance] 基本面数据获取成功: AAPL源码级实现原理
降级顺序并非写死,而是由USDataSourceManager._get_data_source_priority_order()动态读取(见 data_source_manager.py):
- 从 MongoDB 的
datasource_groupings集合中查询market_category_id: "us_stocks"且enabled: true的记录,按priority降序排序; - 通过名称映射表(
yfinance/yahoo_finance别名均映射到YFINANCE、alpha_vantage、finnhub)转换为USDataSource枚举; - 过滤掉 MongoDB(它作为最高优先级缓存层不参与降级)以及当前不可用的数据源;
- 若数据库无配置或读取失败,回退到默认顺序
yfinance > alpha_vantage > finnhub,且只保留实际可用的数据源。
数据源的「可用性」判定在_check_available_sources()中完成:yfinance 仅需import yfinance成功;Alpha Vantage 与 Finnhub 则必须同时满足「数据库启用 + API Key 已配置(数据库或环境变量)」两个条件。此外,_get_enabled_sources_from_db()还包含一层名称归一化映射,将数据库中的'alpha vantage'、'yahoo finance'等带空格名称转换为代码使用的下划线形式。
在获取基本面数据的主链路get_fundamentals_openai(ticker, curr_date)(见 interface.py)中,完整的执行顺序是:先按数据源优先级逐个检查缓存(find_cached_fundamentals_data),命中即返回;缓存未命中再按优先级依次调用 Alpha Vantage → yfinance → Finnhub 提供器;若全部失败且配置了OPENAI_API_KEY且后端为openai.com,则特殊回退到 OpenAI 搜索基本面信息;最后才返回错误。该函数会在启动时打印与文档日志一致的优先级顺序行📊 [美股基本面] 数据源优先级: [...]。
优化层:缓存优先与速率控制
optimized.py 中的OptimizedUSDataProvider在优先级链路之上再叠加了两层工程优化:
- 缓存优先:请求股票数据时先按数据源优先级顺序查找各数据源命名的缓存键(如
alpha_vantage、yfinance、finnhub),命中直接返回,避免重复 API 调用;只有force_refresh=True时才跳过缓存强制刷新; - 速率限制自控:通过
_wait_for_rate_limit()控制相邻两次 API 调用的最小间隔(默认 1 秒,可由运行配置TA_US_MIN_API_INTERVAL_SECONDS调整),从客户端主动规避免费版速率限制。
测试配置
配置完成后,可通过以下三个脚本快速验证。
测试 Alpha Vantage 配置
from tradingagents.dataflows.providers.us.alpha_vantage_common import get_api_key try: api_key = get_api_key() print(f"✅ Alpha Vantage API Key 配置成功 (长度: {len(api_key)})") except ValueError as e: print(f"❌ Alpha Vantage API Key 未配置: {e}")测试数据源管理器
from tradingagents.dataflows.data_source_manager import get_us_data_source_manager us_manager = get_us_data_source_manager() print(f"📊 可用数据源: {[s.value for s in us_manager.available_sources]}") print(f"📊 默认数据源: {us_manager.default_source.value}") # 获取优先级顺序 priority_order = us_manager._get_data_source_priority_order("AAPL") print(f"📊 数据源优先级: {[s.value for s in priority_order]}")get_us_data_source_manager()返回全局单例(见 data_source_manager.py),首次调用时完成可用性检查与默认源选择,因此打印的可用数据源直接反映当前数据库启用状态与依赖安装情况,是排查「为什么某数据源没被用到」的最快途径。
测试基本面数据获取
from tradingagents.dataflows.interface import get_fundamentals_openai result = get_fundamentals_openai("AAPL", "2024-01-15") print(result)该调用会完整走一遍缓存检查 → 优先级降级 → OpenAI 兜底的整条链路,任何一步失败都能在日志中看到对应数据源的错误记录。
常见问题
Q1: 为什么推荐使用 yfinance?
A: yfinance 完全免费,无需 API Key,数据质量高,覆盖全球市场,非常适合个人用户和小型项目。
Q2: Alpha Vantage 免费版够用吗?
A: 免费版每天 25 次请求,对于个人用户基本够用。如果需要更高频率,可以升级到付费版。
Q3: 如何切换数据源?
A: 三种方式任选其一:在 Web 后台修改优先级;或者在数据库中修改datasource_groupings集合的priority字段;也可以通过环境变量DEFAULT_US_DATA_SOURCE指定默认源。修改后立即生效,无需重启。
Q4: 数据源失败会怎样?
A: 系统会自动降级到下一个数据源,并在日志中记录失败原因。若所有数据源均失败且配置了 OpenAI,还会尝试 OpenAI 搜索作为最终兜底。
Q5: 可以禁用某个数据源吗?
A: 可以,在datasource_groupings集合中将对应记录的enabled设为false,或在system_configs的data_source_configs中将该数据源的enabled置为false,系统会在可用性检查阶段将其排除。
相关文档
- 美股数据源升级计划
- 数据源管理器核心实现
- 美股基本面获取统一入口
- Alpha Vantage 公共请求模块
- yfinance 数据与技术指标实现
- 优化版美股数据提供器
- 统一数据源编码定义
【免费下载链接】TradingAgents-CN基于多智能体LLM的中文金融交易框架 - TradingAgents中文增强版项目地址: https://gitcode.com/GitHub_Trending/tr/TradingAgents-CN
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考