MQL5 快速上手·综合运用
📘

MQL5 快速上手·综合运用

第 3/3 篇

◍ 用 CTrade 类把下单逻辑写短

在 MQL5 里发交易指令,底层是填好 MqlTradeRequest 结构再调 OrderSend()。请求成功与否的结果会落进 MqlTradeResult 结构。刚上手时没必要自己逐个字段校验结构正确性,终端自带的标准库已经封装了 CTrade 类,把下单、改单、删单都收敛成一行调用。 CTrade 把常见动作拆得很直白:PositionOpen 按参数建仓,PositionClose 平仓,PositionModify 改头寸;挂单侧有 OrderOpen、OrderModify、OrderDelete。更顺手的是语义化 shortcut——Buy 直接开多,Sell 直接开空,BuyLimit 在市价下方挂买限价,BuyStop 在市价上方挂买止损,SellLimit / SellStop 则对应卖出方向的限价与止损挂单。 想看真实用法,终端自带的 MACD Sample EA 就是现成样板,路径在 <terminal_directory>\MQL5\Experts\Examples\MACD。打开它搜 CTrade 的调用,你能直接抄到“指标交叉→Buy/Sell→持仓管理”的完整链条。外汇与贵金属杠杆高,回测通过不等于实盘无回撤,挂单触发受滑点影响概率不低。 「别从零造轮子」 标准库的 CTrade 已覆盖 90% 零售策略需要的交易动作。新建 EA 时先 #include <Trade\Trade.mqh>,声明 CTrade trade; 再调 trade.Buy(lot, symbol),比手写 MqlTradeRequest 省掉约 20 行样板代码,开 MT5 新建脚本粘这段就能跑通最小下单验证。

「测试仪日志藏在哪一层」

MT5 的「策略测试仪」本质是个任务分发器:终端把 EA 的测试/优化任务甩给多个代理(agent),代理跑完再把结果回传,整个过程就是一场终端与代理之间的通信会话。 测试时 EA 里大量 Print() 和 Alert() 不会全进「日志」。终端为了不因刷屏拖慢回测,会主动跳过部分代理消息;正式日志只落在 <terminal_folder>\tester\logs\,而完整明细被存到各代理自己的文件夹里。 找全量记录得用测试仪自带的「日志检视器」,按时间间隔捞特定片段,别只盯着终端那页精简日志。 优化模式更极端——用几十到几千个代理(含 MQL5 云网络)时,Print/Alert 输出被严格压制,只为省通信带宽和硬盘。唯一例外是 OnInit():初始化失败或用 ExpertRemove() 拒测的原因,允许通过 Print() 报出来,调参排错时这块不能漏看。外汇与贵金属回测仍属高风险验证,代理日志差异只帮定位问题,不预示实盘表现。

别急着下结论

MT5 这套终端留的口子比多数人想的要宽。DLL 调用、代码库一键拉取、终端内直接启停程序,这些在本文里没铺开讲,但每一项都能让有经验的交易者在实盘里少绕弯路。 官方那份「MetaTrader 5 - 超乎您的想像!」的功能清单值得通读一遍,里面列了上百项终端能力,新手常卡在不知道某个功能存在,而不是不会用。 外汇与贵金属杠杆交易高风险,自动化手段只是把人为延迟和情绪干扰压下去,不等于胜率天然提升。真要验证潜力,开 MT5 把代码库里一个现成 EA 拖进图表跑一周模拟,比读十篇概览都实在。

常见问题

用封装好的交易类(如 CTrade)直接调 Buy/Sell 方法,不用每次手写订单校验与重试,把下单逻辑压成两三行。
调试输出通常藏在测试器的日志面板里,跑完在结果页切到日志层就能看到每笔触发与报错记录。
小布可以基于你的品种和周期,先把价格行为和信号逻辑过一遍,标出明显漏洞,省得你直接写代码白跑回测。
样本外和滑点没验证前都只是拟合,换个行情层级可能失效,先拆开看每笔进出场再下结论。
重点看成交拒绝率、点差突刺时的处理、以及单笔最大回撤,这三处常在历史数据里被平滑掉。