MQL5编程学习之MT5中的调试功能(Debug)应用

2019-07-11 阅读 :
MetaTrader发展到MT5版本后,虽然相比起专业化的开发工具还有一定距离,但终于初具一个现代化软件开发工具的雏形了,这其中在MetaEditor5中提供的Debug功能(调试功能)就是一个巨大的进步。涉足过MT4编程的朋友可能都有过痛苦的经历:对照着网上的众多代码,东抄西凑,经过一番天昏地暗的折腾后,终于弄出了一个颇为得意的EA或指标,好了,挂到图表上开始享受高科技的便利吧!兴冲冲的等了半天,就是没啥反应!抓狂吧,还不知道抓哪里。。。可能是某个变量忘记赋值了,或者把应该赋给B变量的数值赋给A变量了,怎么办?从头开始慢慢检查,代码少的还能扳着手指头算一下程序运行到哪里了,变量该是多少了,如果成百上千行的代码,那就哭吧。。。 

废话少说(都说了那么多。。。),还是用一个例子来介绍一下Debug的使用方法吧,没有接触过Debug概念的朋友也可藉此机会学习这个强大的功能。 

首先我们来设想一下:假设现在代码中有一个循环,循环中每一次都会给一个变量加1,那么如何知道这个加1的操作是否正确的执行了呢?借助MetaEditor5提供的Debug功能,我们来窥视一下MT5的内部运作吧。新建一个EA,名字随便起,这里姑且叫作DebugDemo吧,其它属性保持默认,确定。生成DebugDemo的代码框架后,首先添加一个int类型的全局变量sum:
int sum = 0;
for (int i=0; i<100; i++) 

sum += 1; 
}
复制代码上面这段代码如具有一定编程基础的朋友应该都能看懂了,就是循环100次,每次给sum这个变量+1。那么,我们现在希望EA运行的时候是逐遍地运行循环,每次循环我们都能观察到sum这个变量里面的数据变化,该怎么做呢?首先,我们给这段代码加入一个断点(BreakPoint)。什么是断点呢?这里作个简单的解释:断点是程序开发中的一个专业术语,通俗来说就是告诉MT5运行到这个断点的时候,就打住了,别往下走了,听候上级吩咐吧!那么,我们的断点放在哪里好呢?(大家往下看之前可以自己想想这个问题的答案)答案是:放在sum被赋值的地方。好了,目标有了,领导发话了那就干活吧,但是,还有个问题,怎么添加断点呢?把鼠标放到希望加入断点的地方(以行为单位),单击右键,选择"Toggle Breakpoint"选项,或直接按快捷键F9,就会在这行的行号位置出现一个蓝色的圆圈,这就表明在当前位置添加了一个断点,当EA代码运行到这个断点位置时,就会停下来了。 

加入断点后,编译代码,运行EA。这时会自动切换到MT5软件上去了,我们这时切换回MetaEditor5,大家可以看到在下方的输出窗口: 

我们在"Expression"下方输入变量名sum: 

按下回车: 

好了,我们刚才干了些什么呢?嗯,我们把变量sum加入了监视列表,从现在起,只要变量sum里面的数据发生任何变化,这里都会即时更新的,通过这种方式,我们就可以实时跟踪变量sum的数值变化,从而达到所谓的调试目的了。 

现在,我们看到"Value"一列中,数值为0,这表明目前为止,sum里面的数据是0,还是我们初始化时候赋的值。但我们这个EA的功能不是让sum循环100遍的+1么?怎么没完成任务就开始休息了呢?呵呵,这就是断点的作用了,由于这行存在断点,所以程序运行到sum第一次赋值之前就停下来了,领导不发话,谁敢动啊。。。 

这时候,我们看看工具栏,有3个本来是灰色的按钮变成可用状态了: 

我们点击一下第一个按钮"Setp into",这时就会发现value一栏的数值发生了变化,从0变为1了,这是因为程序跑了一遍循环,给变量sum进行+1了。顾名思义,setp into,就是步进,也就是一步步的来运行。举个例子,大家应该都参加过军训吧?在练习正步走的时候,教官通常都会进行分解动作练习(不堪回首的记忆啊。。。),教官喊“一”,大家踢左脚,喊“二”,大家踢右脚。。。我们这里也大概是那么回事了,每按一下"Setp into"按钮,EA就动一下,由于这里总共要循环100遍,所以每次EA就循环一遍,变量sum就被+1一次,如此往复循环。。。 

