长桥连接器

📎 引用文件

本文引用的文件 - agent/backtest/loaders/longbridge.py - agent/src/trading/connectors/longbridge/sdk.py - agent/src/trading/connectors/longbridge/credentials.py - agent/src/trading/connectors/longbridge/profiles.py - agent/tests/test_longbridge_credentials.py - agent/tests/test_longbridge_loader.py - agent/tests/test_longbridge_runtime.py

目录

  1. 简介
  2. 项目结构
  3. 核心组件
  4. 架构总览
  5. 详细组件分析
  6. 依赖关系分析
  7. 性能与并发
  8. 故障排查指南
  9. 结论
  10. 附录:配置与使用示例路径

简介

本文件面向“长桥连接器”的实现与使用,覆盖多市场支持(A 股、港股、美股)、认证流程、SDK 集成方式、配置选项、RESTful API 与实时数据机制、连接池与并发优化,以及交易与投资组合管理。文档基于仓库中的实际代码进行说明,并提供可追溯的源码引用与图示。

项目结构

长桥连接器由以下关键部分组成: - 回测历史数据加载器:封装 LongPort OpenAPI 的历史 K 线拉取,支持 A 股、港股、美股,按窗口拆分避免截断。 - 交易层 SDK 连接器:提供账户、持仓、订单、行情、历史等只读能力;订单仅支持模拟盘。 - 凭据解析:统一从环境变量或运行时文件原子化解析并校验,防止混用与泄露。 - 内置 Profile:声明纸盘与实盘只读能力,明确传输类型与权限边界。 - 测试:覆盖凭据解析、加载器行为、运行时状态与接口契约。

graph TB subgraph "回测" LB_Loader["LongbridgeLoader<br/>历史K线(多市场)"] end subgraph "交易层" SDK["Longbridge SDK 连接器<br/>账户/持仓/订单/行情/历史"] Creds["凭据解析<br/>环境变量/运行时文件"] Profiles["内置Profile<br/>paper/live-readonly"] end subgraph "外部" LP_SDK["Longbridge SDK<br/>QuoteContext/TradeContext"] end LB_Loader --> Creds SDK --> Creds SDK --> LP_SDK LB_Loader --> LP_SDK Profiles --> SDK

图表来源 - agent/backtest/loaders/longbridge.py:1-22 - agent/src/trading/connectors/longbridge/sdk.py:1-16 - agent/src/trading/connectors/longbridge/credentials.py:1-16 - agent/src/trading/connectors/longbridge/profiles.py:1-56

章节来源 - agent/backtest/loaders/longbridge.py:1-22 - agent/src/trading/connectors/longbridge/sdk.py:1-16 - agent/src/trading/connectors/longbridge/credentials.py:1-16 - agent/src/trading/connectors/longbridge/profiles.py:1-56

核心组件

章节来源 - agent/backtest/loaders/longbridge.py:200-412 - agent/src/trading/connectors/longbridge/sdk.py:321-428 - agent/src/trading/connectors/longbridge/credentials.py:49-131 - agent/src/trading/connectors/longbridge/profiles.py:12-55

架构总览

下图展示了从应用侧到 Longbridge SDK 的数据流与控制流,包括认证、历史数据拉取、实时报价与订单处理。

sequenceDiagram participant App as "应用/策略" participant Loader as "LongbridgeLoader" participant SDK as "Longbridge SDK" participant Cred as "凭据解析" participant QCtx as "QuoteContext" participant TCtx as "TradeContext" App->>Cred : 解析凭据 Cred-->>App : 成功/失败(字段级诊断) App->>Loader : fetch(codes, start, end, interval) Loader->>SDK : 初始化 Config + QuoteContext SDK-->>Loader : 上下文对象 Loader->>QCtx : history_candlesticks_by_date(分窗口) QCtx-->>Loader : K线列表 Loader-->>App : 标准化OHLCV DataFrame App->>SDK : get_quote/get_historical_bars SDK->>QCtx : quote/depth/candlesticks QCtx-->>SDK : 报价/历史 SDK-->>App : 标准化响应 App->>SDK : place_order/cancel_order (仅paper) SDK->>TCtx : submit_order/cancel_order TCtx-->>SDK : 订单ID/状态 SDK-->>App : 结构化结果

图表来源 - agent/backtest/loaders/longbridge.py:255-412 - agent/src/trading/connectors/longbridge/sdk.py:392-428 - agent/src/trading/connectors/longbridge/sdk.py:449-619 - agent/src/trading/connectors/longbridge/credentials.py:49-131

详细组件分析

历史数据加载器(LongbridgeLoader)

