Skip to content

Latest commit

 

History

History
505 lines (425 loc) · 16.7 KB

File metadata and controls

505 lines (425 loc) · 16.7 KB

bt_api_py 源代码树分析

生成日期:2026-03-08 扫描级别:Exhaustive(详尽扫描) 项目类型:Python Library 总文件数:764个Python源文件 + 212个测试文件


项目根目录结构

bt_api_py/                              # 项目根目录
├── bt_api_py/                          # 主要Python包 [核心代码]
│   ├── __init__.py                     # 包入口,导出主要API
│   ├── bt_api.py                       # BtApi主类 - 统一API入口 [入口点]
│   ├── registry.py                     # ExchangeRegistry - 交易所注册表 [核心架构]
│   ├── event_bus.py                    # EventBus - 事件总线 [核心架构]
│   ├── exceptions.py                   # 自定义异常层次结构 [错误处理]
│   ├── auth_config.py                  # 认证配置类 [配置管理]
│   │
│   ├── containers/                     # 标准化数据容器 [数据层]
│   │   ├── __init__.py                 # 导出所有容器类型
│   │   ├── auto_init_mixin.py          # 自动初始化混入类 [基础类]
│   │   ├── instrument.py               # 合约工具类
│   │   │
│   │   ├── accounts/                   # 账户信息容器
│   │   ├── assets/                     # 资产容器
│   │   ├── balances/                   # 余额容器
│   │   ├── bars/                       # K线数据容器
│   │   ├── exchanges/                  # 交易所配置容器
│   │   ├── fundingrates/               # 资金费率容器
│   │   ├── greeks/                     # 期权希腊值容器
│   │   ├── incomes/                    # 收益容器
│   │   ├── liquidations/               # 强平容器
│   │   ├── markprices/                 # 标记价格容器
│   │   ├── openinterests/              # 持仓量容器
│   │   ├── orderbooks/                 # 订单簿容器
│   │   ├── orders/                     # 订单容器 [交易核心]
│   │   │   ├── order.py                # 订单基类
│   │   │   ├── binance_order.py        # Binance订单实现
│   │   │   ├── okx_order.py            # OKX订单实现
│   │   │   ├── ctp_order.py            # CTP订单实现
│   │   │   └── ...                     # 其他交易所订单
│   │   ├── pools/                      # 流动性池容器
│   │   ├── positions/                  # 持仓容器 [交易核心]
│   │   ├── pricelimits/                # 价格限制容器
│   │   ├── requestdatas/               # 请求数据容器
│   │   ├── symbols/                    # 交易对容器
│   │   ├── tickers/                    # 行情容器 [市场数据]
│   │   ├── timers/                     # 定时器容器
│   │   ├── trades/                     # 成交容器 [交易核心]
│   │   ├── ctp/                        # CTP特有容器
│   │   └── ib/                         # IB特有容器
│   │
│   ├── feeds/                          # 交易所Feed实现 [集成层]
│   │   ├── __init__.py                 # Feed基类和工具
│   │   ├── registry.py                 # Feed注册表
│   │   ├── abstract_feed.py            # 抽象Feed协议 [接口定义]
│   │   │
│   │   ├── live_binance/               # Binance实现 [完整支持]
│   │   │   ├── spot.py                 # 现货
│   │   │   ├── swap.py                 # 永续合约
│   │   │   └── ...
│   │   │
│   │   ├── live_okx/                   # OKX实现 [完整支持]
│   │   ├── live_htx/                   # HTX (Huobi) 实现 [完整支持]
│   │   │
│   │   ├── live_bybit/                 # Bybit实现
│   │   ├── live_bitget/                # Bitget实现
│   │   ├── live_kraken/                # Kraken实现
│   │   ├── live_gate/                  # Gate.io实现
│   │   ├── live_upbit/                 # Upbit实现
│   │   ├── live_cryptocom/             # Crypto.com实现
│   │   ├── live_kucoin/                # KuCoin实现
│   │   ├── live_mexc/                  # MEXC实现
│   │   ├── live_bitfinex/              # Bitfinex实现
│   │   ├── live_coinbase/              # Coinbase实现
│   │   ├── live_dydx/                  # dYdX实现
│   │   ├── live_hyperliquid/           # Hyperliquid实现
│   │   ├── live_bydfi/                 # BYDFi实现
│   │   └── ... (73+ exchanges total)   # 其他70+交易所
│   │
│   ├── ctp/                            # CTP期货API [C++扩展]
│   │   ├── __init__.py                 # CTP包入口
│   │   ├── _ctp.so                     # SWIG编译的C++绑定
│   │   ├── ctp.py                      # SWIG生成的包装
│   │   ├── api/                        # CTP API封装
│   │   │   ├── market_api.py           # 行情API
│   │   │   └── trader_api.py           # 交易API
│   │   ├── thostmduserapi_se.framework # macOS行情库
│   │   └── thosttraderapi_se.framework # macOS交易库
│   │
│   ├── functions/                      # 功能函数 [业务逻辑]
│   │   ├── calculate_number.py         # 数值计算 (Cython)
│   │   ├── timer_event.py              # 定时器事件
│   │   └── ...
│   │
│   ├── utils/                          # 工具函数 [辅助工具]
│   │   ├── tools.py                    # 通用工具
│   │   └── ...
│   │
│   ├── configs/                        # 配置文件
│   │   └── account_config.yaml         # 账户配置模板
│   │
│   ├── errors/                         # 错误定义 (已弃用,使用exceptions.py)
│   │
│   └── exchange_registers/             # 交易所注册模块 [自动加载]
│       ├── register_binance.py         # 注册Binance
│       ├── register_okx.py             # 注册OKX
│       ├── register_htx.py             # 注册HTX
│       ├── register_ctp.py             # 注册CTP
│       ├── register_ib.py              # 注册IB
│       └── ...                         # 其他交易所注册
│
├── tests/                              # 测试套件 [质量保证]
│   ├── conftest.py                     # pytest配置和fixtures
│   │
│   ├── feeds/                          # Feed测试
│   │   ├── test_live_binance_spot.py   # Binance现货测试
│   │   ├── test_live_binance_swap.py   # Binance合约测试
│   │   ├── test_live_okx_*.py          # OKX测试
│   │   └── ...
│   │
│   ├── containers/                     # 容器测试
│   │   ├── orders/
│   │   ├── tickers/
│   │   └── ...
│   │
│   ├── test_registry.py                # Registry测试
│   ├── test_event_bus.py               # EventBus测试
│   └── ...                             # 其他测试
│
├── docs/                               # 文档 [用户指南]
│   ├── index.md                        # 文档主页
│   ├── requirements.txt                # 文档依赖
│   │
│   ├── getting-started/                # 入门指南
│   │   ├── installation.md
│   │   ├── quickstart.md
│   │   └── ...
│   │
│   ├── guides/                         # 使用指南
│   │   ├── usage_guide.md
│   │   ├── best_practices.md
│   │   └── ...
│   │
│   ├── reference/                      # API参考
│   │   ├── bt_api.md
│   │   ├── registry.md
│   │   ├── data_containers.md
│   │   └── ...
│   │
│   ├── explanation/                    # 深度解读
│   │   ├── architecture.md
│   │   └── ...
│   │
│   └── exchanges/                      # 交易所文档
│       ├── binance/
│       ├── okx/
│       ├── ctp/
│       └── ib/
│
├── scripts/                            # 脚本 [开发工具]
│   └── split_ctp_wrapper.py            # CTP包装拆分脚本
│
├── configs/                            # 项目配置 (示例)
│
├── examples/                           # 示例代码
│
├── site/                               # 文档站点
│
├── .github/                            # GitHub配置
│   └── workflows/                      # CI/CD工作流
│
├── pyproject.toml                      # 项目配置 [核心配置]
├── setup.py                            # 安装脚本 [构建配置]
├── Makefile                            # 常用命令 [开发工具]
├── scripts/run_tests.sh                        # 测试运行脚本 [测试工具]
├── conftest.py                         # pytest全局配置
├── README.md                           # 项目说明 [主要文档]
├── CONTRIBUTING.md                     # 贡献指南 [开发指南]
├── CHANGELOG.md                        # 变更日志
└── AGENTS.md                           # AI代理指南 [AI开发]

