SuperAPI AI 工具集

mt5

编程与开发

查看项目

更新于 10-15 11:10

技能介绍

用途

本技能是一个知识库,用于使用 MetaTrader 5 官方 Python API 构建生产级算法交易系统。其范围定位为多经纪商平台,而非单一经纪商:同一套代码在不同经纪商登录下需要处理的行为差异很大,因此内容不针对某一经纪商的行为做通用化断言。

主要能力

  • 经纪商差异处理:订单执行参数(填充模式、stops level、freeze level、执行模式、成交量限制)为经纪商与品种特有,需在运行时查询而非假设;数据质量与覆盖范围(tick 成交量、tick 历史深度、tick 保真度)在 ECN 经纪商与做市商之间不同,跨经纪商比较无效;账户与保证金模式(净额、对冲、交易所保证金)是经纪商设置而非代码选择,启动时从 account_info().margin_mode 读取。
  • 事件系统:基于轮询的事件系统,包括 on_tick、on_new_candle、on_position。
  • 订单执行:使用正确的填充模式(FOK、IOC、Return)执行订单。
  • 历史数据:下载历史数据(copy_rates、copy_ticks)。
  • 生产韧性:处理 MT5 断线与终端重启,在 Windows 上部署 MT5 机器人并进行进程监控。
  • 方案选型:在官方 API、aiomql 与 ZeroMQ 桥接之间做选择。

使用方式

快速上手(覆盖约 80% 用例):

  • 库:pip install MetaTrader5(官方)或 pip install aiomql(异步封装)
  • 连接:mt5.initialize(path=..., login=..., server=..., password=...)
  • 事件系统:带 K 线/tick/持仓变化检测的轮询循环
  • 订单:order_send() 之前先 order_check(),始终动态检测填充模式
  • 风险:每个持仓都设置服务端 SL/TP(不可妥协)
  • 韧性:每 30-60 秒健康检查,psutil 进程监控,指数退避

随后逐步加固:

  • 静默错误——每次 API 调用都包裹 None 检查 + last_error()
  • 填充模式拒绝(10030)——按品种动态检测 filling_mode
  • 终端崩溃——psutil 看门狗 + subprocess 重启
  • 周末处理——datetime.weekday() 休眠模式

参考材料

  • api-architecture.md——MT5 Python API 架构、32 个函数、命名管道 IPC、MQL5 EA 与 Python 对比、库比较
  • event-system-polling.md——轮询模式、新 K 线检测、tick 监控、持仓跟踪、并发规则
  • order-execution.md——order_send、填充模式(FOK/IOC/Return)、对冲与净额、返回码、风险检查、magic numbers
  • data-feed-historical.md——copy_rates、copy_ticks、深度、时区注意事项、缓存、数据质量、经纪商差异
  • production-resilience.md——断线处理、重连、周末管理、Windows 部署、社区资源

症状到入口排查

  • API 调用返回 None 且无日志 → api-architecture.md
  • 订单被拒绝,retcode 10030 → order-execution.md
  • 预期对冲却出现净额 → order-execution.md
  • tick 或 K 线处理器从不触发 → event-system-polling.md
  • K 线与图表不一致,或时间戳看起来偏移 → data-feed-historical.md
  • 终端在运行但 API 无响应 → production-resilience.md
  • 周六全部停止、周一恢复异常 → production-resilience.md

关键决策点

  • 库:默认官方 MetaTrader5;需要异步时用 aiomql;需要真正流式时用 ZeroMQ 桥接。
  • 事件模型:默认轮询(1-5 秒间隔);对 tick 敏感时轮询 100-250ms;需要真正事件时用 ZeroMQ EA 桥接。
  • 填充模式:按品种动态检测;绝不硬编码——会随经纪商/品种变化。
  • 账户模式:默认对冲(多数外汇经纪商);启动时检查 account_info().margin_mode。
  • 数据缓存:Parquet + Zstandard;tick 数据按日/月分区。
  • 并发:asyncio(单线程);多账户时每个终端独立进程。
  • 回测:Python 框架(Backtrader、Backtesting.py);需要 MT5 测试器时用 MQL5 EA 封装。
  • SL/TP:始终服务端;Python 移动止损仅作补充,绝不作为唯一保护。

适用场景

适用于通过官方 Python API 连接 MT5 终端、构建轮询式事件系统、执行订单、下载历史数据、处理断线与终端重启、在 Windows 上部署并监控 MT5 机器人,以及在官方 API、aiomql 与 ZeroMQ 桥接之间做技术选型的开发者。

限制

资料未提供具体经纪商名称、价格、收费、性能指标或效果承诺。所有执行参数、数据质量与账户模式均需在运行时按经纪商与品种查询,不能假设为通用值。