Longbridge 港美股数据

📎 引用文件

本文引用的文件 - 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_loader.py - agent/tests/test_longbridge_credentials.py - agent/tests/test_longbridge_runtime.py

目录

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

简介

本文件为 Vibe-Trading 项目中 Longbridge(LongPort OpenAPI)港美股数据与交易能力的集成文档。内容覆盖: - 认证机制与权限控制:环境变量与运行时文件的原子化凭证解析、冲突检测、错误码与诊断信息脱敏。 - 连接与上下文管理:基于官方 SDK 的 QuoteContext/TradeContext 构建与使用,无显式关闭的连接池由 SDK 管理。 - 数据格式转换与时间戳处理:统一 OHLCV 字段、时区归一化为无时区 UTC、区间窗口拆分避免静默截断。 - 高频与批量优化:按日窗口切分历史 K 线、缓存层复用、请求合并与失败回退策略。 - 应用案例:港股/美股历史回测、实时报价快照、账户与持仓读取、模拟盘下单与撤单。

项目结构

围绕 Longbridge 的关键代码分布在以下位置: - 回测数据加载器:封装 LongPort OpenAPI 的历史 K 线获取,负责符号映射、周期映射、日期窗口拆分、结果标准化与缓存。 - 交易连接器:提供只读账户/持仓/订单/行情/历史接口,以及仅支持模拟盘的下单/撤单能力。 - 凭证解析:从环境变量或运行时 JSON 文件中原子选择完整且一致的三件套(App Key、App Secret、Access Token)。 - 内置配置档案:声明 paper/live 环境、区域、能力集与只读约束。

graph TB subgraph "回测数据" LB_L["LongbridgeLoader<br/>历史K线"] end subgraph "交易连接器" LB_S["SDK 封装<br/>账户/持仓/订单/行情/历史"] LB_P["内置档案<br/>paper/live/region"] LB_C["凭证解析<br/>env / runtime.json"] end subgraph "外部依赖" SDK["Longbridge SDK<br/>QuoteContext/TradeContext"] end LB_L --> LB_C LB_L --> SDK LB_S --> LB_C LB_S --> SDK LB_S --> LB_P

图表来源 - agent/backtest/loaders/longbridge.py:200-412 - agent/src/trading/connectors/longbridge/sdk.py:1-800 - agent/src/trading/connectors/longbridge/credentials.py:1-167 - agent/src/trading/connectors/longbridge/profiles.py:1-56

章节来源 - agent/backtest/loaders/longbridge.py:200-412 - agent/src/trading/connectors/longbridge/sdk.py:1-800 - agent/src/trading/connectors/longbridge/credentials.py:1-167 - agent/src/trading/connectors/longbridge/profiles.py:1-56

核心组件

章节来源 - agent/backtest/loaders/longbridge.py:200-412 - agent/src/trading/connectors/longbridge/sdk.py:1-800 - agent/src/trading/connectors/longbridge/credentials.py:1-167 - agent/src/trading/connectors/longbridge/profiles.py:1-56

架构总览

下图展示从上层工具/回测到 Longbridge SDK 的调用链与数据流。

sequenceDiagram participant U as "调用方" participant L as "LongbridgeLoader" participant C as "凭证解析" participant Q as "QuoteContext" participant S as "SDK" U->>L : fetch(codes, start, end, interval) L->>C : resolve_longbridge_credentials() alt 凭证缺失/冲突 C-->>L : 结构化错误(不含密钥) L-->>U : NoAvailableSourceError else 凭证完整 L->>Q : 构造 Config + QuoteContext L->>Q : history_candlesticks_by_date(按窗口循环) Q-->>L : 原始K线列表 L->>L : 标准化为OHLCV DataFrame L-->>U : {symbol : DataFrame} end

图表来源 - agent/backtest/loaders/longbridge.py:255-412 - agent/src/trading/connectors/longbridge/credentials.py:49-130

详细组件分析

回测数据加载器(LongbridgeLoader)