关键目录详解

1. 核心包 (bt_api_py/)

主要组件:

  • bt_api.py - BtApi主类,统一API入口
  • registry.py - 交易所注册表,实现即插即用
  • event_bus.py - 事件总线,支持发布/订阅模式
  • exceptions.py - 完整的异常层次结构

设计模式:

  • Registry Pattern(注册表模式)
  • Event-Driven Architecture(事件驱动架构)
  • Protocol-based Abstraction(协议抽象)

2. 数据容器 (containers/)

27种标准化容器:

  • 市场数据:tickers, bars, orderbooks, markprices, fundingrates
  • 交易数据:orders, trades, positions, balances, accounts
  • 配置数据:symbols, exchanges, assets
  • 特殊数据:greeks, liquidations, openinterests, pools

特点:

  • 统一的接口(get_*方法)
  • 自动初始化(AutoInitMixin)
  • 交易所特定实现

3. 交易所集成 (feeds/)

73+交易所实现:

  • 完整支持:Binance, HTX, CTP, IB
  • REST API:17个交易所
  • 已注册框架:40+个交易所

架构:

  • 抽象协议(AbstractFeed)
  • 统一注册机制
  • 支持同步/异步/WebSocket三种模式

4. CTP扩展 (ctp/)

特点:

  • SWIG C++绑定
  • 平台特定库(Linux/Windows/macOS)
  • 拆分包装(自动生成子模块)