好了,至此就结束了关于Debug功能的简单介绍,由于笔者能力所限,只能起个抛砖引玉的作用,希望有经验的朋友能在论坛上不吝分享关于Debug的使用心得,或来人来函来电以及来而不往非礼也之进行关于MQL5开发方方面面之热烈洽谈。。。 

作者:阿郎(shawnyau)

本文标题:MQL5编程学习之MT5中的调试功能(Debug)应用 - MT5平台MQL5编程学习
本文地址:http://www.waihuibang.com/fxschool/autotrading/mql5/113857.html

相关文章

  • MQL5编程学习之MT5中的调试功能(Debug)应用

    MetaTrader发展到MT5版本后,虽然相比起专业化的开发工具还有一定距离,但终于初具一个现代化软件开发工具的雏形了,这其中在MetaEditor5中提供的Debug功能(调试功能)就是一个巨大的进步。涉足过MT4编程的朋友可能都有过痛苦...

    2019-07-11 MQL5编程学习
  • MQL5变色线的画法(比MQL4更加简单)

    MQL5里有一种特殊指标数组“颜色数组”,他是和画线的指标数组配合使用的。通过对他的简单赋值可以使画出的线变色。 首先要在指标头部定义里指定一条线对应的数组是要使用变色画线方式,指定方法是: #property indicator_...

    2019-07-11 MQL5编程学习
  • MQL5编程MT5程序代码讲解 之 旋转的时间

    //+-----------------------------------------------------+ ytg_Time_exp.mq5 | //Copyright Yuriy Tokman | //yuriytokman@gmail.com | //+-----------------------------------------------------+ #property co...

    2019-07-11 MQL5编程学习
  • 外汇EA程序化交易的"圣杯"真的存在吗?
    外汇EA程序化交易的"圣杯"真的存在吗?

    记得最早接触外汇是2009年在美国留学的时候,虽然之前接触过股票,但是外汇的保证金交易还是感觉非常刺激。刚开始和大多数人一样,有过几天翻几倍的经历。当然也少不了n次爆仓的痛苦经历。自从开始交易外汇就阅读了大量的...

    2019-07-11 MQL5编程学习
  • 编写一个稳定盈利的外汇EA到底难不难?好的外汇EA长什么样?

    在一段时间,我们一直在研究赌博的概率与胜率,包括一些赌场高手的注码策略,对外汇的资金管理很有帮助,除了下单的胜率之外,您还要考虑平仓,您下单之后有浮赢了,能否变成真正的利润,还要取决于您的平仓策略,平仓策略不好,赚钱会变...

    2019-07-11 MQL5编程学习
  • 外汇EA入场主要使用什么交易策略?

    外汇EA如果进行细分,可以分为无数种,但是其入场策略按行情走势无非是以下三种: 1、突破交易:例如行情突破某一上方阻力位置(历史前高),EA自动识别,启动最多;行情突破某一下方支撑位置(历史前低),EA自动识别,启动最空。2、反弹交易...

    2019-07-11 MQL5编程学习
  • 外汇EA程序化交易系统设计心得体会

    投机就像山岳一般古老。毋庸费言,外汇零售市场的属性,必然会让国内的大多数外汇交易者,以中短期投机的方式居多,长期价值投资的偏少。而作为波动市场的王者,外汇市场给了手工交易和程序化交易最丰富的可能性,此种优势,其他市...

    2019-07-11 MQL5编程学习
  • 程序化交易全方位解读:外汇EA智能交易系统
    程序化交易全方位解读:外汇EA智能交易系统

    MQL4、MQL5编程提供:外汇EA、ea官网、程序化交易、程序自动交易、量化投资、EA自动化交易系统等相关学习文章和资料。一、什么是外汇EA智能交易?外汇EA智能交易是MT4与MT5的Expert Advisor(简称EA)的中文译名...

    2019-07-11 MQL5编程学习
  • EA交易可靠吗?关于智能化自动交易的多方位解读
    EA交易可靠吗?关于智能化自动交易的多方位解读

    关于外汇EA的种种及前因后果先行做个说明,以下尽量避免教科书式的解答。 1、智能交易的定义。但讽刺的是第一个话题就是我在网上搜的标准概念:由程序员借助一门计算机程序设计语言,通过编写程序交易指令、模拟人类交易员的行...

    2019-07-11 MQL5编程学习
  • 有效控制外汇EA亏损和爆仓的方法

    随着越来越多的外汇投资者使用EA交易代替人工交易,对于外汇EA的风险控制了解也变得越来越重要,那么我们使用外汇EA时应该如何有效控制亏损和爆仓呢?...

    2019-07-11 MQL5编程学习
你可能感兴趣