MQL4命令中文详解手册文档Word文件下载.docx
《MQL4命令中文详解手册文档Word文件下载.docx》由会员分享,可在线阅读,更多相关《MQL4命令中文详解手册文档Word文件下载.docx(203页珍藏版)》请在冰豆网上搜索。
![MQL4命令中文详解手册文档Word文件下载.docx](https://file1.bdocx.com/fileroot1/2023-1/9/5df91ce6-63d3-4d2a-a57c-01dd2c98d8f4/5df91ce6-63d3-4d2a-a57c-01dd2c98d8f41.gif)
单行注释使用//作为开始到新的一行结束,可以被嵌套到多行注释之中。
示例:
//单独注解
/*multi-
line//嵌入单独注解
comment
*/
Identifiers标识符
标识符用来给变量、函数和数据类型进行命名,长度不能超过31个字节,你可以使用数字0-9、拉丁字母大写A-Z和小写a-z(大小写有区分的)还有下划线(_)。
此外首字母不可以是数字,标识符不能和保留字冲突.
NAME1namelTotal_5Paper
Reservedwords保留字
下面列出的是固定的保留字。
不能使用以下任何保留字进行命名。
数据类型
储存类型
操作符
其他
bool布尔数据
extern
break
false
color颜色数据
static
case
true
datetime日期时间数据
continue
double浮点型数据
default
int整型数据
else
string字符串数据
for
void
if
字符数据(char)
return
switch
while
Datatypes数据类型
所有的程序都依靠数据来运作,数据因目的不同可以有不同的类型。
比如,访问数组可以用整型数据,价格可以用双精度的浮点型数据。
在MQL4中没有专门用来标记货币值的数据类型。
不同的数据类型有不同的处理速度,整型数据是最快的。
双精度的数据处理需要额外的处理器,所以处理浮点型数据比较复杂,比处理整型数据慢一些。
字符串是处理速度最慢的,因为它要存取动态内存。
主要的数据类型如下:
⏹整型数据(int)
⏹布尔数据(bool)
⏹字符数据(char)
⏹字符串数据(string)
⏹浮点型数据(double)
⏹颜色数据(color)
⏹日期时间数据(datetime)
color和datetime可以使我们更清楚的区分图表中的内容,在expertadvisor和indicator中经常使用这些数据类型。
颜色和日期时间数据用整数来表示。
int和double都属于数值(数字)型。
在表达式运算中使用强制的类型转换。
Typecasting类型转换
表达式中使用强制的数据转换,转换时类型的优先级如下:
int(bool,color,datetime);
double;
string;
在运算完成之前(除了数据已被定义的),数据会根据优先级被转换。
当定义数据的操作完成前,数据会转换成被定义的数据类型。
inti=1/2;
//没有类型转换,结果为0
inti=1/2.0;
//表达式中有浮点型数据,但会转换成整型数据,结果为0
doubled=1.0/2.0;
//没有类型转换,结果为0.5
doubled=1/2.0;
//表达式计算的结果是浮点型数据,和定义的类型一样,结果为0.5
doubled=1/2;
//表达式是整型数据的计算,然后被定义为浮点型数据,结果为0.0
类型转换不但运用在常量中,还被运用在相应的变量中。
Integerconstants整数常量
十进制:
数字0-9,包括负数。
12,111,-9561007
十六进制:
数字0-9,字面a-f或者A-F代表10-15;
以0x或者0X开头。
0x0A,0x12,0X12,0x2f,0xA3,0Xa3,0X7C7
整型数据占用4字节的空间,其数值范围介于-2147483648~2147483647之间。
如果超出这个范围,则视为无效。
Literalconstants字面常量
任何带单引号的单一字符或者十六进制的ASCII码如'
\x10'
都是字符数据。
一些特殊的字符如单引号('
)、双引号("
)、问号(?
)、反斜线(\)和控制符必须以反斜线开头(\),组合表达原来的意思,如下表所示:
换行NL(LF)\n
制表符HT\t
回车CR\r
反斜线\\\
单引号'
\'
双引号"
\"
十六进制ASCIIhh\xhh
如果上述字符不使用反斜线,结果将不被定义:
inta='
A'
;
intb='
$'
intc='
©
'
//代码0xA9
intd='
\xAE'
//货币对代码®
字符数据占用4字节的空间。
其数值范围介于0~255之间。
Booleanconstants布尔常量
Boolean用来表示是和否,还可以用数字1和0进行表示。
True和Flase可以忽略大小写。
boola=true;
boolb=false;
boolc=1;
它的十进制表示一个长度为4-byte的整数值。
Boolean常数可以表示0或1值。
Floating-pointnumberconstants(double)浮点数常量(双精度)
浮点型数据由整数部分、小数点(.)和小数部分组成,其中整数部分和小数部分为一系列十进制数字。
doublea=12.111;
doubleb=-956.1007;
doublec=0.0001;
doubled=16;
浮点型数据(双精度)占用4字节的空间。
其数值范围介于-1.7*e-308~1.7*e308之间。
Stringconstants字符串常量
字符串数据是带有双引号的一连串ASCII字符,如:
"
Characterconstant"
。
字符串数据是引号里的一组字符,如果字符串中需要插入一个双引号("
)必须在它前面使用反斜线(\)。
任何特殊字符都必须有前置的反斜线(\)才能在字符串中使用。
字符串可以容纳0到255个字符,如果超过这个长度,右边多余的字符将被忽略,编译器也会有相应的警示。
示例s:
"
Thisisacharacterstring"
Copyrightsymbol\t\xA9"
thislinecontainsalinefeedsymbol\n"
C:
\\ProgramFiles\\MetaTrader4"
A"
1234567890"
0"
$"
字符串数据占用8个字节的空间。
其中第一部分为长的整型存储字符串缓冲区分布的长度。
第二部分是32位的存储字符串缓冲区的地址。
Colorconstants颜色常数
颜色数据可以用三种方法表示:
字符数据、整型数据或者是颜色名(只能是Webcolors中已命名的).
字符数据的表达方法是用三个数字来表示三种主要颜色:
红、绿、蓝的比例。
以C开头,用单引号括住。
数字的值在0~255之间按比例选取。
整数数据的表达方法使用十六进制或十进制数字。
十六进制数字如0x00BBGGRR,其中RR是红色的比例,GG是绿色的比例,BB是蓝色的比例。
十进制数不能直接体现红绿蓝的比例,而是十六进制数字的十进制表示方式。
特殊的颜色名可以参考Webcolorsset表。
//字符数据
C'
128,128,128'
//灰色
0x00,0x00,0xFF'
//蓝色
//颜色名
Red
Yellow
Black
//整型数据
0xFFFFFF//白色
16777215//白色
0x008000//绿色
32768//绿色
颜色数据占用4字节的空间。
第一个字节一般被忽略,后三个字节包含了红绿蓝的组成信息。
Datetimeconstants日期时间常数
日期时间数据由6个部分的字符组成:
年、月、日、时、分、秒,以D开头,用单引号括起。
日期(年、月、日)或者时间(时、分、秒)甚至两者一起都可以不用填写。
日期时间数据开始于1.1.1970截止到12.31.2037
D'
2004.01.0100:
00'
//新年
1980.07.1912:
30:
27'
19.07.198012:
19.07.198012'
//等于D'
00:
01.01.2004'
01.01.200400:
12:
[编译日期]12:
[编译日期]00:
日期时间数据占用4字节空间长度的整型数值。
其值从1970年1月00:
00开始以秒的形式显示总数。
Operations&
Expressions操作表达式
一些数字和字符的组合是特别重要的,它们被称为运算符,例如:
+-*/%算术运算符
&
||逻辑运算符
=+=*=负值运算符
运算符应用在表达式中实现特定的作用。
需要特别注意标点符号如圆括号、方括号、逗号、冒号、分号。
运算符、标点符号、空格用来分割语句的不同部分。
Expressions表达式
一个表达式可以拥有多个字符和操作符,一个表达式可以写在几行里面。
a++;
b=10;
x=(y*z)/
(w+2)+127;
一个表达式的最后一个分号(;
)操作符。
Arithmeticaloperations算术运算
算术运算符包括加法和乘法运算:
求和i=j+2;
求差i=j-3;
改变运算符x=-x;
求积z=3*x;
求商i=j/5;
求模minutes=time%60;
自加1i++;
自减1k--;
添加1的运算符不能使用在表达式中。
inta=3;
//有效表达式
intb=(a++)*3;
//无效表达式
Assignmentoperation赋值操作
表达式的值包括左边值给出的赋值运算符。
把变量x的值赋予变量yy=x;
下列表达式中赋值运算符结合了算术运算符或位运算符:
在y值上加上xy+=x;
在y值上减去xy-=x;
在y值上乘以xy*=x;
在y值上除以xy/=x;
在y值上求x的模y%=x;
把y值向右做x位逻辑移位y>
>
=x;
把y值向左做x位逻辑移位y<
<
AND位运算符y&
OR位运算符y|=x;
把x和y按做逻辑异或的操作y^=x;
表达式中可以只能有一个赋值运算符。
位运算符只能用于整型数据。
逻辑移位运算符中x值只能是小于5位的二进制数,过大的数值将会被拒绝。
所以移动范围只能是0到31。
用%=运算符(用x的模板求y值),其结果等于余数。
Operationsofrelation操作关系
逻辑值FALSE代表整数零值,逻辑值TRUE代表不同于零的任何值。
用返回0(False)或1(True)来表示两个量之间的关系。
等于ba=b;
不等于ba!
=b;
小于ba<
b;
大于ba>
b;
小于等于ba<
=b;
大于等于ba>
2个不规范的浮点型数据不能用=或!
=运算符比较,但是我们可以把2者相减,正常化后和null进行比较。
Booleanoperations布尔运算
否定运算符(!
),用来表示真假的反面的结果。
如果运算值是FALSE(0)结果为TRUE
(1);
如果运算不同于FALSE(0)等于FALSE(0)。
if(!
a)Print("
不是'
a'
);
x和y值的逻辑运算符或OR(||)用来表示两个表达式只要有一个成立即可。
如果x和y值为真的,表达式值为TRUE
(1)。
否则,值为FALSE(0)。
逻辑表达式被完全计算。
if(x<
0||x>
=max_bars)Print("
超出范围"
x和y值的逻辑运算符AND(&
)。
如果x和值都是真实的,表达式值为TRUE
(1)。
Otherwise,itisFALSE(0).
if(p!
=x&
p>
y)Print("
TRUE"
Bitwiseoperations位运算
运算符对操作数执行按位求补操作。
表达式的数字值中包含1,其中n包含0和数字值中包含0,其中n包含1。
b=~n;
运算符x向右移动到数字y代表二进制代码。
向右移动是逻辑运算,即左侧将被零填满。
x=x>
y;
左侧将被零填满
x=x<
二进制的x和y代表位逻辑运算符AND。
在所有数组中x和y的值都不含有零表达式的值包含1(TRUE);
在所有其他数字中包含0(FALSE)。
b=((x&
y)!
=0);
二进制的x和y代表位逻辑运算符OR。
在所有数字中x和y的值都不等于零表达值包含1并且在所有其他数字中包含0。
b=x|y;
二进制的x和y代表位逻辑运算符EXCLUSIVE。
在所有数字中x和y的值都不同于二进制值表达值包含1并且在所有其他数字中包含0。
b=x^y;
位逻辑运算符只作用于Integers类型。
Otheroperations其他运算
指数
在数组第一元素的位置,表达式值为i的系列数变量值。
array[i]=3;
//数组的3的计算值到第i个元素。
只有整数能够成为数组指数。
四维以下的数组是禁止的。
每组的检测是从0到测量大小-1。
特定情况下,对于维数组由50个元素组成,参照的第一个数组将为[0],这样最后一个数组将是[49]。
获取超出数组,将会发生常规错误ERR_ARRAY_INDEX_OUT_OF_RANGE,可以调用GetLastError()函数。
调用x1,x2,...,xn自变数函数
每一个自变数可以显示一个常数,一个变量和相应类型表达式。
自变数的通过必须根据通道命令。
用此函数返回表达式值。
如果返回的表达式值为空,一些函数不能进行中转。
请确认表达式x1,x2,...,xn是按照命令执行的。
doubleSL=Bid-25*Point;
intticket=OrderSend(Symbol(),OP_BUY,1,Ask,3,SL,Ask+25*Point,"
Mycomment"
123,0,Red);
标点操作符
从左到右的表达式用标点分开。
所有表达式的计算是从左至右的。
结果类型和值相互吻合,说明表达式是正确的。
参量列表可以作为范例被通过。
for(i=0,j=99;
i<
100;
i++,j--)Print(数组[i][j]);
Precedencerules优先规则
下面是从上到下的运算优先规则,优先级高的将先被运算。
()函数调用从左到右
[]数组元素参考
!
真假运算符从右到左
-改变运算符
++增量
--减量
~位逻辑运算符
位逻辑运算符AND从左到右
|位逻辑运算符OR
^位逻辑运算符OR
左移
右移
*乘法从左到右
/除法
%百分比
+加法从左到右
-减法
小于从左到右
=小于等于
大于
=大于等于
==等于
=不等于
||逻辑OR从左到右
逻辑AND从左到右
=值从右到左
+=加法值
-=减法值
*=乘法值
/=除法值
%=百分比值
=右移值
=左移值
=位逻辑运算符AND值
|=位逻辑运算符OR值
^=位逻辑运算符OR值
逗号从左到右
插入语会显示所优先执行的运算
注意:
在MQL4程序中执行优先运算不同于在C语言范围内的运算。
Operators操作符
语言操作符必须对执行完成任务的一些运算法操作进行描述。
程序本身是这样的序列语句。
语句逐个随后以分号分离。
一个语句能占领一条或几条线。
二个或更多语句可能位于同样线。
单独执行命令的语句(if,if-else,switch,whileandfor)可以相互插入
if(Month()==12)
if(Day()==31)Print("
新年快乐!
Compoundoperator复合操作符
一个复合操作符有一个(一个区段)和由一个或多个任何类型的操作符组成的的附件{}.每个表达式使用分号作为结束(;
if(x==0)
{
Print("
无效位置x="
x);
return;
}
Expressionoperator表达式操作符
任何以分号(;
)结束的表达式都被视为是一个操作符。
这里是一些表达式操作符得范例:
称号运算符:
Identifier=expression;
x=3;
y=x=3;
//错误
称号运算符在表达式操作符中只限一次使用。
函数调用运算符:
Function_name(argument1,...,argumentN);
FileClose(file);
空运算符:
它是由分号(;
)组成并且使用在一个检测运算符中。
Breakoperator终止操作符
一个嵌入操作符终止最近外部操作符switch,while或for的执行。
在终止操作符之后给出检测操作符。
这个操作符的目的之一:
当中心值指定为变量时,操作符完成循环执行。
//搜索第一个零元素
for(i=0;
i<
array_size;
i++)
if((array[i]==0)
break;
Continueoperator继续操作符
一个继续操作符。
我们将其放在嵌套内的指定位置,用来在指定情况下跳过接下来的运算,直接跳入下一次的循环while或for操作符。
操作符嵌入位置与此操作符相反。
//总结数组非零元素
intfunc(intarray[])
intarray_size=ArraySize(array);
intsum=0;
for(inti=0;
i++)
if(a[i]==0)continue;
sum+=a[i];
return(sum);
Returnoperator返回操作符
一个return将需要返回的结果放在return后面的()中。
intCalcSum(intx,inty)
return(x+y);
在函数中省缺值类型被返回,此return操作符必须使用:
voidSomeFunction()
Hello!
//这个操作符被删除
函数正确的震动表示return操作符执行。
Conditionaloperatorif-else条件操作符
如果表达式为true,操作符执行并按照操作符1给出的检测。
如果表达式为false,操作符2执行。
if(expression)
operator1
operator2
if操作符else部分可能被忽略。
if操作符忽略else部分,显示分歧可能会嵌入。
这种情况下,else位置在先前if操作符的最近部位,这样不会出现else部分。