您现在的位置: 比特财富网 >> 财经 >  >> 外匯
MT5編程實例課程(阿郎)第一講:Hello,MT5
外_匯_邦 WaiHuiBang.com MT5的推出,實在是廣大匯友之福!新增的眾多強大功能,相信會讓大家在交易時如虎添翼。www.emoneybtc.com廢話不多說,沿襲MTx編程實戰開發系列的慣例,先來個小例子,讓大家感受一下MT5的強大。 

選擇菜單上”Tools->MetaQuotes Language Editor”選項,啟動MQL5編輯器MetaEditor5(以下簡稱ME5),或者在MT5中直接按快捷鍵F4,同樣可啟動。進入ME5後,點擊工具欄上的“New”按鈕  

在彈出的對話框中選擇Expert Advisor選項: 

點擊“下一步”,輸入EA的名稱:  

這裡我們將第一個EA例子命名為Lesson1,輸入後點擊“完成”按鈕,即可生成Lensson1.mq5文件,一切與ME4基本一致。 

讓我們來觀察一下Lesson1.mq5的代碼結構,與MT4時代自動生成的EA代碼基本一樣,也是三個函數,其功能也是一樣的,區別在於名字變了,MT4時代的是init、deinit和start,而MT5中生成的是OnInit、OnDeinit和OnTick。On我們可以理解為“當。。。”的意思,那麼這三個函數就很形象了,分別為:當初始化、當程序結束和當價格跳動。這裡作個補充:MT5中雖然增加了Timer機制,但默認仍然是基於Tick驅動事件的,Timer機制需自行啟動(最後這段話看不懂?沒關系,以後再用例子說明,這裡不看也罷,呵呵)。 

好了,框架有了,那麼我們想讓第一個例子Lesson1實現些什麼功能呢?我是這樣打算的:讓Lesson1在圖表上添加一個按鈕,當點擊這個按鈕時,會彈出一個對話框,對話框的內容是“Hello, MT5!”。有了目標就好辦,我們繼續前進! 

首先我們讓Lessson1具備在圖表上添加按鈕的功能。我們在OnInit函數中添加如下代碼: 

輸入完畢後,按下編譯快捷鍵F5,如輸入無誤,會自動切換到MT5圖表: 

如圖1-3勾上兩個選項,點“確定”,EA就加載到圖表上了。這時我們可以發現,在圖表中多了個按鈕。

點擊這個按鈕,什麼都沒發生,那是因為我們還沒有為這個按鈕添加處理代碼。下面,我們繼續為Lesson1添磚加瓦。 

在OnTick函數下面添加一個函數OnChartEvent,並輸入如圖1-5所示代碼: 

輸入完畢,再次按下編譯快捷鍵F5,然後點擊圖表上的按鈕,這時就會彈出個對話框,內容為”Hello,MT5!”:

至此,我們的Lesson1就完成了!怎樣,MT5的功能不錯吧? 

下面,為大家講解一下上面的代碼含義。首先我們看看在OnInit函數裡面添加的代碼 

如果讀者有MT4編程基礎的話,ObjectCreate函數就非常熟悉了(如不熟悉請參閱筆者的《MT4編程實戰開發系列》,創建一個Object(物件),OBJ_BUTTON是MT5新增的參數,意即創建一個Button1(按鈕)。 

ObjectSetInteger(0, "Button1", OBJPROP_XDISTANCE, 250); 

ObjectSetInteger(0, "Button1", OBJPROP_YDISTANCE, 100); 

上面兩句分別設定了Button1的X坐標和Y坐標。注意:在MT4時代,Object的所有屬性都是用ObjectSet函數來設定的,在MT5中,將其細分為ObjectSetInteger、ObjectSetDouble和ObjectSetString三個函數了,三權分立,各司其職。 

ObjectSetString(0, "Button1", OBJPROP_TEXT, "Say"); 

ObjectSetString函數功能為設定Object的string類型(字符串類型)屬性,這裡設置Button1上面的文字。補充一下:MT5中對中文的支持仍然很差,這裡如果設置為中文則無法顯示,希望後續版本有所改善 

ObjectSetInteger(0, "Button1", OBJPROP_STATE, 0); 

最後,設定OBJPROP_STATE屬性,這個屬性控制著Button1的顯示狀態,設置為0,表示默認顯示為彈起的,大家可將其設為1,看看效果。 

綜述,上面的幾句代碼創建了一個叫做Button1的按鈕,並設置了x,y坐標及按鈕文字、顯示狀態。 

接著,我們來看看新增的函數OnChartEvent。如上所述,OnChartEvent顧名思義就是“當圖表上發生了事情時。。。”,OnChartEvent的參數比較多,也比較復雜,這裡暫時不解釋,後面有機會再細談,這裡我們需要知道的是:在MT5中,當圖表上發生了任何事情,如點擊按鈕、輸入框中輸入文字、拖動Object、按下鍵盤等等,就會調用OnChartEvent函數。那麼,我們只需守株待兔,在OnChartEvent函數中檢測Button1是否被按下: 

if (id==CHARTEVENT_OBJECT_CLICK && sparam=="Button1") 

這句,意思就是當圖表上發生了事情,如果是Object被按下,且Object的名字是Button1,則滿足條件,繼續下面的操作: 

MessageBox("Hello, MT5!", "Button1", MB_OK); 

MessageBox函數功能是彈出一個對話框,其中參數這裡就不詳述了 

看起來Lesson1似乎工作得不錯,但仔細看看,按鈕在按下之後不會自動彈起來!為了解決這個問題,我們把OnChartEvent函數改進一下: 

還記得OBJPROP_STATE屬性吧,控制按鈕的顯示狀態,那麼這裡的意思就是顯示完MessageBox後,再次把按鈕的顯示狀態恢復為彈起。至此,Lesson1開發全部結束,敬請關注MT5編程實戰開發系列第二講! 

作者:阿郎(shawnyau)

外_匯_邦 WaiHuiBang.com
  • 在審計工作中如何運用區塊鏈技術

    本文淺談區塊鏈對審計工作的影響,並從區塊鏈的技術特點入手,探討在審計工作中如何運用區塊鏈技術。區塊鏈簡介   &nbs

  • 新加坡的保險巨頭MetLife將通過區塊鏈技術,改善索賠流程

    8月22日訊,總部位於新加坡的保險巨頭MetLife研究中心LumenLab正在測試一個新的區塊鏈動力平台,該平台旨在改善被診斷患有妊娠

  • 為什麼區塊鏈是殺不死的?

    據了解,區塊鏈只是一個分布式算法。當一個分布式算法被設計出來,代表它的開源代碼被公布以後,它就開始在網絡上傳播。只要這個世界上有電,有計算

  • 【盤點】最全區塊鏈專業術語

    初入鏈圈,很多人都可能被各種專業名詞搞得暈頭轉向,因此,小編在這裡整理了最常見48個區塊鏈名詞供大家參考。1、Blockchain——區塊

  • 區塊鏈的未來... ...

    2008年,比特幣作為區塊鏈的首次應用橫空出世,人們一度將二者混為一談。以比特幣為代表的加密貨幣,至今依然被業內認為是區塊鏈最成熟的落地應

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