1. <output id="ltidu"><font id="ltidu"></font></output>
        <dl id="ltidu"><ins id="ltidu"><nobr id="ltidu"></nobr></ins></dl><dl id="ltidu"></dl>
            <dl id="ltidu"></dl>

          1. <output id="ltidu"></output>

                <dl id="ltidu"><font id="ltidu"><nobr id="ltidu"></nobr></font></dl>
                <dl id="ltidu"></dl>

              1. <dl id="ltidu"></dl>

                  <dl id="ltidu"></dl>

                1. <dl id="ltidu"><font id="ltidu"><nobr id="ltidu"></nobr></font></dl>
                  <output id="ltidu"></output>

                    <output id="ltidu"></output>

                      您现在的位置:程序化交易>> 外汇现货>> MT5>> MT5知识>>正文内容

                      MT5编程实例课程(阿郎)---第二讲(一键下单) [MT4]

                      • 在第一讲中,我们通过一个简单的例子Lesson1,学习了如何通过MQL5编程在MT5图表上添加按钮、处理按钮点击事件以及弹出对话框等。在第二讲中,我们将会在Lesson1例子的基础上进行改进,开发一个可以在MT5图表上进行一键下单的EA。怎样,是否很?#34892;?#36259;呢?那我们就马上开?#21450;桑?
                        首先启动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类型变量。这里给初学的朋友补充一下基础知识:什么是变量呢?#35838;?#20204;可以这样想象一下:MT5交易软件是个会做菜的机器,而MQL5开发就是设计菜谱,菜?#23383;?#21015;明了原材料及对原材料的加工方法,把菜?#36164;?#20837;MT5中,MT5便会自动生成原材料及对原材料进行指定的加工,最后得出我们想要的东西。这个例子很简洁明,相信读者朋友很容易就能理解,对吗?好了,对应到MQL5开发中,数据就是原材料,比如开盘价、收盘价、均线数值等等这些整数、浮点数,就是数据,就是MQL5开发的原材料,而对原材料的加工方法,就是如何对这些数据进行运算处理,最后输出我们想要的结果。那么,我们在厨房做菜时,原材料应该放在哪里呢?总不可能随便放到台上、地下吧,一般我们都会把原材料放在盘子、碟子里面,OK!这个盘子、碟子,就是我们的变量了。所谓的变量,就是用来盛放数据的容器,只不过我们知道计算机是很严格定义所有东西的,1就是1,2就是2,所以,我们根据数据类型的不同,必须明?#20998;?#23450;变量这个容器的规格,这个指定变量规格的过程就叫做定义变量。如上面的代码,MqlTradeRequest就是规格,request就是根据MqlTradeRequest规格制作出来的容器。关于变量的概念及变量定义就暂时到这里了,如果还是不明白的话,我也?#35805;?#27861;了,或者可以参与笔者稍后开办的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这?#25351;?#24335;,这是什么意思呢?举个形象点的例子,我们可以把request这个容器想象成里面有很多不同大小的格子,每个格子?#21152;?#33258;己的名称,只能装下固定规格的东西,回到我们的代码上来,request.action就表示request容器里一个叫做action的格子,那么"="符号就表示要把"="号右边的东西塞到左边的格子里面去,那么,request.action = TRADE_ACTION_DEAL这句就表示把TRADE_ACTION_DEAL这个东西塞到request容器里一个叫做action的格子里面。那么好了,新问题又来了,这个TRADE_ACTION_DEAL又是个什么东东呢?#30475;?#26352;:这是MT5中内置的一个变量名称,已经固定好的了,相当于一个暗号,只要你一喊这个暗号,MT5就知道你想干嘛了;那么如果我们喊出了TRADE_ACTION_DEAL这个暗号,MT5就会干些什么?#30475;?#26352;:MT5就会给我们下市价单(是不是有点晕了,这也?#35805;?#27861;,先往下看吧……)。request.symbol = Symbol();这句意思很清楚了,Symbol()是一个函数,把Symbol()函数的返回值装入request中的symbol格子里面(关于函数及返回值的概念这里我没有精力插入解释了,不了解的朋友可以找一些基础的资料看看),Symbol()函数的作用就是把EA所在图表的货币对名称返回,比如"EURUSD"、"GBPUSD"等。request.volume = 0.1; 指定下单?#35838;?.1手。
                        request.price = SymbolInfoDouble(Symbol(), SYMBOL_ASK);这里指定下单时所使用的价格类型,SymbolInfoDouble()函数是个很重要的函数,在MT5编程中免不了要经常用到的,其作用是获取指定货币对的相关数值,这里就是获取Symbol()函数返回的货币对的Ask价格。值得注意的是,MT4中的Ask、Bid变量在MT5中已不?#21019;?#22312;,取而代之的是以上的使用方式。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编程实战开发系列第三讲!

                      【字体: 】【打印文章】【查看评论

                      相关文章

                        没有相关内容
                      天津11选5下载

                      1. <output id="ltidu"><font id="ltidu"></font></output>
                          <dl id="ltidu"><ins id="ltidu"><nobr id="ltidu"></nobr></ins></dl><dl id="ltidu"></dl>
                              <dl id="ltidu"></dl>

                            1. <output id="ltidu"></output>

                                  <dl id="ltidu"><font id="ltidu"><nobr id="ltidu"></nobr></font></dl>
                                  <dl id="ltidu"></dl>

                                1. <dl id="ltidu"></dl>

                                    <dl id="ltidu"></dl>

                                  1. <dl id="ltidu"><font id="ltidu"><nobr id="ltidu"></nobr></font></dl>
                                    <output id="ltidu"></output>

                                      <output id="ltidu"></output>

                                        1. <output id="ltidu"><font id="ltidu"></font></output>
                                            <dl id="ltidu"><ins id="ltidu"><nobr id="ltidu"></nobr></ins></dl><dl id="ltidu"></dl>
                                                <dl id="ltidu"></dl>

                                              1. <output id="ltidu"></output>

                                                    <dl id="ltidu"><font id="ltidu"><nobr id="ltidu"></nobr></font></dl>
                                                    <dl id="ltidu"></dl>

                                                  1. <dl id="ltidu"></dl>

                                                      <dl id="ltidu"></dl>

                                                    1. <dl id="ltidu"><font id="ltidu"><nobr id="ltidu"></nobr></font></dl>
                                                      <output id="ltidu"></output>

                                                        <output id="ltidu"></output>