用途
本技能是一个知识库,用于使用 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 numbersdata-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 桥接之间做技术选型的开发者。
限制
资料未提供具体经纪商名称、价格、收费、性能指标或效果承诺。所有执行参数、数据质量与账户模式均需在运行时按经纪商与品种查询,不能假设为通用值。