连接器架构

📎 引用文件

本文引用的文件 - service.py - profiles.py - types.py - trading_connector_tool.py - alpaca/sdk.py - tiger/sdk.py - binance/sdk.py

目录

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

简介

本文件系统性阐述 Vibe-Trading 的“连接器架构”,聚焦以下目标: - 连接器抽象层设计与统一接口规范 - 连接池与生命周期管理(以配置加载、环境隔离、健康检查为核心) - 注册机制、配置验证与错误处理策略 - 如何定义新的连接器类型(含具体示例路径) - 核心方法、参数与返回值约定 - 与交易系统其他组件的集成方式(工具层、服务层、风控与审计) - 多券商支持与扩展机制 - 常见连接问题及解决方案

项目结构

Vibe-Trading 将“连接器”按券商/平台拆分到独立模块,并通过统一的“服务层”对外暴露一致的交易能力。顶层结构如下: - 工具层:面向 CLI/MCP/Agent 的工具类,负责参数校验、选择默认连接、调用服务层 - 服务层:根据 profile 的 transport 路由到 local_tws、broker_sdk 或 remote_mcp;对 broker_sdk 通过映射表动态导入对应 SDK 模块 - 连接器实现:每个券商一个 sdk.py,提供 build_config、check_status、get_account_snapshot、get_positions、get_open_orders、get_quote、get_historical_bars、place_order、cancel_order 等统一接口 - 配置与注册:profiles.py 汇总各券商内置 profiles;types.py 定义 TradingProfile 数据模型

graph TB Tools["交易工具层<br/>trading_connector_tool.py"] --> Service["交易服务层<br/>service.py"] Service --> Profiles["配置与注册<br/>profiles.py / types.py"] Service --> SDK_Alpha["Alpaca SDK<br/>connectors/alpaca/sdk.py"] Service --> SDK_Tiger["Tiger SDK<br/>connectors/tiger/sdk.py"] Service --> SDK_Binance["Binance SDK<br/>connectors/binance/sdk.py"] Service --> Local["本地 TWS<br/>connectors/ibkr/local.py"]

图表来源 - service.py:17-29 - profiles.py:27-41 - trading_connector_tool.py:139-174

章节来源 - service.py:17-29 - profiles.py:27-41 - types.py:20-52 - trading_connector_tool.py:139-174

核心组件

章节来源 - service.py:17-29 - profiles.py:20-41 - types.py:20-52 - trading_connector_tool.py:208-260

架构总览

下图展示从工具到服务再到具体连接器的调用链,以及 live 下单时的风控与审计路径。

sequenceDiagram participant U as "用户/Agent" participant T as "交易工具<br/>trading_connector_tool.py" participant S as "服务层<br/>service.py" participant M as "连接器模块<br/>sdk.py" participant G as "风控与审计<br/>mandate/killswitch/audit" U->>T : 调用 trading_place_order(...) T->>S : place_order(symbol, side, quantity/notional, ...) S->>S : 解析profile/transport alt transport == broker_sdk S->>M : build_config(profile.config, overrides) alt environment == paper S->>M : place_order(config, ...) M-->>S : {status : "ok", order_id,...} else environment == live S->>G : OrderIntent + execute_live_order(...) G-->>S : 授权/阻断 S->>M : place_order(config, ...) M-->>S : {status : "ok", order_id,...} end else transport == local_tws/remote_mcp S-->>T : 不支持/远程调用 end S-->>T : 标准化结果 T-->>U : JSON 响应

图表来源 - service.py:279-342 - service.py:377-413 - trading_connector_tool.py:431-504

详细组件分析

服务层(service.py):统一路由与能力分发

flowchart TD Start(["进入 service 函数"]) --> P["解析 profile_by_id()"] P --> T{"transport?"} T --> |local_tws| L["调用 ibkr.local.*"] T --> |broker_sdk| B["动态导入 SDK 模块"] T --> |remote_mcp| R["远程调用"] B --> W{"write?"} W --> |否| Read["read 操作 -> module.*"] W --> |是| Live{"environment==live?"} Live --> |否| Paper["paper 直连 module.place/cancel"] Live --> |是| Gate["mandate + killswitch + audit"] Gate --> Exec["module.place/cancel"] Read --> End(["返回标准化结果"]) Paper --> End Exec --> End

图表来源 - service.py:42-117 - service.py:279-342 - service.py:377-413

章节来源 - service.py:17-29 - service.py:42-117 - service.py:279-342 - service.py:377-413

配置与注册(profiles.py / types.py)

classDiagram class TradingProfile { +string id +string connector +string label +Environment environment +Transport transport +tuple capabilities +bool readonly +dict config +string notes +to_dict(selected) dict }

图表来源 - types.py:20-52