flowchart TD Start(["开始"]) --> CheckCred["检查凭据是否完整"] CheckCred --> |不完整| FailCred["抛出NoAvailableSourceError"] CheckCred --> |完整| SplitWin["按180天拆分日期窗口"] SplitWin --> LoopWin{"遍历窗口"} LoopWin --> |调用SDK| CallSDK["history_candlesticks_by_date"] CallSDK --> |成功| Merge["合并K线"] CallSDK --> |失败| FailSDK["抛出NoAvailableSourceError"] Merge --> NextWin{"还有窗口?"} NextWin --> |是| LoopWin NextWin --> |否| Normalize["标准化为OHLCV+UTC索引"] Normalize --> Cache["写入缓存"] Cache --> End(["结束"])

图表来源 - agent/backtest/loaders/longbridge.py:135-197 - agent/backtest/loaders/longbridge.py:255-412

章节来源 - agent/backtest/loaders/longbridge.py:89-109 - agent/backtest/loaders/longbridge.py:135-197 - agent/backtest/loaders/longbridge.py:200-412 - agent/tests/test_longbridge_loader.py:17-34 - agent/tests/test_longbridge_loader.py:194-253

交易层 SDK 连接器

classDiagram class LongbridgeConfig { +string app_key +string app_secret +string access_token +string profile +string region +float timeout +bool readonly +environment() string +with_overrides(...) } class SDK { +check_status(config) dict +get_account_snapshot(config) dict +get_positions(config) dict +get_open_orders(config, include_executions) dict +get_quote(symbol, config) dict +get_historical_bars(symbol, config, period, limit) dict +place_order(config, symbol, side, quantity, order_type, limit_price, time_in_force) dict +cancel_order(config, order_id, symbol) dict } class Credentials { +resolve_longbridge_credentials() CredentialResolution +require_longbridge_credentials() LongbridgeCredentials } SDK --> Credentials : "依赖" SDK --> LongbridgeConfig : "使用"

图表来源 - agent/src/trading/connectors/longbridge/sdk.py:58-138 - agent/src/trading/connectors/longbridge/sdk.py:220-428 - agent/src/trading/connectors/longbridge/sdk.py:449-619 - agent/src/trading/connectors/longbridge/credentials.py:21-131

章节来源 - agent/src/trading/connectors/longbridge/sdk.py:321-428 - agent/src/trading/connectors/longbridge/sdk.py:449-619 - agent/src/trading/connectors/longbridge/sdk.py:220-318

凭据解析与 Profile

flowchart TD Env["环境变量"] --> Resolve{"是否完整? "} File["运行时JSON"] --> Resolve Resolve --> |是| SelectEnv["选择环境变量"] Resolve --> |否| CheckFile{"文件是否完整? "} CheckFile --> |是| SelectFile["选择运行时文件"] CheckFile --> |否| Error["返回缺失字段诊断"] SelectEnv --> Conflict{"与文件冲突? "} SelectFile --> Conflict Conflict --> |是| Reject["拒绝并返回冲突字段"] Conflict --> |否| OK["返回凭据"]

图表来源 - agent/src/trading/connectors/longbridge/credentials.py:49-131 - agent/tests/test_longbridge_credentials.py:41-119

章节来源 - agent/src/trading/connectors/longbridge/credentials.py:49-131 - agent/src/trading/connectors/longbridge/profiles.py:12-55 - agent/tests/test_longbridge_credentials.py:41-119

概念性概览

[本节为概念性内容,不直接分析具体文件]

依赖关系分析

graph LR Cred["凭据解析"] --> Loader["历史加载器"] Cred --> SDK["交易层SDK"] Loader --> LP["Longbridge SDK"] SDK --> LP

图表来源 - agent/backtest/loaders/longbridge.py:200-412 - agent/src/trading/connectors/longbridge/sdk.py:627-677 - agent/src/trading/connectors/longbridge/credentials.py:49-131

章节来源 - agent/backtest/loaders/longbridge.py:200-412 - agent/src/trading/connectors/longbridge/sdk.py:627-677 - agent/src/trading/connectors/longbridge/credentials.py:49-131

性能与并发

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

故障排查指南

章节来源 - agent/src/trading/connectors/longbridge/sdk.py:220-318 - agent/src/trading/connectors/longbridge/credentials.py:40-131 - agent/tests/test_longbridge_credentials.py:145-173

结论

长桥连接器通过原子化凭据解析、严格的 Profile 与能力声明、稳健的错误处理与标准化数据模型,提供了稳定可靠的多市场接入能力。历史数据加载器采用窗口拆分与缓存策略,保障大规模回测的性能与正确性;交易层 SDK 连接器聚焦只读能力与纸盘下单,满足研究与模拟需求。结合健康检查与安全脱敏的诊断信息,便于运维监控与问题定位。

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

附录:配置与使用示例路径

[本节为参考路径汇总,不直接分析具体文件]