您现在的位置: 比特财富网 >> 财经 >  >> 外匯
MQL5編程學習之MT5中的調試功能(Debug)應用
外_匯_邦 WaiHuiBang.com MetaTrader發展到MT5版本後,雖然相比起專業化的開發工具還有一定距離,但終於初具一個現代化軟件開發工具的雛形了,這其中在MetaEditor5中提供的Debug功能(調試功能)就是一個巨大的進步。www.emoneybtc.com涉足過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)

外_匯_邦 WaiHuiBang.com
  風險提示:比特財富網的各種信息資料僅供參考,不構成任何投資建議,不對任何交易提供任何擔保,亦不構成任何邀約,不作為任何法律文件,投資人據此進行投資交易而產生的後果請自行承擔,本網站不承擔任何責任,理財有風險,投資需謹慎。
比特財富網 版權所有 © www.emoneybtc.com