💻
MQL5 编程入门:程序类型、事件模型与下单
从零理解 MQL5——三类程序、事件驱动骨架、自定义指标与 EA 下单的完整最小范式。
MQL5入门事件驱动自定义指标OrderSendOnCalculate
MQL5 能写哪三类程序
EA(自动交易)、自定义指标、脚本(一次性任务),三者共享语言但入口不同。EA 重在自动决策加下单,指标重在画线输出,脚本重在跑一次就结束。
事件驱动模型:一切从事件开始
MQL5 是事件驱动的。EA 的 OnInit(初始化)、OnTick(来报价)、OnTrade(成交)、OnTimer(定时器)等,由终端在特定时刻调用;你的代码写在对应事件函数里。
- EA:OnInit / OnDeinit / OnTick / OnTrade
- 指标:OnCalculate(每根 K 线或每 tick 重算)
- 脚本:OnStart(入口,跑完即退)
自定义指标怎么写
用 #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。它把前面所有概念串成闭环。
- 调试用 Print/Comment 输出中间值
- 先在策略测试器跑,再上模拟盘
- 用 #include <Trade/Trade.mqh> 的 CTrade 可大幅简化下单代码
常见问题
MQL5 事件驱动、时间序列索引反向(0 等于最新)、持仓/订单/成交三分离(position/order/deal),更严谨也更复杂。
不是必须,但强烈推荐。它封装了 MqlTradeRequest 的繁琐细节,自动处理充填与重试,少写很多样板代码。
语法上能调交易函数,但规范上指标只负责计算与绘图。把交易放进 EA,工程上更清晰、更易维护。
①忘记事件是终端调用的;②时间序列索引方向搞反;③下单不检查 retcode。这三处占新手 80% 的坑。