* EA开发大师是一套能根据用户设定条件,自动生成EA源代码的“傻瓜式”EA开发软件,即使不懂MT4编程技术的,也可通过此款软件快捷高效地开发出心目中的理想EA。
* 目前EA开发大师为测试阶段,免费提供给所有用户使用。v0.1版本暂时只开发两个EA模型,后续版本会陆续开放新的EA模型,敬请关注本页面以获取最新版本的EA开发大师。
专注于MT4编程技术的外汇博客
* EA开发大师是一套能根据用户设定条件,自动生成EA源代码的“傻瓜式”EA开发软件,即使不懂MT4编程技术的,也可通过此款软件快捷高效地开发出心目中的理想EA。
* 目前EA开发大师为测试阶段,免费提供给所有用户使用。v0.1版本暂时只开发两个EA模型,后续版本会陆续开放新的EA模型,敬请关注本页面以获取最新版本的EA开发大师。
我把MQLib开发专家的第一个试用版本发布出来了,有兴趣的朋友可以试用一下。由于时间关系,文档还在编写之中,同时因为MQLib尚未完善,所以目前限制了只能用于模拟帐号上。有兴趣的朋友请到MQLib官方网站下载:http://www.mqlib.com/chs/。
有个学员在QQ上咨询了我这个问题,其实判断也很简单:在MT4提供的系统变量里,有个叫做Digits的int类型变量,其作用是返回当前货币对的小数位。那么,我们就可以这样来判断:
if (Digits==5 || Digits==3) //是5位/3位报价 { ... //进行相应操作 } else if (Digits==4 || Digits==2) //是4位/2位报价 { ... //进行相应操作 }
最近群里有些朋友在询问EA下单时有效期expiration参数应怎么填写。其实也很简单,这个参数是以秒为单位的。下单时用当前的时间(服务器时间或本地时间)加上你计划的期限(以秒计算)即可,例如:
OrderSend(…….,TimeCurrent()+Period()*60,..);
假如当前的图表是天图的话,那么这张挂单就会在24小时后失效(看不明白的先复习一下Period函数的作用)。
MT4编程中,有几个函数非常重要,而MarketInfo就是其中的一个。
大家都知道,瑞士军刀以其功能繁多而著称于世,同样,MarketInfo在MT4编程中也担当着类似的角色。通过使用MarketInfo函数,可以获得很多非常有用的信息。我们先来看看MarketInfo函数的原型定义:
double MarketInfo(string symbol, int type);
我们可以看到,MarketInfo有两个参数,第一个顾名思义,就是货币对名称,指我们希望获得信息的货币对名称;第二个是一个叫做type的int类型参数,这个 参数就是关键了。举个例子,假如我们想获取GBPUSD的点差,可以这样获取:
MarketInfo(“GBPUSD”, MODE_SPREAD);
又如我们想确定某个货币对在MT4中是否允许被交易,可以这样写:
MarketInfo(“NZDJPY”, MODE_TRADEALLOWED);
假如返回值是1,表示允许,返回0则表示禁止交易此货币对。
全局变量在MT4编程中有两层含义,一是编程领域中常规的全局变量含义,即独立于所有函数之外定义的变量,生命周期覆盖整个程序;还有一个就是MT4中独有的:在同一MT4客户端内,所有的指标、脚本和EA都可共享同一全局变量:
GlobalVariable,这个概念类似于编程领域中的共享内存区域;下面简单介绍一下其用法。
首先是必须用到的三个函数:GlobalVariableSet()、GlobalVariableGet()、GlobalVariableDel()。顾名思义,这三个函数的作用分别是设置、获取和删除GlobalVariable。在任何一个指标、脚本和EA中,可用GlobalVariableSet来设置一个GlobalVariable,如:
GlobalVariableSet(“test”, 1.2345);
这就设置好了,把这个指标挂到任何一张图表之上后,在同一个MT4客户端下运行的任何指标、脚本和EA都能读取到这个GlobalVariable了,读取方法:
GlobalVariableGet(“Test”);
最后,如果我们不需要这个GlobalVariable了,就可以这样把它删除了:
GlobalVariableDel(“Test”);
需要注意:一是GlobalVariable只能是double类型的数据,不能把string、数组之类的赋给它,否则编译的时候虽然不会报错,但其实是无效的;二是GlobalVariable的生命周期是名符其实的“全局”,在设置了一个GlobalVariable后,如果不用GlobalVariableDel来删除它,它将会一直存在,无论设置它的指标、脚本和EA是否已被删除,甚至MT4关闭后也会存在,下次重新启动MT4时这个GlobalVariable仍然是可用的!善用这点,在设计交易程序的时候可说是如虎添翼,呵呵!
另外,向大家推荐一个很好的网址导航网站,里面收录的全部是目前网络上热门网站的正版地址,让大家远离钓鱼诈骗网站的困扰:www.4400u.com。
虽然MT4内已经设置了多种周期的浏览方式,如M5、M15、M30等,但有些朋友喜欢看一些“非主流”的周期的图表,MT4内置的周期格式就已不能满足需求,这时就要通过别的途径来生成其它周期的数据图表。
在MT4中的“导航器”(Ctrl+N调出),打开“脚本”一栏,大家可以看到有个叫做“period_converter”的脚本,顾名思义,这个就是用来生成任意周期的数据图表的脚本,而且这个是mt4内置的,非常方便。下面和大家分享一下这个脚本的用法。
假如我现在看EURUSD的2分钟图表,但MT4只有1分钟周期的图表,该怎么做?我们可以利用M1的数据来生成m2的图表,方法如下:首先打开EURUSD的M1图表:

然后双击刚才介绍的“period_converter”脚本,会弹出一个参数设置窗口:
我们看到只有1个参数ExtPeriodMultiplier,它的数值是以分钟为单位的,也就是说你想生成什么周期的图表,就填入这里行了,上面我们的目的是生成2分钟的图表,所以这里填“2”,如果我想生成20分钟的图表呢?自然就是填“20”了,如果想生成2小时的图表呢?也很简单:2X60=120,填入“120”就对了。
填入希望转换的周期,确定后,似乎什么都没发生?不然,其实MT4已经在后台为你生成了所需的图表,这时我们通过“文件”菜单,“打开离线历史数据”:

在弹出的窗口里面,我们可以找到我们需要的2分钟周期图表了:
双击“EURUSD,M2”,就会打开以2分钟为周期的图表:
需要注意的是,这是离线的历史数据,也就是说通过这种方式生成的任意周期图表,并不会自动更新。如需其自动更新,就需要用到一些较为复杂的技巧了,有兴趣的朋友可联系我进行更为深入的探讨。
这是初学MT4编程的朋友问得比较多的一个问题。大家知道,start函数是在每次价格变动时都会被调用的,那么写在start函数内的各种条件判断和交易操作都会同时被执行,如何避免这种情况的发生呢?答案就是在进行各种条件判断或交易操作前,先判断当前的bar是否为一根新的bar(即在该bar的周期内没有进行过判断或交易)。
首先,我们定义一个全局变量:
(如不清楚全局变量的含义,可翻查一下相关资料。这里补充说明一下,在MQL语言中,其实datetime类型就是int类型,所以写成如下格式其实也是可以的:
然后,我们可以在start函数中进行是否为新bar的判断:
正如前面所说,MQL里面的时间类型其实就是int类型,所以可以进行大小的判断,在MT4中,随着时间的流逝,Time[]数组中的数值是从左往右不断增大的,Time[0]代表当前时间,也是Time[]数组中最大的数值。