首页 / 交易学院 / MQL5 编程入门:程序类型、事件模型与下单
MQL5 编程入门:程序类型、事件模型与下单
💻

MQL5 编程入门:程序类型、事件模型与下单

从零理解 MQL5——三类程序、事件驱动骨架、自定义指标与 EA 下单的完整最小范式。

MQL5 编程 难度 · 入门 2026-05-10 8 分钟阅读
MQL5入门事件驱动自定义指标OrderSendOnCalculate

MQL5 能写哪三类程序

EA(自动交易)、自定义指标、脚本(一次性任务),三者共享语言但入口不同。EA 重在自动决策加下单,指标重在画线输出,脚本重在跑一次就结束。

事件驱动模型:一切从事件开始

MQL5 是事件驱动的。EA 的 OnInit(初始化)、OnTick(来报价)、OnTrade(成交)、OnTimer(定时器)等,由终端在特定时刻调用;你的代码写在对应事件函数里。

自定义指标怎么写

用 #property indicator_separate_window / indicator_buffers 等声明输出线与缓冲区;在 OnCalculate 里把计算结果写入缓冲区数组并返回已处理柱数。缓冲区的索引 0 等于最新需配合 SetIndexBuffer 与绘图属性。

指标不交易、只负责算并画。把策略逻辑和指标计算分开,是写好 MQL5 的第一步。

EA 怎么下单:MqlTradeRequest + OrderSend

MQL5 用结构化请求下单:填充 MqlTradeRequest(动作、品种、手数、价格、SL/TP、Magic 等),再调 OrderSend(request, result),检查 result.retcode 判断是否成功。

不要假设 OrderSend 一定成功。必须读 result.retcode 与 result.comment,网络、点差、规则都可能让它失败。

一个最小可运行示例思路

文章给出一个 ATR 通道突破范例:指标算 ATR 与均线,EA 在 OnInit 建句柄、OnTick 取最新值,价格上穿均线加 ATR 开多、下穿均线减 ATR 开空,并带固定 SL。它把前面所有概念串成闭环。

常见问题

MQL5 事件驱动、时间序列索引反向(0 等于最新)、持仓/订单/成交三分离(position/order/deal),更严谨也更复杂。
不是必须,但强烈推荐。它封装了 MqlTradeRequest 的繁琐细节,自动处理充填与重试,少写很多样板代码。
语法上能调交易函数,但规范上指标只负责计算与绘图。把交易放进 EA,工程上更清晰、更易维护。
①忘记事件是终端调用的;②时间序列索引方向搞反;③下单不检查 retcode。这三处占新手 80% 的坑。