MT5编程实例课程(阿郎)第二讲:一键下单

2019-07-12 18:44:49 阅读 :
在第一讲中,我们通过一个简单的例子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编程实例课程(阿郎)第二讲:一键下单 - MQL5编程学习
本文地址:http://www.0594trade.com/download/mql5/2480.html

相关文章

  • 阿里云优惠活动合集 阿里云ECS云服务器代金券优惠券领取

    阿里云企业级高性能云服务器优惠购买通道:更高计算网络性能,助力企业上云阿里云ECS入门级服务器优惠2折入口:爆款云服务器低至2折,1核1G ECS云服务器低至293元/年阿里云购物车全产品返25%:每满1000立减50元且可叠加代金...

    2019-07-12 MQL5编程学习
  • 外汇程序化交易/算法交易入门基础知识

    程序化交易/算法交易在外汇交易市场的应用是一个非常领先的技术,也是非常有趣的交易玩法。程序化交易/算法交易对于个人交易者而言要求虽然非常高,在外汇交易市场应用程序化交易/算法交易之前,必须对外汇交易有非常深刻...

    2019-07-12 MQL5编程学习
  • 不是EA不行,是你的EA不行

    还记得,几年前我在伦敦工作的时候,在寻找大量外汇EA测试都失败后,我问过我当时的老板Jay一个问题:“是不是市面上不存在稳定盈利的外汇EA?”。然后他给我的回答是“You can’t say EA is not work because your EA is...

    2019-07-12 MQL5编程学习
  • MQL5变色线的画法(比MQL4更加简单)

    MQL5里有一种特殊指标数组“颜色数组”,他是和画线的指标数组配合使用的。通过对他的简单赋值可以使画出的线变色。首先要在指标头部定义里指定一条线对应的数组是要使用变色画线方式,指定方法是:#property indicator_...

    2019-07-12 MQL5编程学习
  • 深度解析外汇中的四种算法交易系统

    我国的外汇衍生品交易市场还没有完全开放,但是目前参与到外汇交易中的人群已经超过千万级的人数。  对于我国的金融市场而言,算法交易的应用也是刚刚起步。可是,算法交易在国际金融市场应用已经非常广...

    2019-07-12 MQL5编程学习
  • 外汇EA入场主要使用什么交易策略?

    外汇EA如果进行细分,可以分为无数种,但是其入场策略按行情走势无非是以下三种: 1、突破交易:例如行情突破某一上方阻力位置(历史前高),EA自动识别,启动最多;行情突破某一下方支撑位置(历史前低),EA自动识别,启动最空。2、反弹交易...

    2019-07-12 MQL5编程学习
  • EA交易可靠吗?关于智能化自动交易的多方位解读

    关于外汇EA的种种及前因后果先行做个说明,以下尽量避免教科书式的解答。 1、智能交易的定义。但讽刺的是第一个话题就是我在网上搜的标准概念:由程序员借助一门计算机程序设计语言,通过编写程序交易指令、模拟人类交易员的行...

    2019-07-12 MQL5编程学习
  • 手把手教你如何挑选购买阿里云ECS云服务器

    一、点击进入阿里云官网,使用自己的支付宝或者淘宝账号进行登录,没有账号的先注册账号。二、购买前可先点击这里领取阿里云代金券,这样子在付款时便可以使用领取的代金券抵扣部分付款,从而节省不少成本。三、登录账户后,在...

    2019-07-12 MQL5编程学习
  • 外汇EA程序化交易系统设计心得体会

    投机就像山岳一般古老。毋庸费言,外汇零售市场的属性,必然会让国内的大多数外汇交易者,以中短期投机的方式居多,长期价值投资的偏少。而作为波动市场的王者,外汇市场给了手工交易和程序化交易最丰富的可能性,此种优势,其他市...

    2019-07-12 MQL5编程学习
  • MQL5编程MT5程序代码讲解 之 旋转的时间

    //+-----------------------------------------------------+ ytg_Time_exp.mq5 | //Copyright Yuriy Tokman | //yuriytokman@gmail.com | //+-----------------------------------------------------+ #property co...

    2019-07-12 MQL5编程学习
你可能感兴趣