
如何在Vibe-Trading注册自定义数据加载器DataLoader协议实战指南【免费下载链接】Vibe-TradingVibe-Trading: Your Personal Trading Agent项目地址: https://gitcode.com/GitHub_Trending/vi/Vibe-TradingVibe-Trading 是一个开源的个人交易智能体Personal Trading Agent内置了 20 个跨市场数据加载器覆盖 A股、美股、加密货币、外汇等。但如果你想接入自己的券商接口、私有行情源或某个尚未被支持的新市场就需要编写并注册一个自定义数据加载器。本文将带你基于DataLoader协议快速完成从编写、注册到接入回退链的完整流程。为什么需要自定义数据加载器Vibe-Trading 的每个市场都配有一条回退链fallback chain当某个数据源不可用时系统会自动尝试下一个。例如 A股的链路是a_share: tencent → mootdx → eastmoney → baostock → akshare → tushare → local定义见 registry.py如果你的私有数据源不在链上回测就无法使用它。自定义加载器的价值在于接入私有行情券商 API、内部数据库、自建 CSV 服务统一回退你的数据源和官方源享受同一条容错链路格式标准化复用协议边界上的日期校验、OHLC 清洗、缓存与重试工具第一步认识 DataLoader 协议所有加载器都实现同一个结构化协议定义在 base.py 中成员类型作用name类属性str数据源唯一标识如stooq、localmarkets类属性set[str]支持的市场如{us_equity}、{crypto}requires_auth类属性bool是否需要 API Key 等凭据is_available()方法返回True表示当前可用凭据齐全、网络正常fetch()方法拉取 OHLCV 数据返回{symbol: DataFrame}fetch()的标准签名与返回值约定如下def fetch(self, codes, start_date, end_date, *, interval1D, fieldsNone): # 返回 {symbol: DataFrame(trade_date, open, high, low, close, volume)}协议还允许一个可选的类属性volume_units用于按市场声明成交量单位手/股避免不同来源混用时信号被悄悄缩放。第二步编写你的加载器以项目中自带的最简网络加载器 stooq_loader.py 为范本核心骨架如下from backtest.loaders.base import validate_date_range from backtest.loaders.registry import register register class DataLoader: name my_source # 1. 唯一名称 markets {us_equity} # 2. 支持的市场 requires_auth True def is_available(self) - bool: # 3. 检查凭据/依赖是否就绪 return bool(os.getenv(MY_SOURCE_API_KEY)) def fetch(self, codes, start_date, end_date, *, interval1D, fieldsNone): # 4. 校验日期区间 → 拉取 → 标准化列名 → 返回 validate_date_range(start_date, end_date) ... return {symbol: df}对照参考实现时建议留意 local_loader.py 中local加载器的写法——它展示了如何覆盖多个市场markets集合涵盖全部市场以及如何读取用户配置文件。小提示如果只是想回测自己的本地文件CSV / Parquet / DuckDB其实不需要写代码——local加载器通过~/.vibe-trading/data-bridge/config.yaml即可接入配置示例见 local_loader.py 的文件头注释。第三步注册到全局加载器注册表加载器通过register装饰器自我注册实现见 registry.py。完整落地需要改三处新建模块文件在agent/backtest/loaders/下创建my_source_loader.py放入上一步的加载器类声明合法来源把my_source加入VALID_SOURCES集合registry.py这样回测配置 schema 与 Agent 工具才能识别它加入懒加载列表把模块路径backtest.loaders.my_source_loader追加到_loader_modules列表registry.py保证首次调用时注册器自动导入、register装饰器生效之后系统内所有取数入口Agent 的get_market_data工具、回测运行器、相关性面板等都能通过注册表找到你的加载器。第四步接入回退链打开FALLBACK_CHAINS映射将你的来源插入目标市场的链中registry.pyFALLBACK_CHAINS { us_equity: [yahoo, stooq, sina, my_source, local], ... }链的顺序有讲究项目按IP 封禁风险排序——无鉴权的公开端点靠前需要 Key、易限流的源靠后。你的私有源通常更稳定可以放在链的中后段让公开源先探路。resolve_loader()会依次实例化候选并调用is_available()返回第一个可用的registry.py。注意一个特殊机制像local这样代表用户明确指定的源位于_NO_NETWORK_FALLBACK_SOURCES中不可用时不会悄悄降级到网络源而是直接报错——如果你的私有源有不可静默替换的诉求可参考此设计registry.py。善用协议提供的工具函数base.py 里沉淀了一批加载器边界标准工具强烈建议复用validate_date_range()校验起止日期格式错误或倒置直接抛ValueErrorvalidate_ohlc()结构性脏数据high low、非正价格在加载器出口统一清洗避免坏数据污染回测指标retry_with_budget()/check_budget()带截止时间与退避调度的有界重试专治不稳定的外部 APIccxt、okx 等加载器都基于它实现cached_loader_fetch()可选的本地 parquet 缓存包装环境变量VIBE_TRADING_DATA_CACHE开启自动跳过最后一根 K 线还在形成中的区间对于走 HTTP 的加载器还可以复用 _http.py 中的限流 GET按主机桶做最小请求间隔避免触发对方 IP 限频。编写回归测试项目为每个加载器都配了专门的测试文件如 test_stooq_loader.py。建议你至少覆盖三点✅is_available()在缺少凭据时返回False✅fetch()返回的 DataFrame 列名、索引符合协议约定✅ 注册后VALID_SOURCES与_loader_modules全覆盖项目已有test_valid_sources_covers_all_registered_loaders守护这一不变量常见问题 FAQQ加载器依赖的第三方库没安装会怎样A_ensure_registered()导入失败会静默跳过该模块回退链继续走下一个候选不会让主流程崩溃。Q如何调试我的源没被选中A先确认name已加入VALID_SOURCES、模块已进_loader_modules再看is_available()是否返回True最后检查回退链里前面是否已有更靠前的可用源。Q支持分钟级数据吗A支持。fetch()的interval参数可取1m、5m、1h、4h、1D等本地加载器会自动做 OHLCV 重采样local_loader.py。总结注册自定义数据加载器的完整路径可以概括为四步按DataLoader协议实现name/markets/is_available()/fetch()用register装饰器自我注册在VALID_SOURCES与_loader_modules中登记把来源插入对应市场的FALLBACK_CHAINS核心源码都集中在 agent/backtest/loaders/ 目录配合官方文档 docs/official.md 中的说明你完全可以参照现成范本一小时内把私有行情源接进 Vibe-Trading 的回测体系。【免费下载链接】Vibe-TradingVibe-Trading: Your Personal Trading Agent项目地址: https://gitcode.com/GitHub_Trending/vi/Vibe-Trading创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考