您现在的位置: 比特财富网 >> 财经 >  >> 外匯
MT5編程實例課程(阿郎)第二講:一鍵下單
外_匯_邦 WaiHuiBang.com 在第一講中,我們通過一個簡單的例子Lesson1,學習了如何通過MQL5編程在MT5圖表上添加按鈕、處理按鈕點擊事件以及彈出對話框等。www.emoneybtc.com在第二講中,我們將會在Lesson1例子的基礎上進行改進,開發一個可以在MT5圖表上進行一鍵下單的EA。怎樣,是否很感興趣呢?那我們就馬上開始吧! 

首先啟動MT5,從MT5中啟動ME5(MetaEditor5,不知道如何啟動的請參閱第一講相關內容),然後新建一個EA,取名為Lesson2,其它選項保持默認。生成Lesson2的EA代碼文件後,如Lesson1一樣,在OnInit函數中輸入在圖表創建按鈕(Button)的代碼如下: 

大家可以發現代碼和Lesson1基本一樣,唯一的區別是按鈕的文本不同了,這裡設置為"Buy",意即我們打算在按下這個按鈕時,會在MT5中下一張多單(Buy、Long)。輸入完畢後,與Lesson1同樣,我們添加一個OnChartEvent函數,並輸入如下代碼: 

輸入完畢後,按下F5進行編譯,如無錯誤,即會切換到MT5圖表,我們按下圖表上的按鈕"Buy",怎樣?一鍵下單的功能實現了吧?

OnInit函數裡面的代碼這裡就不作解釋了,如不清楚的請回頭參閱Lesson1中的講解,這裡重點講解OnChartEvent中的代碼。 

MqlTradeRequest request; 

這兩句代碼分別定義了一個叫做request的MqlTradeRequest類型變量和一個叫做result的MqlTradeResult類型變量。這裡給初學的朋友補充一下基礎知識:什麼是變量呢?我們可以這樣想象一下:MT5交易軟件是個會做菜的機器,而MQL5開發就是設計菜譜,菜譜中列明了原材料及對原材料的加工方法,把菜譜輸入MT5中,MT5便會自動生成原材料及對原材料進行指定的加工,最後得出我們想要的東西。這個例子很簡潔明,相信讀者朋友很容易就能理解,對嗎?好了,對應到MQL5開發中,數據就是原材料,比如開盤價、收盤價、均線數值等等這些整數、浮點數,就是數據,就是MQL5開發的原材料,而對原材料的加工方法,就是如何對這些數據進行運算處理,最後輸出我們想要的結果。那麼,我們在廚房做菜時,原材料應該放在哪裡呢?總不可能隨便放到台上、地下吧,一般我們都會把原材料放在盤子、碟子裡面,OK!這個盤子、碟子,就是我們的變量了。所謂的變量,就是用來盛放數據的容器,只不過我們知道計算機是很嚴格定義所有東西的,1就是1,2就是2,所以,我們根據數據類型的不同,必須明確指定變量這個容器的規格,這個指定變量規格的過程就叫做定義變量。如上面的代碼,MqlTradeRequest就是規格,request就是根據MqlTradeRequest規格制作出來的容器。關於變量的概念及變量定義就暫時到這裡了,如果還是不明白的話,我也沒辦法了,或者可以參與筆者稍後開辦的MT5 EA開發學習班吧! 

這句在Lesson1中已經講解過了,就是判斷如果Button1按鈕被按下,則執行後續的操作。後續的操作代碼是重點,讀者要留心看了。request.action = TRADE_ACTION_DEAL;request.symbol = Symbol();request.volume = 0.1;request.price = SymbolInfoDouble(Symbol(), SYMBOL_ASK); 

