数据采集层

📎 引用文件

本文引用的文件 - base.py - registry.py - yahoo_loader.py - tushare.py - binance_loader.py - ccxt_loader.py - yahoo_client.py - local_loader.py - env_schema.py - accessor.py

目录

  1. 简介
  2. 项目结构
  3. 核心组件
  4. 架构总览
  5. 详细组件分析
  6. 依赖关系分析
  7. 性能考量
  8. 故障排查指南
  9. 结论
  10. 附录

简介

本文件面向 Vibe-Trading 的数据采集层,系统性说明多数据源接入架构、数据加载器注册机制、统一接口设计、数据格式标准化;详解内置数据源(Yahoo Finance、Tushare、Binance 等)的实现与配置;阐述数据验证规则、错误处理策略与重试机制;提供自定义数据源开发指南(接口实现、数据清洗、性能优化),并展示典型采集流程与故障恢复方案。

项目结构

数据采集层位于 agent/backtest/loaders 目录下,采用“协议 + 注册表 + 具体加载器”的分层组织: - base.py:定义 DataLoaderProtocol 协议、通用校验、重试/预算工具、本地缓存工具。 - registry.py:维护全局加载器注册表、市场级回退链、自动解析逻辑。 - 各数据源加载器:如 yahoo_loader.py、tushare.py、binance_loader.py、ccxt_loader.py、local_loader.py 等,均通过 @register 装饰器自注册。 - 客户端封装:如 yahoo_client.py,对第三方 HTTP 端点进行节流、会话复用、认证握手等封装。 - 配置中心:src/config/env_schema.py 集中管理环境变量与默认值;accessor.py 提供线程安全的单例访问。

graph TB subgraph "加载器协议与基础设施" Base["base.py<br/>协议/校验/重试/缓存"] Reg["registry.py<br/>注册表/回退链"] end subgraph "数据源加载器" Yahoo["yahoo_loader.py"] Tushare["tushare.py"] Binance["binance_loader.py"] CCXT["ccxt_loader.py"] Local["local_loader.py"] end subgraph "外部客户端" YClient["yahoo_client.py"] end subgraph "配置" EnvSchema["env_schema.py"] Accessor["accessor.py"] end Base --> Yahoo Base --> Tushare Base --> Binance Base --> CCXT Base --> Local Yahoo --> YClient Binance --> CCXT Reg --> Yahoo Reg --> Tushare Reg --> Binance Reg --> CCXT Reg --> Local EnvSchema --> Accessor Yahoo -.-> EnvSchema Tushare -.-> EnvSchema CCXT -.-> EnvSchema Local -.-> EnvSchema

图表来源 - base.py:618-645 - registry.py:23-155 - yahoo_loader.py:173-189 - tushare.py:116-138 - binance_loader.py:23-45 - ccxt_loader.py:184-224 - yahoo_client.py:156-205 - env_schema.py:153-198 - accessor.py:52-76

章节来源 - base.py:1-645 - registry.py:1-249

核心组件

章节来源 - base.py:31-119 - base.py:163-236 - base.py:243-439 - registry.py:127-193 - env_schema.py:153-198

架构总览

下图展示了从上层调用到具体数据源的完整链路,包括注册、回退、重试、缓存与数据标准化。

sequenceDiagram participant Caller as "调用方" participant Reg as "registry.resolve_loader" participant Loader as "DataLoader.fetch" participant Cache as "base.cached_loader_fetch" participant Provider as "外部API/本地文件" participant Validator as "base.validate_ohlc" Caller->>Reg : 指定 market/source Reg-->>Caller : 返回可用加载器实例 Caller->>Loader : fetch(codes, start, end, interval, fields) Loader->>Cache : 尝试读取本地缓存 alt 缓存命中 Cache-->>Loader : DataFrame else 缓存未命中 Loader->>Provider : 拉取原始数据 Provider-->>Loader : 原始行/帧 Loader->>Validator : 校验OHLC/日期 Validator-->>Loader : 标准化DataFrame Loader->>Cache : 写入缓存(可选) end Loader-->>Caller : {symbol : DataFrame}

图表来源 - registry.py:158-193 - base.py:401-439 - base.py:50-119 - yahoo_loader.py:191-238 - tushare.py:139-202 - ccxt_loader.py:226-308 - local_loader.py:249-295

