MT5編程實例課程(阿郎)第二講:一鍵下單

2019-07-11 阅读 : 次
在第一講中,我們通過一個簡單的例子Lesson1,學習了如何通過MQL5編程在MT5圖表上添加按鈕、處理按鈕點擊事件以及彈出對話框等。在第二講中,我們將會在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編程實戰開發系列第三講!

本文標題:MT5編程實例課程(阿郎)第二講:一鍵下單 - MT5平台MQL5編程學習
本文地址:/fxschool/autotrading/mql5/113859.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編程學習
你可能感興趣