新用户的几个小窍门·进阶篇
(2/3)· 模糊需求、调试盲区与隐藏陷阱,正是外包 EA 开发中最烧钱的无形漏洞
◍ 写需求规格时最容易漏掉的几个硬约束
给 MT5 写 EA 或脚本前,先把运行环境钉死:到底是 MT4 还是 MT5。这点常被订单忽略,但很致命——不是每个开发者都同时熟 MQL4 和 MQL5,有人只学过 MQL5 就完全没碰过 MQL4 的旧函数体系,跨终端直接翻车。 经纪商的脾性必须单列。不同交易中心在订单执行、最小/最大手数、隔夜规则、报价小数位、账户币别、跨周报价处理、点差类型(固定还是浮动)、基于新 K 线还是每笔订单触发上差异极大。客户最好按自己券商开一个同币别模拟户交给开发者,像 Oanda 这类还得先去官网注册填资料才能开模拟,提前弄好能省下大把联调时间。 真实账户和模拟账户的开发量根本不是一个量级。回测最吃速度,而真实账户 EA 要写连接断开、终端重启后的状态重建与错误恢复,耗时可能是纯测试的几倍到几十倍,经费也跟着翻。如果你只是验证算法、还没定稿,别上真实账户定制,等逻辑跑稳了再开二阶段,并不会贵多少。 外部参数先给临时列表:名字加默认值。这能少一堆来回确认,开发者也不用猜你意图。显示信息也要明说——有些人不想要满屏打印,指定图表背景色(黑/高亮/白)和格式,算法拿插图配注释比写几页字清楚得多。 外汇和贵金属杠杆高、滑点突变频繁,真实账户 EA 若没错误处理,一次断线就可能重复下单。需求规格别省那点时间,前期写细,后期少返工。 最后通常放常规条款:交源码、代码加注释、修 bug 期限等,这部分看着水但能卡住交付质量。
「把复杂EA拆开测才靠得住」
调试阶段本质是拿着需求规格去核对指标或EA是否真达标。编程圈有句玩笑式的墨菲定律:每个程序至少藏一个错,而每次修完都说“这是最后一个”——复杂系统里这话往往离事实不远。 接到活儿后发现一处甚至多处bug,先别默认开发者水平差或动机不纯。衡量外包质量更实在的标准,是对方能否快速、有效地把错改掉。 对用了多逻辑条件、分支算法的复杂系统,渐进式开发+分段测试最稳:把问题切成逻辑独立的几块,客户逐块验证后再合并跑,模块间的关联测试要尽早做,别等全拼完才暴露。 MT4和MT5都给了不少测试手段,但很多人忘了能在历史数据上跑EA,其中最强的是测试器的“可视测试模式”。几分钟就能在_history上快测自定义指标或EA,成交信息直接可见;行情还能放慢或暂停,方便抠单笔细节。 模拟账户实时跑一天半,通常就够确认EA效率。测试器虽能选周图等超长周期,实际很少拿来测,意义不大。外汇与贵金属杠杆高、滑点跳空频繁,历史可视测试结果仅代表过去,实盘仍可能失效。
用图说话:报错别只扔一句“不开仓”
不少用户报 bug 时习惯写:EA 完全不工作,本来该开多单却一个都没开。这种描述缺了品种、周期、参数表,开发者只能盲猜终端里发生了什么,排查效率极低。 MT4 和 MT5 都内置了图表存图功能,MT4 支持 GIF 与 BMP,MT5 额外支持 PNG;PNG 是推荐格式,能无损保留线条与数值清晰度,便于对方核对。 MT5 里右键图表选“另存为图片”后会弹出分辨率与范围设置框:选“活动图表”只存当前图,选“活动工作区”则存整个终端窗口,适合多图对照。分辨率别手改,拉伸会糊掉细节。 也可以用 Alt+PrtScr 抓当前窗口、单按 PrtScr 抓全屏进剪贴板,再丢进画图类工具标个箭头写两句说明——Windows 自带画笔就够用,重点是把出错位置圈出来,而不是只发一句“它不动了”。
◍ 把需求里的理想价格拉回离散现实
写 EA 需求时最常踩的坑,是默认价格是连续流动的。打开 MT5 把图表改成折线模式就能看到,真实报价是由一个一个分离的点组成,中间根本没有「丝滑过渡」。比如需求写「价格达到某外部参数值时开多」,从图上看红色和蓝色点从来没恰好落在那条水平实线上——条件在逻辑上永远不触发。 关键细节:价格比较必须精确到「点」。若品种报价小数点后五位,一个点就是 0.00001,而离散跳变往往不止一个点。所以要把理想值上下各放宽 2~3 个平均点差(图里虚线区间),落入其中的都算「达到」。需求应改成「价格进入外部参数指定正负区间时开多」才落地。 还有更现实的:券商服务器随时可能掉线,价格会偏离到任意距离直到重连(图中粉框区)。所以还要补一句——前价低于负差、现价回到区间内、且一段时间内未上破指定值,才开仓。外汇和贵金属杠杆高,断线滑点能直接吃掉止损,这层必须写进规格。 时间触发也分终端。MT5 有秒级定时器,MT4 只能靠报价时间倒推,不活跃时段相邻报价隔几分钟都正常,绝对准点挂单不可能。需求得放宽成「指定时间允许误差内挂双向单」。 「市场平坦做 A、明显趋势做 B」或「极限处挂单」这类词绝对不能用——平坦、极限、凸起、比前一个矮多少,全得给数学定义。编程只认数量,不认感觉。