章节来源 - profiles.py:27-41 - profiles.py:44-100 - types.py:20-52

工具层(trading_connector_tool.py):参数校验与调用封装

sequenceDiagram participant C as "调用方" participant Tool as "TradingPlaceOrderTool" participant Svc as "service.place_order" C->>Tool : 执行 execute(**kwargs) Tool->>Tool : 校验 quantity/notional/limit_price Tool->>Svc : place_order(symbol, connection, side, ...) Svc-->>Tool : 标准化结果 Tool-->>C : JSON 响应

图表来源 - trading_connector_tool.py:139-174 - trading_connector_tool.py:431-504

章节来源 - trading_connector_tool.py:139-174 - trading_connector_tool.py:208-260 - trading_connector_tool.py:431-504

连接器实现:Alpaca(alpaca/sdk.py)

flowchart TD AStart["Alpaca 下单入口"] --> V["参数校验<br/>symbol/side/order_type/tif/qty-or-notional"] V --> |通过| H{"TAP 启用?"} H --> |是| Tap["通过 TAP 代理提交订单"] H --> |否| Direct["直接 alpaca-py 提交"] Tap --> R["返回标准化结果"] Direct --> R

图表来源 - alpaca/sdk.py:143-151 - alpaca/sdk.py:261-296 - alpaca/sdk.py:429-577 - alpaca/sdk.py:580-665

章节来源 - alpaca/sdk.py:65-151 - alpaca/sdk.py:261-296 - alpaca/sdk.py:429-577 - alpaca/sdk.py:580-665

连接器实现:Tiger(tiger/sdk.py)

flowchart TD TStart["Tiger 下单入口"] --> TV["参数校验<br/>side/qty-or-notional/order_type/limit_price/tif"] TV --> |通过| TG["环境校验<br/>_assert_profile"] TG --> TSubmit["构建订单并提交"] TSubmit --> TReturn["返回标准化结果"]

图表来源 - tiger/sdk.py:126-146 - tiger/sdk.py:186-230 - tiger/sdk.py:333-489 - tiger/sdk.py:591-607

章节来源 - tiger/sdk.py:61-146 - tiger/sdk.py:186-230 - tiger/sdk.py:333-489 - tiger/sdk.py:591-607

连接器实现:Binance(binance/sdk.py)

flowchart TD BStart["Binance 下单入口"] --> BV["参数校验<br/>side/order_type/qty-or-notional/limit_price"] BV --> |通过| BH["host 白名单校验<br/>_assert_host"] BH --> BSubmit["ccxt create_order"] BSubmit --> BReturn["返回标准化结果"]

图表来源 - binance/sdk.py:157-177 - binance/sdk.py:217-264 - binance/sdk.py:423-547 - binance/sdk.py:643-662

章节来源 - binance/sdk.py:82-177 - binance/sdk.py:217-264 - binance/sdk.py:423-547 - binance/sdk.py:643-662

依赖关系分析

graph LR Tools["工具层"] --> Service["服务层"] Service --> Profiles["profiles.py"] Service --> Types["types.py"] Service --> Alpaca["alpaca/sdk.py"] Service --> Tiger["tiger/sdk.py"] Service --> Binance["binance/sdk.py"]

图表来源 - service.py:17-29 - profiles.py:27-41 - types.py:20-52

章节来源 - service.py:17-29 - profiles.py:27-41 - types.py:20-52

性能考虑

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

故障排查指南

章节来源 - profiles.py:54-83 - alpaca/sdk.py:261-296 - tiger/sdk.py:186-230 - binance/sdk.py:217-264 - binance/sdk.py:550-600

结论

Vibe-Trading 的连接器架构通过“工具层—服务层—连接器模块”的分层设计,实现了: - 统一接口与能力分发,屏蔽底层券商差异 - 严格的配置与注册机制,保证 profile 可发现、可切换 - 强大的安全与合规保障:paper/live 环境隔离、mandate/killswitch 前置、审计记录 - 可扩展的多券商支持:新增连接器只需实现标准接口并注册到 profiles 与服务层映射表

附录

如何定义新的连接器类型(步骤与要点)

章节来源 - service.py:17-29 - profiles.py:27-41 - trading_connector_tool.py:208-260

核心方法与参数/返回值约定

章节来源 - alpaca/sdk.py:299-426 - alpaca/sdk.py:429-577 - alpaca/sdk.py:668-747 - tiger/sdk.py:233-319 - tiger/sdk.py:333-489 - tiger/sdk.py:492-541 - binance/sdk.py:267-405 - binance/sdk.py:423-547 - binance/sdk.py:550-600

与交易系统其他组件的集成

章节来源 - trading_connector_tool.py:208-260 - service.py:279-342 - service.py:377-413