外汇期货连接器

📎 引用文件

本文引用的文件 - 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/backtest/loaders/mt5_loader.py - agent/backtest/loaders/registry.py - agent/backtest/engines/forex.py - agent/backtest/engines/futures_base.py - agent/backtest/engines/global_futures.py - agent/src/trading/service.py - README.md - README_zh.md

目录

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

简介

本文件为 Vibe-Trading 的外汇期货连接器专业文档,聚焦于 MetaTrader 5(MT5)平台的集成实现。内容涵盖: - MT5 客户端安装配置、本地服务启动与 MQL5 脚本支持说明 - 外汇交易点差计算、杠杆倍数与保证金管理 - 期货合约到期日处理、展期策略与交割机制 - 技术分析指标调用、EA 自动交易与回测引擎集成示例 - 外汇市场 24 小时交易特性、跨时区处理与流动性管理 - 高级订单类型、止损止盈设置与风险管理工具使用

该连接器通过官方 Python SDK 与本地运行的 MT5 终端通信,提供只读与可下单能力;同时为回测系统提供基于本地终端的行情数据源。

项目结构

围绕 MT5 的关键代码分布在以下模块: - 连接器核心:会话生命周期、身份校验、USD 计价与符号解析 - 读取接口:账户快照、持仓、挂单、报价与历史 K 线 - 下单接口:市价/限价单、取消与按票号平仓(风险降低) - 符号归一化与分类:用于授权门控与回退链选择 - 回测数据加载器:从本地 MT5 终端拉取外汇/贵金属历史数据 - 回测引擎:外汇与全球期货引擎,封装点差、滑点、保证金与乘数等规则

graph TB A["连接器入口<br/>mt5/__init__.py"] --> B["客户端会话与配置<br/>_client.py"] A --> C["读取接口<br/>reads.py"] A --> D["下单接口<br/>orders.py"] A --> E["符号归一化与分类<br/>symbols.py"] F["回测数据加载器<br/>backtest/loaders/mt5_loader.py"] --> G["回测引擎(外汇)<br/>engines/forex.py"] F --> H["回测引擎(全球期货)<br/>engines/global_futures.py"] I["服务路由注册<br/>trading/service.py"] --> A J["数据源注册表<br/>backtest/loaders/registry.py"] --> F

图表来源 - agent/src/trading/connectors/mt5/__init__.py:1-14 - agent/src/trading/connectors/mt5/_client.py:1-380 - agent/src/trading/connectors/mt5/reads.py:1-301 - agent/src/trading/connectors/mt5/orders.py:1-408 - agent/src/trading/connectors/mt5/symbols.py:1-77 - agent/backtest/loaders/mt5_loader.py:1-251 - agent/backtest/loaders/registry.py:149-155 - agent/backtest/engines/forex.py:1-137 - agent/backtest/engines/global_futures.py:1-156 - agent/src/trading/service.py:1-34

章节来源 - agent/src/trading/connectors/mt5/__init__.py:1-14 - agent/src/trading/connectors/mt5/_client.py:1-380 - agent/backtest/loaders/mt5_loader.py:1-251 - agent/backtest/loaders/registry.py:149-155 - agent/backtest/engines/forex.py:1-137 - agent/backtest/engines/global_futures.py:1-156 - agent/src/trading/service.py:1-34

核心组件

章节来源 - agent/src/trading/connectors/mt5/__init__.py:1-14 - agent/src/trading/connectors/mt5/_client.py:1-380 - agent/src/trading/connectors/mt5/reads.py:1-301 - agent/src/trading/connectors/mt5/orders.py:1-408 - agent/src/trading/connectors/mt5/symbols.py:1-77 - agent/backtest/loaders/mt5_loader.py:1-251 - agent/backtest/engines/forex.py:1-137 - agent/backtest/engines/global_futures.py:1-156

架构总览

下图展示从 CLI/工具到 MT5 终端的数据与订单流,以及回测数据加载路径。

sequenceDiagram participant U as "用户/CLI" participant S as "交易服务路由<br/>service.py" participant C as "MT5连接器<br/>connectors/mt5/*" participant T as "MT5终端<br/>MetaTrader5 SDK" participant L as "回测加载器<br/>mt5_loader.py" participant E as "回测引擎<br/>forex/global_futures" U->>S : 查询/下单/历史 S->>C : 调用连接器接口 C->>T : initialize / account_info / symbol_info / order_send T-->>C : 账户/行情/订单结果 C-->>S : 标准化响应(含纸盘/实盘标记) S-->>U : 返回结果 Note over L,E : 回测路径 U->>L : 请求外汇/贵金属历史 L->>T : copy_rates_range / symbols_get T-->>L : OHLCV 数据 L->>E : 喂入回测引擎 E-->>U : 回测结果

图表来源 - agent/src/trading/service.py:1-34 - agent/src/trading/connectors/mt5/_client.py:237-301 - agent/src/trading/connectors/mt5/reads.py:64-101 - agent/src/trading/connectors/mt5/orders.py:59-158 - agent/backtest/loaders/mt5_loader.py:170-251 - agent/backtest/engines/forex.py:56-137 - agent/backtest/engines/global_futures.py:130-156

详细组件分析

MT5 连接器核心(会话、配置、身份守卫)

