MT5 连接器

📎 引用文件

本文引用的文件 - agent/backtest/loaders/mt5_loader.py - agent/src/trading/connectors/mt5/__init__.py - agent/src/trading/connectors/mt5/_client.py - agent/src/trading/connectors/mt5/orders.py - agent/src/trading/connectors/mt5/reads.py - agent/src/trading/connectors/mt5/symbols.py - agent/src/trading/connectors/mt5/profiles.py - agent/src/trading/service.py - agent/backtest/loaders/registry.py - README_zh.md - agent/tests/test_mt5_connector.py

目录

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

简介

本文件面向 MT5(MetaTrader 5)连接器的实现与使用,覆盖本地终端连接、MQL5 生态集成点、外汇与期货/CFD 市场支持、账户身份校验、订单执行与风控护栏、历史数据获取、技术指标与回测集成等。连接器通过官方 Windows-only 的 MetaTrader5 Python 包与本地运行的 MT5 终端通信,提供“纸交易/实盘”双环境隔离、严格的账户身份校验、以及基于美元名义金额的下单规模护栏。

项目结构

MT5 连接器由“数据加载器”和“交易 SDK 连接器”两部分组成: - 数据加载器:为回测与通用市场数据接口提供 OHLCV 历史数据,直接从本地 MT5 终端拉取。 - 交易 SDK 连接器:统一暴露 broker_sdk 风格的读/写接口(状态检查、账户快照、持仓、挂单、报价、历史 K 线、下单、平仓、撤单),并内置安全门控与 USD 计价换算。

graph TB subgraph "回测与数据" L["mt5_loader.py<br/>历史K线数据加载"] R["registry.py<br/>forex优先路由到mt5"] end subgraph "交易SDK连接器" S["sdk.py<br/>对外统一门面"] C["_client.py<br/>会话/配置/身份校验/USD换算"] O["orders.py<br/>下单/撤单/平仓/规模护栏"] D["reads.py<br/>状态/账户/持仓/挂单/报价/K线"] P["profiles.py<br/>内置profile定义"] X["symbols.py<br/>符号归一化/分类"] end U["service.py<br/>按connector键选择模块"] L --> R S --> C S --> O S --> D S --> P S --> X U --> S

图表来源 - agent/backtest/loaders/mt5_loader.py:170-251 - agent/backtest/loaders/registry.py:149-155 - agent/src/trading/connectors/mt5/sdk.py:1-66 - agent/src/trading/connectors/mt5/_client.py:237-301 - agent/src/trading/connectors/mt5/orders.py:59-158 - agent/src/trading/connectors/mt5/reads.py:64-264 - agent/src/trading/connectors/mt5/profiles.py:16-78 - agent/src/trading/connectors/mt5/symbols.py:29-77 - agent/src/trading/service.py:17-29

章节来源 - agent/backtest/loaders/mt5_loader.py:1-251 - agent/src/trading/connectors/mt5/sdk.py:1-66 - agent/src/trading/connectors/mt5/_client.py:1-380 - agent/src/trading/connectors/mt5/orders.py:1-408 - agent/src/trading/connectors/mt5/reads.py:1-301 - agent/src/trading/connectors/mt5/symbols.py:1-77 - agent/src/trading/connectors/mt5/profiles.py:1-79 - agent/src/trading/service.py:17-29 - agent/backtest/loaders/registry.py:149-155

核心组件

章节来源 - agent/src/trading/connectors/mt5/_client.py:54-127 - agent/src/trading/connectors/mt5/reads.py:64-264 - agent/src/trading/connectors/mt5/orders.py:42-158 - agent/src/trading/connectors/mt5/symbols.py:29-77 - agent/backtest/loaders/mt5_loader.py:170-251

架构总览

MT5 连接器采用“门面 + 子模块”的分层设计: - sdk.py 作为门面,统一导出 broker_sdk 风格接口。 - _client.py 负责配置、会话生命周期、身份校验、USD 合约价值换算。 - orders.py 与 reads.py 分别封装写与读操作,均通过 _session 保证线程安全与身份一致。 - symbols.py 提供无 SDK 依赖的符号归一化与分类,供风控与指令门控使用。 - profiles.py 定义内置 profile(paper/live-readonly/paper-trade/live-trade)。 - 回测侧 mt5_loader.py 将 MT5 终端作为 forex/metals 历史数据源,并在 forex 数据链中优先尝试。

sequenceDiagram participant App as "调用方" participant SDK as "sdk.py" participant Client as "_client.py" participant Orders as "orders.py" participant Reads as "reads.py" participant MT5 as "MetaTrader5终端" App->>SDK : place_order(...) SDK->>Client : load_config() / _session(cfg) Client->>MT5 : initialize(...), account_info() Client-->>SDK : mt5 句柄 SDK->>Orders : place_order(...) Orders->>Orders : 参数校验/符号解析/规模护栏 Orders->>MT5 : order_check(...) Orders->>MT5 : order_send(...) MT5-->>Orders : retcode/result Orders-->>SDK : {status, order_id, ...} SDK-->>App : 结果

