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編程學習
本文地址:/fxschool/autotrading/mql5/113857.html

相關文章

  • 使用外彙EA炒外彙,怎樣才能有效控制EA虧損及爆倉?

    在如今的外彙交易中,隨著量化交易或者人工智能在一定程度上代替了人工交易,由于交易者不需要隨時盯盤,隨之而來的可能就是風險。所以,使用EA進行外彙交易中的風險控制也就成爲了第一要點。下面我們就來看看外彙EA交易怎麽才能夠有效控制爆倉。請大家牢記一句話:收益越高,風險越大!...

    2019-09-05 MQL5編程學習
  • 外彙EA交易者要如何控制使用外彙EA時的風險?
    外彙EA交易者要如何控制使用外彙EA時的風險?

    實際上隨著金融市場體制的日趨完善,無風險投資已經很難實現,因此才需要每個進入金融市場的投資者隨時應對可能出現的風險。那我們就需要未雨綢缪,做一些必要的准備,這也成爲在使用EA時所必須掌握的一門學問,在接下來的課程...

    2019-09-05 MQL5編程學習
  • 淺談外彙EA,如何讓交易變得更安全?

    外汇EA,全称Expert Advisor,是使用MQL4编程语言,针对Meta Trader 交易平台编写的自动交易程序。通过实时获取市场报价信息,自动判断入场和出场时机,模拟交易员对MT4/MT5客户端进行一系列交易操作,从而实现自动化交易。 交...

    2019-09-05 MQL5編程學習
  • 外彙EA常用的資金管理策略

    1.中性策略(Neutral strtegy,NT)现在测试EA都要求使用0.1手固定手数,不得启用复利模式,以检视EA的性能。 用于提供与其他EA比较的基准。 2.马丁格尔法(Martingale,MG)在每次赔钱后,将赌注加倍,而在任何一次赢钱后,下一次又...

    2019-07-16 MQL5編程學習
  • MT5編程實例課程(阿郎)第三講:均線交叉EA

    #property copyright "Simon Yau"#property link "http://www.xxxxxx.com"#property version "1.00"int maFastHandle, maSlowHandle; //定义两个指标操作句柄,用来操作两条均线double maFast[], maSlow[]; //定义两个...

    2019-07-11 MQL5編程學習
你可能感興趣