EA依赖库与外部文件的打包方法

新帖
登录发帖
Exness 推荐平台

入金门槛低,出金到账快,支持多种账户类型

FSA(塞舌尔)/FCA(英国) / CySEC(塞浦路斯) · 最低入金 $130
qwe91533
qwe91533 楼主 3 小时前 浏览 10 回复 0 阅读 1 分钟
Lv.1 新手汇友 等级 Lv.1 主题 1 帖数 15 积分 623 汇币 318
1楼
刚截了张图,是我MT5数据文件夹里那个MQL5目录的截图,Experts下面躺着十几个EA,旁边Include里一堆mqh头文件,Files文件夹里还有csv和set文件混在一起。这画面估计很多汇友都眼熟,每次换VPS或者重装系统,光是把EA搬过去就得折腾半天,更别提那些引用了外部库的,搬过去一编译全是红字报错。
问题就出在这:很多人以为把ex5文件复制走就完事了,结果EA一跑起来要么提示找不到dll,要么读不到csv数据,要么指标句柄全是INVALID_HANDLE。我上周帮一个汇友看他的黄金剥头皮EA,就是典型的依赖没打包全,他在本地跑得好好的,上了VPS之后挂单逻辑直接失效,查了半天发现是少了Files目录下的一个品种参数配置表,EA读不到默认值就静默跳过了开仓条件,这种坑最要命,因为不报错,你根本不知道它没干活。
我的做法是分三步走,先把依赖摸清楚再打包。第一步,打开EA源码,用Ctrl+F搜几个关键词:#include、FileOpen、iCustom、DLL,把所有引用的头文件路径、外部文件名、自定义指标名全列出来。第二步,按MT5的目录结构归类,Include里的mqh归一类,Files里的数据文件归一类,Indicators里的自定义指标归一类,Libraries里的dll归一类,千万别只复制Experts文件夹,这是最常见的错误。第三步,在VPS上按同样的相对路径还原,注意MQL5目录的层级不能变,比如你EA里写的是"Files\\Gold\\param.csv",那VPS上就必须是MQL5\\Files\\Gold\\param.csv,少一层都读不到。
  • 头文件依赖:把Include下所有被引用的mqh连同它自己再引用的子头文件一起打包,漏一个就编译不过
  • 数据文件:csv、set、txt这些,路径大小写要跟代码里完全一致,Linux架构的VPS对大小写敏感
  • 自定义指标:iCustom调用的指标必须编译成ex5放进Indicators对应子目录,否则句柄返回-1
  • dll库:32位和64位别搞混,MT5是64位的,放错了加载直接失败

还有个坑我踩过两次,就是相对路径和绝对路径混用。有些EA写死了绝对路径比如C:\\Users\\xxx\\AppData\\...,这种上了VPS必挂,得改成相对路径或者用TerminalInfoString拿数据目录。另外打包完别急着上实盘,先在VPS上用策略测试器跑一遍单品种回测,能正常开平仓、能读到外部文件、日志里没有"cannot open file"字样,才算依赖齐了。我现在的习惯是每个EA配一个readme,把依赖清单写清楚,换机器的时候照着清单核对,五分钟搞定,比事后debug省心多了。
你们平时打包EA是手动复制还是有什么更省事的办法?有没有遇到过那种编译过了但运行时不报错、就是不出信号的诡异情况,评论区聊聊。
0 回复 众裁0 复制
#1
💬
暂无回复,来抢沙发吧!
THE END
本帖内容仅供学习交流,不构成任何投资建议。外汇交易存在高风险,请谨慎参与。
← 上一帖 把手机行情推送关掉之后的交易变化 下一帖 → Exness平台品种点差对比查询工具