支持:

  • 上期所(SHFE)
  • 大商所(DCE)
  • 郑商所(CZCE)
  • 中金所(CFFEX)

5. 测试套件 (tests/)

测试策略:

  • 212个测试文件
  • pytest + xdist(并行测试)
  • 测试标记:unit, integration, slow, network
  • 交易所特定标记:binance, okx, ctp, ib

覆盖率:

  • 目标:>80%
  • HTML报告:htmlcov/index.html

关键入口点

1. 用户API入口

from bt_api_py import BtApi

api = BtApi(exchange_kwargs={...})
ticker = api.get_tick("BINANCE___SPOT", "BTCUSDT")

2. 交易所注册

from bt_api_py import ExchangeRegistry

ExchangeRegistry.register_feed("NEW___SPOT", NewFeed)
feed = ExchangeRegistry.create_feed("NEW___SPOT", queue)

3. 事件订阅

from bt_api_py import EventBus

bus = EventBus()
bus.subscribe("ticker", callback)
bus.publish("ticker", data)

4. 数据容器使用

from bt_api_py.containers.orders import BinanceOrderData

order = BinanceOrderData(order_info, has_been_json_encoded=True)
order.init_data()
symbol = order.get_symbol()

集成点分析

1. 交易所 → 数据容器

  • Feed获取原始数据
  • 创建对应的容器实例
  • 调用init_data()解析
  • 推送到data_queue

2. 用户代码 → BtApi

  • 配置exchange_kwargs
  • 调用统一API方法
  • 获取标准化容器
  • 处理数据或错误

3. 事件流 → EventBus

  • Feed发布市场事件
  • 用户订阅感兴趣的事件
  • 回调处理业务逻辑

文件组织模式

1. 按类型组织

  • containers/ - 数据结构
  • feeds/ - 交易所集成
  • functions/ - 业务逻辑
  • utils/ - 工具函数

2. 按交易所组织

  • feeds/live_{exchange}/ - 交易所特定实现
  • containers/{type}/{exchange}_{type}.py - 交易所特定容器
  • exchange_registers/register_{exchange}.py - 自动注册

3. 按功能组织

  • ctp/ - CTP特有功能
  • configs/ - 配置管理
  • errors/ - 错误处理(已废弃)

开发工作流

1. 添加新交易所

1. bt_api_py/feeds/live_{exchange}/
2. 实现AbstractFeed协议
3. bt_api_py/containers/中添加特定容器(如需要)
4. bt_api_py/exchange_registers/register_{exchange}.py
5. tests/feeds/test_live_{exchange}_*.py

2. 添加新数据类型

1. bt_api_py/containers/{type}/
2. 创建基类{type}.py
3. 实现交易所特定类
4. tests/containers/{type}/

