第1页共159页MT4编程语言全接触语法[Syntax]代码格式空格建、Tab键、换行键和换页符都可以成为代码排版的分隔符,你能使用各种符号来增加代码的可读性。注释多行注释使用/*作为开始到*/结束,在这之间不能够嵌套。单行注释使用//作为开始到新的一行结束,可以被嵌套到多行注释之中。示例://单行注释/*多行注释//嵌套的单行注释注释结束*/标识符标识符用来给变量、函数和数据类型进行命名,长度不能超过31个字节你可以使用数字0-9、拉丁字母大写A-Z和小写a-z(大小写有区分的)还有下划线(_)。此外首字母不可以是数字,标识符不能和保留字冲突.示例://NAME1namelTotal_5Paper保留字下面列出的是固定的保留字。不能使用以下任何保留字进行命名。数据类型存储类型操作符其它boolexternbreakfalsecolorstaticcasetruedatetimecontinuedoubledefaultintelsestringforvoidifreturnswitchwhile数据类型[Datatypes]数据类型概述主要数据类型有:Integer(int)Boolean(bool)ëèòåðàëû(char)String(string)Floating-pointnumber(double)Color(color)Datetime(datetime)第2页共159页我们用Integer类型数据来作为DateTime和Color数据的存储。使用以下方式可以进行类型站换:int(bool,color,datetime);double;string;Integer类型十进制:数字0-9;0不能作为第一个字母示例:12,111,-9561007十六进制:数字0-9;拉丁字母a-f或A-F用来表示10-15;使用0x或者0X作为开始。示例:0x0A,0x12,0X12,0x2f,0xA3,0Xa3,0X7C7Integer变量的取值范围为-2147483648到2147483647。Literal类型任意在单引号中的字符或十六进制的任意ASCII码例如'\x10'都是被看作为一个字符,一些字符例如单引号('),双引号(),问号(?),反斜杠(\)和一些控制符都需要在之前加一个反斜杠(\)进行转意后表示出来:linefeedNL(LF)\nhorizontaltabHT\tcarriagereturnCR\rreverseslash\\\singlequote'\'doublequote\hexadecimalASCII-codehh\xhh以上字符如果不经过反斜杠进行转意将不能被使用示例:inta='A';intb='$';intc='©';//code0xA9intd='\xAE';//symbolcode®Boolean类型Boolean用来表示是和否,还可以用数字1和0进行表示。True和Flase可以忽略大小写。示例:boola=true;boolb=false;boolc=1;Floating-pointnumber类型浮点型变量在整数型后面加一个点(.)用来更精确的表示十进制数字。示例:doublea=12.111;doubleb=-956.1007;doublec=0.0001;doubled=16;浮点型的取值范围从2.2e-308到1.8e308.第3页共159页String类型字符串型是用来表示连续的ASCII码字符的使用连续的两个双引号来包括需要表示的内容如:Characterconstant.示例:ThisisacharacterstringCopyrightsymbol\t\xA9thislinewithLFsymbol\nA12345678900$Color类型颜色类型可以使用以下示例里的几种方式进行定义。示例://symbolconstantsC'128,128,128'//grayC'0x00,0x00,0xFF'//blue//namedcolorRedYellowBlack//integer-valuedrepresentation0xFFFFFF//white16777215//white0x008000//green32768//greenDatetime类型时间类型使用年、月、日、时、分、秒来进行定义,你可以使用以下示例中的方式来定义变量。示例:D'2004.01.0100:00'//NewYearD'1980.07.1912:30:27'D'19.07.198012:30:27'D'19.07.198012'//equaltoD'1980.07.1912:00:00'D'01.01.2004'//equaltoD'01.01.200400:00:00'D'12:30:27'//equaltoD'[compilationdate]12:30:27'D''//equaltoD'[compilationdate]00:00:00'运算符和表达式[Operations&Expressions]表达式一个表达式可以拥有多个字符和操作符,一个表达式可以写在几行里面。示例:a++;b=10;x=(y*z)/w;注:分号(;)是表达式的结束符。算术运算符第4页共159页Sumofvaluesi=j+2;Differenceofvaluesi=j-3;Changingtheoperationsignx=-x;Productofvaluesz=3*x;Divisionquotienti=j/5;Divisionremainderminutes=time%60;Adding1tothevariablevaluei++;Subtracting1fromthevariablevaluek--;加减1的运算符不能被嵌套在表达式中inta=3;a++;//可行的表达式intb=(a++)*3;//不可行的表达式赋值运算符注:将右侧的结果赋值给左侧的变量将x的值赋值给yy=x;将x的值加到y上面y+=x;在y上面减去x的值y-=x;得到y的x倍的值y*=x;得到y除以x的值y/=x;取y除以x后的余数y%=x;y向右位移x位y=x;y向左位移x位y=x;得到逻辑AND的值y&=x;得到逻辑OR的值y|=x;得到逻辑非OR的值y^=x;第5页共159页注:一个表达式只能有一个赋值运算符.关系运算符用返回0(False)或1(True)来表示两个量之间的关系。a是否等于ba==b;a是否不等于ba!=b;a是否小于bab;a是否大于bab;a是否小于等于ba=b;a是否大于等于ba=b;真假运算符否定运算符(!),用来表示真假的反面的结果。//如果a不是真的if(!a)Print(not'a');逻辑运算符或(||)用来表示两个表达式只要有一个成立即可。示例:if(xl)Print(outofrange);逻辑运算符和(&&)用来表示两个表达式要同时成立才行。示例:if(p!=x&&py)Print(true);n++;位逻辑运算符~运算符对操作数执行按位求补操作。第6页共159页b=~n;运算符对操作数执行向右位移操作。x=xy;运算符对操作数执行向左位移操作。x=xy;一元&运算符返回操作数的地址为整型和bool类型预定义了二进制&运算符。对于整型,&计算操作数的按位“与”。对于bool操作数,&计算操作数的逻辑“与”;也就是说,当且仅当两个操作数均为true时,其结果才为true。b=((x&y)!=0);二进制|运算符是为整型和bool类型预定义的。对于整型,|对操作数进行按位“或”运算。对于bool操作数,|对操作数进行逻辑“或”计算,也就是说,当且仅当两个操作数均为false时,其结果才为false。b=x|y;为整型和bool类型预定义了^二进制操作数。对于整型,^计算操作数的按位“异或”。对于bool操作数,^计算操作数的逻辑“异或”;也就是说,当且仅当只有一个操作数为true时,其结果才为true。b=x^y;注:位逻辑运算符只作用于Integers类型其它运算符索引。定位在数组中i位置的值。array=3;//将3负值到array数组第i位置上使用x1,x2,...,xn这样的方法将各种值传送到function中进行运算。示例:doubleSL=Ask-25*Point;doubleTP=Ask+25*Point;intticket=OrderSend(Symbol(),OP_BUY,1,Ask,3,SL,TP,Mycomment,123,0,Red);第7页共159页优先级规则下面是从上到下的运算优先规则,优先级高的将先被运算。()FunctioncallFromlefttoright[]Arrayelementselection!NegationFromlefttoright~Bitwisenegation-Signchangingoperation*MultiplicationFromlefttoright/Division%Moduledivision+AdditionFromlefttoright-SubtractionLeftshiftFromlefttorightRightshiftLessthanFromlefttoright=LessthanorequalsGreaterthan=Greaterthanorequals==EqualsFromlefttoright!=Notequal&BitwiseANDoperationFromlefttoright^BitwiseexclusiveORFromlefttoright|BitwiseORoperationFromlefttoright&&LogicalANDFromlefttoright||LogicalORFromlefttoright第8页共159页=AssignmentFromrighttoleft+=Assignmentaddition-=Assignmentsubtraction*=Assignmentmultiplication/=Assignmentdivision%=Assignmentmodule=Assignmentrightshift=Assignmentleftshift&=AssignmentbitwiseAND|=AssignmentbitwiseOR^=AssignmentexclusiveOR,CommaFromlefttoright操作符[Operators]格式和嵌套格式.一个操作符可以占用一行或者多行,两个或多个操作符可以占用更多的行。嵌套.执行控制符(if,if-else,switch,whileandfor)可以进行任意嵌套.复合操作符一个复合操作符有一个(一个区段)和由一个或多个任何类型的操作符组成的的附件{}.每个表达式使用分号作为结束(;)示例:if(x==0){x=1;y=2;z=3;}表达式操作符第9页共159页任何以分号(;)结束的表达式都被视为是一个操作符。Assignmentoperator.Identifier=expression;标识符=表达式;示例:x=3;y=x=3;//这是错误的一个操作符中只能有一个表达式。调用函数操作符Function_name(argument1,...,argumentN);函数名称(参数1,...,参数N);示例:fclose(file);空操作符只有一个分号组成(;).我们用它来表示没有任何表达式的空操作符.停止操作符一个break;,我们将其放在嵌套内的指定位置,用来在指定情况下跳出循环操作.示例://从0开始搜索数组for(i=0;iARRAY_SIZE;I++)if((array==0)break;继续操作符一个continue;我们将其放在嵌套内的指定位置,用来在指定情况下跳过接下来的运算,直接跳入下一次的循环。示例:第10