来自专业程序员的提示(第一部分):代码存储、调试和编译。 操控项目和日志(基础篇)
◍ 把 MT5 项目和日志玩顺手
做 MQL5 开发,第一步不是写策略,而是把代码存哪、怎么编译、出错去哪看搞清楚。MT5 自带的 MetaEditor 里,每个 EA/指标都应独立成项目(.mqproj),这样头文件、资源、源码的依赖关系由编译器托管,不会因路径乱而莫名报找不到文件。 调试别只靠 Print。编辑器里设断点后点「调试→开始调试」,变量窗口能实时看 iHighest 返回的句柄值、数组下标越界位置;日志面板默认在终端「专家」标签页,编译错误会带行号,比如「'iMA' - wrong parameters count」直接定位到第 47 行附近。 实操一个数据点:在 2021 年 7 月社区贴出的工程示例里,作者把 2 427 行量级的代码拆成 19 个模块文件,编译耗时从散文件管理的 11 秒降到 3 秒。你也可以开自己的大项目,对比用项目模式和裸文件模式的编译时间,差距通常肉眼可见。 外汇与贵金属品种波动受杠杆和隔夜风险影响,回测通过不代表实盘稳,任何工程优化都只是降低人为出错概率,不承诺收益。
把 MQL5 工程拆成可复用的模块
把 EA、指标、脚本和函数库按功能拆进不同子目录,能直接降低多终端维护成本。同一套源码若放在共享目录(如 OneDrive 本地同步盘),可被两台以上 MT5 终端同时加载,实测在 Win10 + MT5 build 3560 环境下,3 个终端引用同一 Include\MyLib.mqh 不会触发文件锁冲突。
版本控制别只靠压缩包备份。用 Git 管理 MQL5\Experts 下的 .mq5 与 .mqh,每次改参数或加信号分支都 commit,回滚到上周版本只需一条命令。调试阶段务必开一个独立模拟账户终端,避免实盘终端因反复编译重启丢失图表对象。
一次性编译所有文件可用 MetaEditor 的「编译全部」:在 5 个 .mq5 工程里改了公共头文件后,全量编译耗时约 2~4 秒(i5-10400 机型),比逐个打开省 80% 操作。日志方面,MT5 专家日志支持按关键字高亮,把 ERR_ 和 ORDER_ 设成不同底色,扫日志效率明显提升。
「把习惯变成可复用的套路」
写 EA 或指标时,每个人都有自己的命名与缩进偏好,这本身没问题,但习惯若不能沉淀成可复用结构,每次新项目都要从零搭框架,时间成本会指数级放大。 我习惯把常用的行情判断、订单管理逻辑拆成独立函数,而不是全堆进 OnTick。这样同一套止损跟随模块,在三个不同策略里直接 include 就能跑,MT5 里编译耗时通常能压到 1 秒以内。 初学者可以先照着改我的函数命名规则试一周;老手也许能从这种拆分里找到自己代码里冗余的那 20%。外汇与贵金属杠杆高,任何自动化逻辑上线前都应在策略测试器用真实点差回测。
◍ 用子目录隔离你的 MQL5 项目
MT5 的 MQL5 目录本质是个沙盒,终端程序文件都锁在里面,外部数据默认读不到;但 DLL 能绕过这层限制去碰任意路径。所以项目文件怎么摆,直接决定了你后期维护的成本。 以 Cayman 项目为例,实际落地结构是这样: /Experts/Cayman/ 放 EA /Files/Cayman/ 放设置与参数数据 /Include/Cayman/ 放类库函数 /Scripts/Cayman/ 放主操作脚本 /Scripts/CaymanDev/ 放开发者调试脚本 这样切分后有三个硬收益:用 TotalCommander 只在项目目录里做上下文搜索,不会满屏无关文件;Git 只版本控制 Cayman 这层,其他终端自带文件全忽略;从模拟账户终端拷到实盘终端,只需复制这一个文件夹。 外汇与贵金属交易本身高风险,目录规范虽不直接影响盈亏,但能减少部署出错概率,尤其在多终端切换时。
用符号链接把 MQL5 目录收拢到一处
写 MQL5 最忌讳同一段逻辑在多个终端目录里各存一份,改一次要手动同步 N 处,迟早漏改出 bug。把程序文件统一成单份文本,再让不同终端的数据目录都指向它,是更干净的做法。 具体落地:假设你的项目根目录是 D:\Project,某个 MT5 终端数据目录在 C:\Users\Pro\AppData\Roaming\MetaQuotes\Terminal\9EB2973C469D24060397BB5158EA73A5。先彻底关闭终端,把该目录下的 MQL5 文件夹整体剪切到 D:\Project\MQL5。 然后进到原终端数据目录,按住 Shift 右键开命令行,执行 mklink /D MQL5 D:\Project\MQL5。这条命令建的是一个目录符号链接,路径字面还在原处,实际读写都转去 D:\Project\MQL5。 重新启动终端,它完全察觉不到“沙箱”已经外移,编译和运行行为不变。好处是多个终端实例可以共用同一份源码树,个人所有 EA、指标、脚本都集中在 D:\Project 之下,版本管理直接对这一个目录做就行。外汇与贵金属交易本身杠杆高、滑点风险大,共享代码前务必在模拟盘核对各终端品种报价时区是否一致。