3. 运行测试

make test                    # 所有测试
make test-fast               # 快速测试
pytest tests/test_file.py    # 单个文件

代码导航建议

对于新开发者

  1. README.mddocs/getting-started/quickstart.md 开始
  2. 查看 bt_api_py/bt_api.py 了解主API
  3. 阅读 bt_api_py/registry.py 理解注册机制
  4. 研究 bt_api_py/containers/orders/ 学习容器模式

对于贡献者

  1. 阅读 CONTRIBUTING.md 了解贡献流程
  2. 查看 AGENTS.md 了解代码风格
  3. 研究 tests/ 了解测试模式
  4. 参考现有交易所实现添加新交易所

对于AI代理

  1. 优先阅读 AGENTS.md 获取开发规则
  2. 查看 _bmad-output/project-context.md 获取关键信息
  3. 遵循命名约定:EXCHANGE___TYPE
  4. 使用自定义异常,不要使用通用Exception

架构约束

1. 命名约定

  • 交易所:EXCHANGE___TYPE (如 BINANCE___SPOT)
  • 文件:snake_case (如 binance_order.py)
  • 类:PascalCase (如 BinanceOrderData)
  • 方法:snake_case (如 get_symbol)

2. 设计原则

  • 开闭原则:通过Registry扩展,不修改核心
  • 单一职责:每个容器负责一种数据类型
  • 依赖倒置:依赖抽象协议,不依赖具体实现

3. 错误处理

  • 使用自定义异常(从 bt_api_py.exceptions 导入)
  • 不使用 assert 进行错误检查
  • 不使用通用 Exception

4. 平台兼容性

  • 支持 Linux x86_64
  • 支持 Windows x64
  • 支持 macOS arm64/x86_64

性能考虑

1. Cython扩展

  • functions/calculate_number.py - 关键计算优化
  • 编译为 .so.pyd 文件

2. C++绑定

  • CTP使用SWIG绑定
  • 平台特定的编译库

3. 异步支持

  • aiohttp用于异步HTTP请求
  • WebSocket用于实时数据流
  • EventBus用于事件分发

测试覆盖率

关键路径

  • ✓ Registry注册和创建
  • ✓ 数据容器初始化和解析
  • ✓ 异常处理和错误传播
  • ✓ EventBus发布/订阅
  • ✓ 交易所Feed实现

集成测试

  • ✓ Binance完整测试
  • ✓ HTX完整测试
  • ✓ CTP完整测试
  • ✓ IB完整测试

依赖关系图

bt_api.py (主API)
    ├── registry.py (交易所注册)
    ├── event_bus.py (事件总线)
    ├── exceptions.py (错误处理)
    └── containers/* (数据容器)
            └── AutoInitMixin (基础类)

feeds/live_* (交易所实现)
    ├── abstract_feed.py (协议)
    ├── registry.py (注册)
    └── containers/* (数据容器)

ctp/ (CTP扩展)
    ├── _ctp.so (C++绑定)
    └── api/* (API封装)

文档结构

用户文档 (docs/)

  • getting-started/ - 入门
  • guides/ - 使用指南
  • reference/ - API参考
  • explanation/ - 深度解读
  • exchanges/ - 交易所文档

开发文档

  • README.md - 项目说明
  • CONTRIBUTING.md - 贡献指南
  • AGENTS.md - AI代理指南
  • _bmad-output/ - BMAD生成文档

总结

项目特点:

  • 🏗️ 清晰的分层架构(数据层/集成层/业务层)
  • 🔌 即插即用的交易所扩展机制
  • 📦 27种标准化数据容器
  • 🌐 73+交易所支持
  • ⚡ 三种API模式(同步/异步/WebSocket)
  • 🧪 完善的测试覆盖(212个测试文件)
  • 📚 完整的文档体系

代码质量:

  • 遵循Python最佳实践
  • 完整的类型提示
  • 自定义异常体系
  • 平台兼容性保证
  • 性能优化(Cython/C++)

可扩展性:

  • Registry模式支持无限扩展
  • 抽象协议定义清晰接口
  • 标准化容器便于复用
  • 模块化设计易于维护