2.2 内置变量与函数

2. 2  内置变量与函数

MQL4提供了大量的内置变量与函数,用来取值计算。目前,网上有许多的手册,但都是翻译机器从原版英文手册自动翻译过来的,可读性极差。

笔者通过实践积累了大量的经验,再加上自己的理解,精选了部分常用的、实用的内容重新说明。

2.2.1  整数相除的方法

在MQL4的语法中有“+-*/”四则运算,当你直接用“1/3”的时候,会返回“0"。在程序中可以这样来实现:

double i=(1*0.01)/(3*0. 01);

这时变量i才会返回你所要的值:0.333333330

2.2.2  市场函数

我们经常会遇到不同平台报价格式不同、滑点数不同、最小开仓量不同、市场时间不同等情况,这些数据都能通过市场函数直接获取,这样才能给EA带来较大的适用性。

市场函数调用范例:定义最低价变量myLow,并获取最低价。

mylow = Marketlnfo( symbol( ) , MODE_LOW )/获取当前货币对的最低价

所有参数列表如下:

2.2.3  账户函数



2.2.4  市场变量

2. 2.5  时间函数

MQL4内置时间函数数值的最小读取单位是以每个新价格(tick )为基础的。如果没有新价格出现,则时间数值不能获取。

 Time和TimeCurrent)的数据类型为datetime,返回从1970年1月1日零点开始至今累计的“秒”数。Time[0]返回当前蜡烛时间,TimeCurrent( )返回当前新价格(tick )时间。

2.2.6  蜡烛序列函数

我们经常需要计算n一n+i个蜡烛的最高最、低价,因此这组函数用途十分广泛。

2.2.7  交易函数

关于交易函数详见MT4的帮助(本书第五章M Q4命令手册),具体用法在本书后续的范例中会频繁出现。在这里需要强调的是:

1.在自定义指标中不能调用OrderSend ( ) , OrderClose , OrderCIoseBy , Or-derDelete和OrderModify交易函数。

2. OrderClose , OrderCIoseBy , OrderDelete和OrderModify函数在调用前必须用OrderSelect)命令选择订单。

2.2.8  数学三角函数

关于数学函数详见MT4的帮助(本书第五章M Q4命令手册)。

值得强调的是:绝对值函数使用频率最高,我们经常需要判断当前价是否达到了预期的止盈止损,就是用这个函数。下面是个例句:

If ( MathABS( Close } 0]一OrderOpenPrice ( ) )  > Stoploss * Point ) ;//如果价位达到止损

使用这个语句的意义就在于我们不必去管当前订单是买人类型还是卖出类型。

2.2.9  数组函数

1.关于数组函数详见MT4的帮助。在此强调以下几个注意事项:数组的最大维数为4维。例如,定义一个数组为myArray 10 ,10 ,10 ,说明该数组有4维,每维有10个元素。

2.维数元素序号从“0”开始计算。例如,myArray [ 0,表示变量myArray第0个位置的数据。假如该数组定义为10个数字,那么第10个数字就应该表示为myArray [ 9 ]。

3. MQL4不是专业的计算机开发语言,在数组使用方面有不严谨之处。

比如在编写指标的时候,你预先定义了一个一维数组A[ ],这个方括号里若为空,表示可以使用任意多个元素。实际上,在调用这个数组的时候,必须先定义元素数量,否则无法取值。

2.2.10  弹出消息框函数

[源代码]


[源代码说明]

MessageBox需要调用mql的函数,因此在程序头需要添加一个语句,否则通不过编译,该语句后面不要跟“;”:

#include<WinUser32. mqh>