classDiagram class MT5Config { +int login +string password +string server +string terminal_path +string profile +string symbol_suffix +int deviation_points +float max_order_volume +float max_order_notional_usd +float timeout +bool readonly +from_mapping(data) MT5Config +with_overrides(**overrides) MT5Config +environment string +is_demo bool } class SessionGuard { +_session(cfg) Iterator[mt5] +_assert_profile(cfg, account, mt5) void +_resolve_symbol(mt5, cfg, symbol) string +_usd_contract_value(mt5, cfg, name, lots) float? } MT5Config <.. SessionGuard : "被使用"

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

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

读取接口(状态、账户、持仓、挂单、报价、历史)

flowchart TD Start(["开始"]) --> CheckCfg["检查配置完整性"] CheckCfg --> |缺失| ErrCfg["返回错误(缺失字段)"] CheckCfg --> |完整| Attach["连接终端并验证身份"] Attach --> Op{"操作类型"} Op --> |账户| Acc["读取账户信息"] Op --> |持仓| Pos["遍历持仓并计算USD市值"] Op --> |挂单| Ord["读取挂单与成交(可选)"] Op --> |报价| Q["读取tick并格式化"] Op --> |历史| Bars["映射周期并拉取K线"] Acc --> End(["结束"]) Pos --> End Ord --> End Q --> End Bars --> End

图表来源 - agent/src/trading/connectors/mt5/reads.py:64-101 - agent/src/trading/connectors/mt5/reads.py:104-163 - agent/src/trading/connectors/mt5/reads.py:166-208 - agent/src/trading/connectors/mt5/reads.py:211-238 - agent/src/trading/connectors/mt5/reads.py:241-264

章节来源 - agent/src/trading/connectors/mt5/reads.py:1-301

下单接口(市价/限价、取消、按票号平仓)

sequenceDiagram participant U as "调用方" participant O as "下单接口<br/>orders.py" participant C as "会话/配置<br/>_client.py" participant T as "MT5终端" U->>O : place_order(symbol, side, quantity/notional, type, price?) O->>C : 解析配置/符号/数量 C-->>O : 会话句柄/USD计价 O->>T : order_check(request) T-->>O : retcode alt 检查通过 O->>T : order_send(request) T-->>O : 订单结果 O-->>U : ok 或 error 信封 else 检查失败 O-->>U : error 信封 end

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

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

符号归一化与授权分类

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

回测数据加载器(MT5 历史数据)

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

回测引擎(外汇与全球期货)

章节来源 - agent/backtest/engines/forex.py:1-137 - agent/backtest/engines/futures_base.py:1-57 - agent/backtest/engines/global_futures.py:1-156

依赖关系分析

graph LR S["service.py"] --> M["connectors/mt5/*"] R["loaders/registry.py"] --> L["loaders/mt5_loader.py"] M --> C["_client.py"] M --> RD["reads.py"] M --> OR["orders.py"] M --> SY["symbols.py"] L --> E1["engines/forex.py"] L --> E2["engines/global_futures.py"]

图表来源 - agent/src/trading/service.py:1-34 - agent/backtest/loaders/registry.py:149-155 - agent/src/trading/connectors/mt5/_client.py:1-380 - agent/src/trading/connectors/mt5/reads.py:1-301 - agent/src/trading/connectors/mt5/orders.py:1-408 - agent/src/trading/connectors/mt5/symbols.py:1-77 - agent/backtest/loaders/mt5_loader.py:1-251 - agent/backtest/engines/forex.py:1-137 - agent/backtest/engines/global_futures.py:1-156

章节来源 - agent/src/trading/service.py:1-34 - agent/backtest/loaders/registry.py:149-155

性能与可靠性

章节来源 - agent/src/trading/connectors/mt5/_client.py:225-272 - agent/backtest/loaders/mt5_loader.py:53-108 - agent/backtest/loaders/mt5_loader.py:121-147 - agent/backtest/loaders/mt5_loader.py:229-251

故障排查指南

章节来源 - agent/src/trading/connectors/mt5/_client.py:173-191 - agent/src/trading/connectors/mt5/_client.py:237-301 - agent/src/trading/connectors/mt5/reads.py:64-101 - agent/src/trading/connectors/mt5/orders.py:139-158 - agent/backtest/loaders/mt5_loader.py:15-18

结论

本连接器以稳健的会话管理与身份守卫为核心,提供安全的纸盘/实盘隔离与严格的订单风控;通过统一的符号解析与 USD 计价,支撑授权门控与限额控制。回测侧借助本地 MT5 终端获取真实经纪商符号与会话时间,提高仿真贴近度;外汇与全球期货引擎分别封装了各自市场的点差、滑点、保证金与乘数规则。整体设计强调可降级、可审计与可扩展,便于在生产环境中稳定运行。

附录

安装与配置(MT5)

章节来源 - README.md:1225-1253 - README_zh.md:1171-1201

外汇交易要点

章节来源 - agent/backtest/engines/forex.py:1-137 - agent/src/trading/connectors/mt5/_client.py:347-380

期货合约到期日、展期与交割

章节来源 - agent/backtest/engines/global_futures.py:1-11 - agent/backtest/engines/global_futures.py:130-156

技术分析指标与 EA 集成

章节来源 - agent/backtest/loaders/mt5_loader.py:1-251 - agent/backtest/engines/forex.py:1-137

高级订单与风险管理

章节来源 - agent/src/trading/connectors/mt5/orders.py:59-158 - agent/src/trading/connectors/mt5/reads.py:104-163 - README_zh.md:1171-1201