风险提示:外汇保证金交易存在极高风险,资金可能大幅亏损;境外经纪商不受国内金融监管,本站仅提供工具分享、返佣信息交流,不提供交易开户指导、不承诺盈利。
汇友交流区
EA订单管理模块编写指南 - 07月18日更新
👁 83 💬 0
首页 / 论坛 / 汇友交流区 / EA订单管理模块编写指南 - 07月1 ...

EA订单管理模块编写指南 - 07月18日更新

MQLCodern MQLCodern 2026-7-19 22:02
83 0 1分钟
主题 19 帖数 148 积分 1343 金币 1585
MQLCodern
MQLCodern 楼主
前天 22:02
1楼
我统计了一下自己回测记录里因为订单管理写崩导致的亏损,整整占了总回撤的37%,这个数字让我意识到代码逻辑再花哨,订单管理模块写不好就是定时炸弹。今天从新手视角把这块掰开揉碎讲清楚,都是自己踩过的坑。
先说最基础的东西,订单管理模块说白了就是让EA知道什么时候开仓、什么时候平仓、怎么处理挂单、怎么管理持仓。很多新手一上来就堆各种技术指标,结果订单开得满天飞,马丁格尔策略爆仓速度比想象中快十倍。我最早犯的错误就是直接在OnTick里写OrderSend,结果欧美货币对在数据发布时瞬间跳了30点,EA连续开了4单,账户直接腰斩。后来才明白,订单管理必须独立成函数,不能和信号判断混在一起。
具体实现我分成四个模块来讲:

  • 开仓条件过滤模块。这个模块负责检查是否满足开仓条件,包括订单数量限制(比如最大持仓不超过3单)、同向订单间隔(比如同一方向开仓至少间隔20点)、还有风险控制(比如当前浮亏超过账户净值的5%就不开新单)。我习惯用MarketInfo获取当前点差,如果点差大于正常值的1.5倍就跳过开仓,这个过滤能躲过大部分数据行情。
  • 挂单管理模块。挂单最容易出问题的是订单编号映射,很多新手直接用OrderSelect循环遍历,结果修改挂单价格时选错了订单。我现在的做法是用一个数组存储挂单的ticket,然后根据ticket去修改。另外要注意挂单到期时间,MT4默认是0表示无限期,但回测时如果不设置具体时间,挂单可能会在历史回测里一直挂着,导致后续开仓逻辑混乱。
  • 持仓管理模块。这里重点讲移动止损和部分平仓。新手最容易搞混的是OrderModify函数的参数顺序,尤其是止损价和止盈价。我踩过的坑是写移动止损时忘记检查当前价格与止损价的差值是否大于最小变动单位,结果OrderModify返回错误4107。后来加了个函数计算合理的止损距离,用NormalizeDouble四舍五入到小数点后5位(黄金是2位)。部分平仓更麻烦,MT4不支持直接部分平仓,得先平掉当前仓位再重新开一个更小手数的单,这就需要精确计算剩余手数和成本价。我用的方法是先记录原始开仓价,平仓后根据剩余手数重新计算平均成本,再设置止损止盈。
  • 错误处理模块。这个最容易被忽略。OrderSend和OrderModify都会返回错误代码,新手看到错误就panic,其实大部分错误是暂时的。比如错误138(市场关闭)、错误139(报价过期)、错误146(交易上下文忙),这些都可以通过延时重试解决。我写了一个重试函数,最多尝试3次,每次间隔500毫秒。但要注意错误130(无效止损/止盈)不能重试,那是参数写错了,重试只会浪费CPU。

踩坑最多的还是订单双向锁和净额模式的问题。MT4是净额模式,同一个品种不能同时持有多单和空单,但很多新手拿MT5的代码直接改过来用,结果OrderSend报错4108。我在EURUSD上吃过这个亏,后来改成判断当前持仓方向,如果是多单就不开空单,或者先平多再开空。另外点差和滑点参数一定要写死,不要用默认值。我习惯在开仓时设置最大滑点为3点,但如果点差已经超过5点,直接跳过开仓,否则很容易因为滑点过大导致止损被触发。
还有个小技巧,用OrderSelect的SELECT_BY_POS模式时,一定要先计算总订单数,再循环遍历。很多新手直接在循环里写OrderTotal(),结果在循环中平仓导致订单数变化,漏掉后面的订单。正确做法是先把总订单数存到变量里,再for循环。
最后说下订单注释和魔法码。魔法码是EA识别自己订单的唯一标识,一定要在初始化时定义好,不能和别的EA冲突。我习惯用当前时间戳的后6位作为魔法码,这样每个EA的魔法码都不重复。订单注释可以写策略名称加开仓时间,方便手动复盘时快速定位。但注意注释长度有限制,MT4最大31个字符,MT5是127个字符,写太长会被截断。
今天就先聊到这儿,这些模块写完之后记得加个日志输出,每次开平仓都把订单ticket、开仓价、手数、止损止盈写到日志文件里,调试时能省掉80%的时间。你们写订单管理时遇到过最头疼的错误是什么?是OrderModify的4107还是OrderSend的138?
0 回复 复制
#1
👤 回复
举报内容
本帖内容仅供学习交流,不构成任何投资建议。外汇交易存在高风险,请谨慎参与。
← 上一帖 EA回测盈利实盘亏损?教你排查滑点与延迟的隐藏陷阱实操分享 下一帖 → 关于MT4插件功能介绍的对比