這段代碼的功能很單一,就是往request這個容器裡塞東西,比如青菜、豬肉之類的,塞滿了往MT5這個微波爐一叮,就有吃的了…… 言歸正傳,我們來看看都往request裡面塞了些什麼好吃的。大家可以看到有request.x這種格式,這是什麼意思呢?舉個形象點的例子,我們可以把request這個容器想象成裡面有很多不同大小的格子,每個格子都有自己的名稱,只能裝下固定規格的東西,回到我們的代碼上來,request.action就表示request容器裡一個叫做action的格子,那麼"="符號就表示要把"="號右邊的東西塞到左邊的格子裡面去,那麼,request.action = TRADE_ACTION_DEAL這句就表示把TRADE_ACTION_DEAL這個東西塞到request容器裡一個叫做action的格子裡面。那麼好了,新問題又來了,這個TRADE_ACTION_DEAL又是個什麼東東呢?答曰:這是MT5中內置的一個變量名稱,已經固定好的了,相當於一個暗號,只要你一喊這個暗號,MT5就知道你想干嘛了;那麼如果我們喊出了TRADE_ACTION_DEAL這個暗號,MT5就會干些什麼?答曰:MT5就會給我們下市價單(是不是有點暈了,這也沒辦法,先往下看吧……)。request.symbol = Symbol();這句意思很清楚了,Symbol()是一個函數,把Symbol()函數的返回值裝入request中的symbol格子裡面(關於函數及返回值的概念這裡我沒有精力插入解釋了,不了解的朋友可以找一些基礎的資料看看),Symbol()函數的作用就是把EA所在圖表的貨幣對名稱返回,比如"EURUSD"、"GBPUSD"等。request.volume = 0.1; 指定下單量為0.1手。

request.price = SymbolInfoDouble(Symbol(), SYMBOL_ASK);這裡指定下單時所使用的價格類型,SymbolInfoDouble()函數是個很重要的函數,在MT5編程中免不了要經常用到的,其作用是獲取指定貨幣對的相關數值,這裡就是獲取Symbol()函數返回的貨幣對的Ask價格。值得注意的是,MT4中的Ask、Bid變量在MT5中已不復存在,取而代之的是以上的使用方式。SYMBOL_ASK意指貨幣對的ASK價格。 

request.type = ORDER_TYPE_BUY;ORDER_TYPE_BUY指下單類型為buy單,即多單。

request.sl = SymbolInfoDouble(Symbol(), SYMBOL_ASK)-300*_Point; 

request.tp = SymbolInfoDouble(Symbol(), SYMBOL_ASK)+600*_Point這兩句分別設定下單附帶的止損和止盈價格。

好了,東西全部分門別類地塞入request裡面的格子了,那麼接下來干些什麼呢?接下來就輪到主角OrderSend函數出場了。這裡插些題外話:MT4轉入MT5的朋友要注意了,MT5中的OrderSend函數和MT4中的不大一樣,MT4中的是直接把下單類型、價格、滑點、止損、注釋等等都直接作為OrderSend的參數,而MT5中則是先把這些東西塞入到一個MqlTradeRequest類型的變量中(就是上面的request),然後再把這個變量作為OrderSend函數的參數。 我們把request和result作為OrderSend的函數,request裡面包含了需要MT5干些什麼的指令,而result則是負責接收MT5干活的返回結果,比如是否成功、下好的單編碼是多少等等。ObjectSetInteger(0, "Button1", OBJPROP_STATE, 0);ChartRedraw();這兩句就不用解釋了,Lesson1中已經出現過了。 

Lesson2裡面涉及到的基本概念比較多,初學的朋友可能就要想辦法搞清楚這些概念了。Lesson2的例子中,大家可自己實現下空單的按鈕代碼。好了,至此Lesson2的開發工作就全部結束了,敬請關注MT5編程實戰開發系列第三講!

外_匯_邦 WaiHuiBang.com
  • 郁金香泡沫是指的什麼?

    郁金香泡沫指的是荷蘭的黃金時代的一段時期,當時有一種最新引進的郁金香品種變得十分流行,因此郁金香的期貨價格達到了非常高的水平,直到1637

  • 區塊鏈的創業機會在哪些領域?

    從2017年開始,區塊鏈、比特幣和加密幣、ico等概念逐漸走入公眾視野,同時也引起了資本市場的廣泛關注。2017年,比特幣市值漲幅高達13

  • 周延禮:區塊鏈技術有利於解決供應鏈金融業務的信息孤島問題

    小微企業融資難“卡脖子”的是抵押品的問題。而供應鏈金融可依托供應鏈內核心企業的信用,打破以往依賴不動產抵押,可依據流動資產提供擔保融資,解

  • 區塊鏈:帶情色產業進入天堂

    自古以來,情欲和技術總是密不可分。如過去的信用卡、流媒體技術、4K 高清內容、VR 等出現的新技術,應用的第一站,都是人類的原始沖動突破下

  • 區塊鏈創新應用之共享太陽能

    在布魯克林持有太陽能電池板的居民可以通過區塊鏈向注重環保的鄰居出售部分電能,從而將可再生電能貨幣化。 初創公司 LO3 Energy正與

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