
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限制定位yfinanceYahoo Finance股票价格、技术指标、基本面信息完全免费不需要无严格限制推荐默认主力源Alpha VantageAlpha Vantage基本面数据、新闻、内部人交易免费版 25 请求/天付费版无限制需要免费申请免费版有速率限制推荐基本面与新闻增强FinnhubFinnhub股票价格、基本面、新闻免费版 60 请求/分钟付费版无限制需要免费申请免费版有速率限制备用数据源在源码中这四类来源被统一抽象为USDataSource枚举见 data_source_manager.py并与 data_sources.py 中的统一数据源编码DataSourceCodeYFINANCE 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.pyclose_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_KEYyour_alpha_vantage_api_key_here # Finnhub API Key FINNHUB_API_KEYyour_finnhub_api_key_here # 默认美股数据源可选 DEFAULT_US_DATA_SOURCEyfinance其中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_refreshTrue时才跳过缓存强制刷新速率限制自控通过_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: 为什么推荐使用 yfinanceA: 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),仅供参考