MQL是一个非常简单的脚本语言. 调试MQL, 不幸, 是不容易的. 在MetaEditor里编译器迈达克提供根本不包含大多数程序员都习惯使用复杂的工具.
MQL调试问题
Visual Studio和其他先进的集成开发环境 (集成开发环境) 包含了许多功能,可以很容易地调试代码,而程序员编写它. 这样做的最大的例子就是个破发点. 一个破发点中的代码点编译器告诉计算机停止,当它到达一定的一行代码运行程序.
考虑例子,一个追踪止损设置新的停止错误. 自然的本能,大多数程序员将是运行在视觉专家顾问 回测试, 那么追踪止损计算后不久就插入的代码行断点. 断点暂停代码, 允许程序员同行软件的大脑,看看它认为它做了一个决定的时候. 在Visual Studio中的主要优点是,所有的变量的值是清晰可见. 因此能够穿行通过一步程序步骤. 每当其中一个步骤不遵循所期望的规则, 所需要的变化通常是显而易见. 迈达克幸运的是包含在MQL5突破点. 他们不提供MQL4.
全智能感知支持的缺乏影响比什么我的编程速度更. 智能感知检测使用像OrderSelect保留字() 或ObjectGet(). 在MetaEditor里包括一个基本的智能感知, 但它缺乏细节,使得在Visual Studio这么方便.
我习惯了编程在C#中,我可以输入一个变量或类的前几个字母, 那么IDE填写休息. 当我输入 “我的” 在C#和推动空格键, 我知道,在MessageBox选项将出现 (假设我宣布适当的名称空间). 在MetaEditor里提供候选人的保留字列表. 那么程序员必须选择用鼠标或按Enter键选项.
我知道这似乎微不足道,要求按Enter键而不是空格键, 但想想代码多少次resuses同样保留字或变量. 额外的按键确实加起来了很多不必要的打字运动. 这是双重如此已经戴着护具手腕腕管疼痛而立之年.
在MetaEditor里最大的弱点在于,它不检测变量名. 我们经常编写包含几千行代码专家顾问. 跟踪几十的变量名构成其自身的挑战. 当在相同的一组变量名的重复的编码器类型, 这将是很好简单地输入前三个字母和移动. 复制和粘贴可能会提供一个体面的替代. 的问题是,通常的变量基团一起. 你不能保持 5 随时可用不同的复制和粘贴项目.
在MetaEditor里允许函数返回无效类型. 声明为双能返回字符串的函数, 整数或什么都没有. 在MQL4编译器不跟踪与否,这些都是有效的. 它的叶子是由程序员发现在实时测试的无效类型. 这是监督的噩梦不知情的程序员错误地返回错误类型.
这是极为真实的,当双重功能被错误地返回到整数变量. MQL4不能防止非法双为int类型转换. 更糟糕的是, 专家顾问继续与运行 0 对于基于整数值,而不是抛出一个异常或错误信息. 我不能指望我已经浪费了跟踪,看起来完美变量多少小时, 只有认识到,我声明了错误的数据类型. 这通常发生在我在自动驾驶仪, 捣出码. 似乎什么有效的时间通常花费数个小时的头发拉挫折.
MQL调试技术
该 MQL程序员 在这里的工作人员通常采取以下任何技巧. 你可能会发现,使用它们的组合有助于提高调试过程更加.
调试编译器错误
这个人可以是最令人沮丧. 在MetaEditor里试图暗示哪一行代码导致编译错误. 我说的尝试,因为它得到更往往是错误比它得到它的权利. 没有什么比看着代码完全合法的线条更加刺激的编译器标志有问题.
我几乎总是诉诸注释掉的代码越来越大的部分,直到错误消失. 我开始注释掉的一行代码. 如果不工作, 然后我注释掉十行. 如果不工作, 我可能会注释掉整函数或代码段. 当编译器终于正常运行, 你知道,注释掉的代码的最后部分包含错误.
下一个, 你原路返回. 开始做违规注释掉的部分越来越小,直到错误再次出现. 现在, 你终于瞄准了这一问题的实际来源.
调试实时或在backtester
我首选的调试方法是将大部分发表评论的相关决策信息搬上银幕, 这是使用注释做() 功能. 然后我跑了视觉backtester, 观看数据有关的行为的视觉信息.
在屏幕上的意见基本上是陪审团操纵破发点. 控制如何以及他们出现的时候让程序员单步执行代码揭露问题. 唯一的区别是,注释不会强行阻止代码运行. 其中显示的文字是非常小的. 除此之外, 我真的很喜欢这个事实,它是如此强劲. 注释功能始终工作顺利, 使其成为一个程序员的调试代码的最好的朋友.
截屏借此更上一层楼. 当客户问为什么专家顾问的表现一定的方式问题, 最简单的答案都与截图. 在谈到模仿破发点通常提供防弹答案 – 程序员和用户可以从字面上看到的EA认为它做了一个决定的时候. MQL4提供WindowScreenShot() 函数来做到这一点.
在关键的行动,我们始终将中介公司采取截图, 如进入贸易或调整退出条件. 我们的目标是提供着眼每一个决策的视觉记录回答未来的问题有关的行为.
我们的默认模板包括一个名为真/假变量WriteScreenshots. 交易者控制他们是否要打扰这个调试功能,或者不. 唯一的缺点是,每一个记录行动吃掉约的硬盘空间50KB.
日志文件 代表着最后的调试选项. 主要的缺点是,他们是如此的丑陋和难以阅读. 我几乎总是喜欢截图因为这个原因.
然而, 日志文件 也有自己的位置. 使用它们的主要途径是作为误差捕. 每当一个进程就会出差错,由于与任何的MetaTrader本身或与经纪人事务中的问题, 日志文件是捕捉它最容易的地方.
调试MQL文件是一种技能,需要一段时间来学习. 在程序员的处置工具从可用太大的不同,以高层次的语言. 一旦你习惯了用在MetaEditor里和MetaTrader的更简单的工作工具, 这个bug结算过程通常变得更容易.
battlmonstr 说
还有一个图书馆带来 C# 对 MT4 的支持.
它支持调试脚本代码在 Visual Studio 中以及.