flowchart TD Start(["进入 fetch"]) --> CacheCheck["按 symbol+interval+range 查缓存"] CacheCheck --> |命中| ReturnCache["返回缓存DataFrame"] CacheCheck --> |未命中| BuildCtx["构建 QuoteContext"] BuildCtx --> SplitRange["按最大窗口拆分日期范围"] SplitRange --> LoopWin{"遍历窗口"} LoopWin --> |成功| Collect["累积K线"] LoopWin --> |失败| FailErr["抛出稳定错误(不含密钥)"] Collect --> NextWin{"还有窗口?"} NextWin --> |是| LoopWin NextWin --> |否| Normalize["标准化为OHLCV"] Normalize --> PutCache["写入缓存"] PutCache --> ReturnRes["返回DataFrame"] FailErr --> End(["结束"]) ReturnCache --> End ReturnRes --> End

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

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

交易连接器(SDK 封装)

classDiagram class LongbridgeConfig { +app_key +app_secret +access_token +profile +region +timeout +readonly +environment() } class Connector { +get_account_snapshot() +get_positions() +get_open_orders() +get_quote() +get_historical_bars() +place_order() +cancel_order() +check_status() } class Profiles { +longbridge-paper-sdk +longbridge-paper-trade +longbridge-live-sdk-readonly } class Credentials { +resolve_longbridge_credentials() +require_longbridge_credentials() } Connector --> LongbridgeConfig : "使用" Connector --> Profiles : "读取" Connector --> Credentials : "解析"

图表来源 - agent/src/trading/connectors/longbridge/sdk.py:58-171 - agent/src/trading/connectors/longbridge/profiles.py:12-55 - agent/src/trading/connectors/longbridge/credentials.py:21-130

章节来源 - agent/src/trading/connectors/longbridge/sdk.py:1-800 - agent/src/trading/connectors/longbridge/profiles.py:1-56 - agent/src/trading/connectors/longbridge/credentials.py:1-167

凭证解析与权限控制

章节来源 - agent/src/trading/connectors/longbridge/credentials.py:49-130 - agent/tests/test_longbridge_credentials.py:41-172 - agent/src/trading/connectors/longbridge/sdk.py:220-318 - agent/src/trading/connectors/longbridge/profiles.py:12-55

数据格式转换、时间戳与字段映射

章节来源 - agent/backtest/loaders/longbridge.py:89-133 - agent/backtest/loaders/longbridge.py:159-197 - agent/tests/test_longbridge_loader.py:36-52

连接池管理与错误恢复

章节来源 - agent/backtest/loaders/longbridge.py:334-409 - agent/src/trading/connectors/longbridge/sdk.py:220-318 - agent/tests/test_longbridge_loader.py:256-330

高频数据获取、批量查询与缓存策略

章节来源 - agent/backtest/loaders/longbridge.py:135-197 - agent/backtest/loaders/longbridge.py:288-307 - agent/src/trading/connectors/longbridge/sdk.py:392-428

应用案例

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

依赖关系分析

graph LR Cred["凭证解析"] --> Loader["回测加载器"] Cred --> Conn["交易连接器"] Prof["内置档案"] --> Conn SDK["Longbridge SDK"] --> Loader SDK --> Conn

图表来源 - agent/backtest/loaders/longbridge.py:200-412 - agent/src/trading/connectors/longbridge/sdk.py:1-800 - agent/src/trading/connectors/longbridge/credentials.py:1-167 - agent/src/trading/connectors/longbridge/profiles.py:1-56

章节来源 - agent/backtest/loaders/longbridge.py:200-412 - agent/src/trading/connectors/longbridge/sdk.py:1-800 - agent/src/trading/connectors/longbridge/credentials.py:1-167 - agent/src/trading/connectors/longbridge/profiles.py:1-56

性能与优化

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

故障排查指南

章节来源 - agent/src/trading/connectors/longbridge/sdk.py:220-318 - agent/tests/test_longbridge_credentials.py:145-172 - agent/tests/test_longbridge_loader.py:256-330 - agent/tests/test_longbridge_runtime.py:325-343

结论

本项目对 Longbridge 的集成遵循“安全、稳健、可观测”的原则: - 凭证解析原子化且诊断脱敏,避免误配与泄露。 - 历史数据按窗口拆分与缓存,兼顾正确性与性能。 - 交易能力以 profile 与 capabilities 严格约束,模拟盘下单与实盘只读隔离清晰。 - 通过健康检查与稳定错误码,提升运维可观测性与排障效率。

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

附录

[本节为补充说明,不直接分析具体文件]