[MT4相关]旧版 MQL4 程序转新版的常见错误以及如何避免
本帖最后由 boolapi 于 2014-5-17 11:29 编辑
这几个月常有网上的朋友私下请托解决旧版的指标和 EA 在 MT4 build 600 之后环境编译不过的问题. 通常解决编译问题不大, 但接下来要能保证功能还完全正常, 就需完全读懂旧的指标和 EA 代码, 这就需要花些心力, 如果不是调用外部无法调试的他人客制编写 dll 的基本上花些时间都还能解决. 不过解读反组译那种随即编码参数的例外, 那种要读通花的时间代价太大了, 除非问题是马上能看到的.
在修改编译的过程, 遇到的不外乎是以下问题, 日后遇到问题的朋友也可以试着自己解决:
1. 与 dll 的字串调用要改为 unicode 形式, 因为新版 MT4 已经改为全 Unicode 环境. 如果是调用微软系统自带的 win32 api 的 dll, 如 user32.dll 或 wininet.dll, 基本上函数名要调用尾巴带 W 的版本, 之前旧指标或 EA 都是调用 A 版本, 也就是 ANSI 版.
2. 与新版 MQL4 的新定义函数名称冲突到, 这个查下 MQL4 官网文档网站即可: http://docs.mql4.com/cn/, 个人习惯用谷哥那个函数名加MQL4 即可快速找到这个 MQL4 函数的定义.
3. 在旧版提取指标数据如:
AlligatorJawsBuffer=iMA(0,0,13,8,MODE_SMMA,PRICE_MEDIAN,i);
有许多的旧指标或EA在第一个参数默默认当前商品名称是放0, 这个地方应该是放当前商品名称的"字串", 放数据0就成问题, 新版要求放入 NULL 或 Symbol(), 其实最好的习惯是放 Symbol() 和 Period().
AlligatorJawsBuffer=iMA(Symbol(),Period(),13,8,MODE_SMMA,PRICE_MEDIAN,i);
4. Rates 数据格式的改变, 新版新增 Mqlrates 数据格式, 理论上应该要对旧版相容, 但实际要看那个指标或EA 如何调用.
其他细节对 MT4 编程有兴趣的朋友可以参考这篇 MQL4 官方文章, 但第一条的设 strict, 也就是严格要求照新版来编译, 这最好不要设, 不然会更难除错. 就算个人在用新版设计新指标或 EA 时, 基本上也是把这行 strict 拿掉.
http://articles.mql4.com/cn/1161
另外在四月卅日发布的最新 build 646 把困扰许久的 MetaEditor 编辑中文会粘在一起的问题解决, 对于要应付许多旧指标或 EA 代码里夹有中文的编辑真是个好消息.
另外这版的 release note 也提到对 Gmail yahoo 等服务商的支持, 这应该是加入对 SSL 邮件服务器的支持, 过去使用 MT4 email 发送必须使用也提供无 SSL 接入的服务商如 GMX 或 139, 个人还没试, 因为已经用 GMX 或 139 用稳定了, 有兴趣的朋友可以自行测试.
Build 646 的 release note: (中文版解说很不全, 只能看英文版解说了, 看来是修掉不少小问题), 如果你的 MT4 没有帮你自动更新到, 值得手动下载覆盖更新.
http://forum.mql4.com/62849
相反的, 用新版 MQL4 模版作的指标或 EA 带有新版的一些基本公用函数如 OnTick, OnCalculate, OnStart 等等带有 On 开头的, 在旧版的 MT4 是无法编译的, 现在还使用旧版 MT4 无法更新基本上是平台商没有与 MT4 正式有合同造成的.
发表于:2014-05-22 03:03只看该作者
3楼
遇到矛盾 先站在对方的立场上想想问题,先试着去理解别人
● 如何使用WinMTR查询平台连接流畅度
发表于:2017-10-05 11:12只看该作者
4楼
66
韬客社区www.talkfx.co
发表于:2017-10-15 14:32只看该作者
5楼
谁用过怎么样
韬客社区www.talkfx.co