详细组件分析

统一接口与数据格式标准化

章节来源 - base.py:618-645 - base.py:31-119 - yahoo_loader.py:125-170 - tushare.py:204-265 - ccxt_loader.py:426-501 - local_loader.py:136-184

数据加载器注册机制与回退链

flowchart TD Start(["开始"]) --> Ensure["_ensure_registered()"] Ensure --> Chain{"获取市场回退链"} Chain --> TryNext["遍历候选源"] TryNext --> Construct["构造加载器实例"] Construct --> Avail{"is_available()?"} Avail --> |是| Return["返回加载器"] Avail --> |否| Next["下一个候选"] Next --> |有| TryNext Next --> |无| Error["抛出 NoAvailableSourceError"]

图表来源 - registry.py:71-115 - registry.py:127-193

章节来源 - registry.py:1-249

内置数据源实现与配置

Yahoo Finance(yahoo_loader + yahoo_client)

章节来源 - yahoo_loader.py:1-271 - yahoo_client.py:1-419 - env_schema.py:153-198

Tushare(A股/港股/期货/基金)

章节来源 - tushare.py:1-383 - env_schema.py:153-198

Binance(加密货币现货/永续合约)

章节来源 - binance_loader.py:1-45 - ccxt_loader.py:1-502 - env_schema.py:153-198

CCXT(通用交易所)

章节来源 - ccxt_loader.py:1-502

Local(本地 CSV/Parquet/DuckDB)

章节来源 - local_loader.py:1-354

数据验证规则、错误处理与重试机制

章节来源 - base.py:31-119 - base.py:163-236 - tushare.py:18-79 - ccxt_loader.py:50-57 - ccxt_loader.py:426-501

自定义数据源开发指南

章节来源 - base.py:618-645 - base.py:401-439 - registry.py:62-68 - yahoo_client.py:1-419

典型数据采集流程与故障恢复

sequenceDiagram participant U as "用户" participant R as "registry" participant L as "loader" participant C as "cache" participant P as "provider" U->>R : resolve_loader(market) R-->>U : 加载器实例 U->>L : fetch(codes, start, end, interval) L->>C : 读取缓存 alt 命中 C-->>L : DataFrame else 未命中 L->>P : 拉取数据 P-->>L : 原始数据 L->>L : 清洗/校验(validate_ohlc) L->>C : 写入缓存(可选) end L-->>U : {symbol : DataFrame}

图表来源 - registry.py:158-193 - base.py:401-439 - base.py:50-119

依赖关系分析

graph LR Base["base.py"] --> Reg["registry.py"] Base --> Yahoo["yahoo_loader.py"] Base --> Tushare["tushare.py"] Base --> Binance["binance_loader.py"] Base --> CCXT["ccxt_loader.py"] Base --> Local["local_loader.py"] Yahoo --> YClient["yahoo_client.py"] Binance --> CCXT Env["env_schema.py"] --> Acc["accessor.py"] Yahoo -.-> Env Tushare -.-> Env CCXT -.-> Env Local -.-> Env

图表来源 - base.py:618-645 - registry.py:23-155 - yahoo_loader.py:173-189 - tushare.py:116-138 - binance_loader.py:23-45 - ccxt_loader.py:184-224 - yahoo_client.py:156-205 - env_schema.py:153-198 - accessor.py:52-76

章节来源 - registry.py:1-249 - base.py:1-645

性能考量

[本节为通用指导,不直接分析具体文件]

故障排查指南

章节来源 - registry.py:158-193 - base.py:31-119 - tushare.py:18-79 - ccxt_loader.py:50-57

结论

Vibe-Trading 的数据采集层通过统一的协议、注册表与回退链实现了多数据源的灵活接入;借助标准化的数据验证、重试与缓存机制,保障了稳定性与性能。内置 Yahoo、Tushare、Binance/CCXT、Local 等加载器覆盖主流市场与场景;配置中心集中管理凭据与调优参数。遵循本文的开发指南,可快速扩展新的数据源并保持系统一致性与健壮性。

[本节为总结,不直接分析具体文件]

附录

章节来源 - env_schema.py:153-198