图表来源 - agent/src/trading/connectors/mt5/sdk.py:11-39 - agent/src/trading/connectors/mt5/_client.py:237-301 - agent/src/trading/connectors/mt5/orders.py:59-158

详细组件分析

配置与会话(_client.py)

flowchart TD Start(["进入_session"]) --> Import["导入MetaTrader5"] Import --> Init["initialize(login,password,server,timeout)"] Init --> Acc["account_info()"] Acc --> Guard{"trade_mode/login匹配?"} Guard -- 否 --> Raise["抛出ProfileMismatchError"] Guard -- 是 --> Yield["返回mt5句柄"] Yield --> Finally["finally: shutdown()"] Raise --> End(["结束"]) Finally --> End

图表来源 - agent/src/trading/connectors/mt5/_client.py:237-301

章节来源 - agent/src/trading/connectors/mt5/_client.py:54-127 - agent/src/trading/connectors/mt5/_client.py:237-380

读取接口(reads.py)

章节来源 - agent/src/trading/connectors/mt5/reads.py:64-264

交易接口(orders.py)

flowchart TD A["place_order入口"] --> V["参数校验(side/type/symbol/size)"] V --> M["缺失字段检查"] M --> S["_session(cfg) -> 身份校验"] S --> R["符号解析(_resolve_symbol)"] R --> I["symbol_info()"] I --> Q{"quantity/notional?"} Q -- quantity --> SV["体积校验(min/max/step)"] Q -- notional --> SU["USD单位价值换算"] SU --> SF["按volume_step下取整"] SV --> G["规模护栏(max_order_volume / max_order_notional_usd)"] SF --> G G --> B["构建请求(_build_request)"] B --> C["order_check(request)"] C --> OK{"retcode=done?"} OK -- 否 --> E["返回错误payload"] OK -- 是 --> Send["order_send(request)"] Send --> Res["解析结果/返回ok或error"]

图表来源 - agent/src/trading/connectors/mt5/orders.py:59-158 - agent/src/trading/connectors/mt5/orders.py:228-334 - agent/src/trading/connectors/mt5/_client.py:303-380

章节来源 - agent/src/trading/connectors/mt5/orders.py:1-408

符号与分类(symbols.py)

章节来源 - agent/src/trading/connectors/mt5/symbols.py:1-77

回测数据加载(mt5_loader.py)

章节来源 - agent/backtest/loaders/mt5_loader.py:61-167 - agent/backtest/loaders/mt5_loader.py:170-251

数据链路与优先级(registry.py)

章节来源 - agent/backtest/loaders/registry.py:149-155

服务路由(service.py)

章节来源 - agent/src/trading/service.py:17-29

依赖关系分析

graph LR Service["service.py"] --> SDK["sdk.py"] SDK --> Client["_client.py"] SDK --> Orders["orders.py"] SDK --> Reads["reads.py"] SDK --> Profiles["profiles.py"] SDK --> Symbols["symbols.py"] Loader["mt5_loader.py"] --> Registry["registry.py"]

图表来源 - agent/src/trading/service.py:17-29 - agent/src/trading/connectors/mt5/sdk.py:11-39 - agent/backtest/loaders/mt5_loader.py:170-251 - agent/backtest/loaders/registry.py:149-155

章节来源 - agent/src/trading/connectors/mt5/_client.py:225-273 - agent/backtest/loaders/mt5_loader.py:1-20

性能与可靠性

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

故障排查指南

章节来源 - agent/src/trading/connectors/mt5/_client.py:173-191 - agent/src/trading/connectors/mt5/_client.py:237-301 - agent/src/trading/connectors/mt5/orders.py:139-158 - agent/backtest/loaders/mt5_loader.py:239-251

结论

MT5 连接器以严格的安全与一致性为核心:进程级会话管理、账户身份双向校验、USD 名义金额护栏、以及对 MT5 对冲账户行为的适配。它既可作为回测的历史数据源(优先使用本地终端的真实符号与交易时段),也可作为实盘交易的桥接层,配合 mandate 与 kill switch 实现稳健的风控闭环。对于外汇与 CFD 市场,连接器提供了符号分类、点差与报价读取、以及基于 tick 的价格与名义金额计算能力。

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

附录:安装、配置与使用示例

章节来源 - README_zh.md:1171-1201 - agent/src/trading/connectors/mt5/profiles.py:16-78 - agent/src/trading/connectors/mt5/_client.py:54-127 - agent/src/trading/connectors/mt5/reads.py:211-264 - agent/src/trading/connectors/mt5/orders.py:59-158 - agent/backtest/loaders/mt5_loader.py:170-251