1、单行注释使用 / 作为开始到新的一行结束,可以被嵌套到多行注释之中。示例:/ 单独注解/* multi- line / 嵌入单独注解 comment*/Identifiers标识符标识符用来给变量、函数和数据类型进行命名,长度不能超过31个字节,你可以使用数字0-9、拉丁字母大写A-Z和小写a-z(大小写有区分的)还有下划线(_)。此外首字母不可以是数字,标识符不能和保留字冲突. NAME1 namel Total_5 PaperReserved words保留字下面列出的是固定的保留字。不能使用以下任何保留字进行命名。数据类型储存类型操作符其他bool布尔数据externbreakfalse
2、color颜色数据staticcasetruedatetime日期时间数据continuedouble浮点型数据defaultint整型数据 elsestring字符串数据forvoidif字符数据 (char) returnswitchwhileData types数据类型所有的程序都依靠数据来运作,数据因目的不同可以有不同的类型 。比如,访问数组可以用整型数据,价格可以用双精度的浮点型数据。在 MQL 4 中没有专门用来标记货币值的数据类型。不同的数据类型有不同的处理速度,整型数据是最快的。 双精度的数据处理需要额外的处理器,所以处理浮点型数据比较复杂, 比处理整型数据慢一些。字符串是处理
3、速度最慢的,因为它要存取动态内存。主要的数据类型如下:整型数据 (int) 布尔数据 (bool) 字符数据 (char) 字符串数据 (string) 浮点型数据 (double) 颜色数据 (color) 日期时间数据 (datetime) color 和 datetime 可以使我们更清楚的区分图表中的内容,在 expert advisor 和 indicator 中经常使用这些数据类型。颜色和日期时间数据用整数来表示。int 和 double 都属于数值(数字)型。在表达式运算中使用强制的类型转换。Type casting类型转换表达式中使用强制的数据转换,转换时类型的优先级如下:in
4、t (bool,color,datetime);double;string;在运算完成之前(除了数据已被定义的),数据会根据优先级被转换。当定义数据的操作完成前 ,数据会转换成被定义的数据类型。int i = 1 / 2; / 没有类型转换,结果为 0int i = 1 / 2.0; / 表达式中有浮点型数据,但会转换成整型数据,结果为 0double d = 1.0 / 2.0; / 没有类型转换,结果为 0.5double d = 1 / 2.0; / 表达式计算的结果是浮点型数据,和定义的类型一样,结果为 0.5double d = 1 / 2; / 表达式是整型数据的计算,然后被定义为
5、浮点型数据,结果为 0.0类型转换不但运用在常量中,还被运用在相应的变量中。Integer constants整数常量十进制: 数字 0 - 9 ,包括负数。12, 111, -956 1007十六进制: 数字 0 - 9 , 字面 a - f 或者 A - F 代表 10 - 15; 以 0x 或者 0X 开头。0x0A, 0x12, 0X12, 0x2f, 0xA3, 0Xa3, 0X7C7整型数据占用 4 字节的空间,其数值范围介于 -2147483648 2147483647 之间。如果超出这个范围,则视为无效。Literal constants字面常量任何带单引号的单一字符或者十六进
6、制的 ASCII 码如 x10 都是字符数据。一些特殊的字符如单引号()、双引号()、问号(?)、反斜线()和控制符必须以反斜线开头(), 组合表达原来的意思,如下表所示:换行 NL (LF) n制表符 HT t回车 CR r反斜线 单引号 双引号 十六进制ASCII hh xhh如果上述字符不使用反斜线,结果将不被定义:int a = A;int b = $int c = / 代码0xA9int d = xAE /货币对代码 字符数据占用 4 字节的空间。其数值范围介于 0 255 之间。Boolean constants布尔常量Boolean 用来表示 是 和 否, 还可以用数字 1 和
7、0 进行表示。True和Flase可以忽略大小写。bool a = true;bool b = false;bool c = 1;它的十进制表示一个长度为4-byte的整数值。Boolean 常数可以表示0 或 1值。Floating-point number constants (double)浮点数常量(双精度)浮点型数据由整数部分、小数点(.)和小数部分组成,其中整数部分和小数部分为一系列十进制数字。double a = 12.111;double b = -956.1007;double c = 0.0001;double d = 16;浮点型数据 (双精度)占用 4 字节的空间。其数
8、值范围介于 -1.7 * e-308 1.7 * e308 之间。String constants字符串常量字符串数据是带有双引号的一连串 ASCII 字符 ,如: Character constant。字符串数据是引号里的一组字符,如果字符串中需要插入一个双引号() 必须在它前面使用反斜线()。任何特殊字符都必须有前置的反斜线()才能在字符串中使用。 字符串可以容纳 0 到 255 个字符,如果超过这个长度,右边多余的字符将被忽略,编译器也会有相应的警示。示例s:This is a character stringCopyright symbol txA9this line contains
9、 a line feed symbol nC:Program FilesMetaTrader 4A12345678900$字符串数据占用 8 个字节的空间。其中第一部分为长的整型存储字符串缓冲区分布的长度。第二部分是32位的存储字符串缓冲区的地址。Color constants颜色常数颜色数据可以用三种方法表示: 字符数据、整型数据或者是颜色名(只能是 Web colors 中已命名的).字符数据的表达方法是用三个数字来表示三种主要颜色:红、绿、蓝的比例。 以 C 开头,用单引号括住。数字的值在 0 255 之间按比例选取。整数数据的表达方法使用十六进制或十进制数字。十六进制数字如 0x00B
10、BGGRR, 其中 RR 是红色的比例,GG 是绿色的比例,BB 是蓝色的比例。十进制数不能直接体现红绿蓝的比例 ,而是十六进制数字的十进制表示方式。特殊的颜色名可以参考Web colors set表。/ 字符数据C128,128,128 / 灰色0x00,0x00,0xFF / 蓝色/ 颜色名RedYellowBlack/ 整型数据0xFFFFFF / 白色16777215 / 白色0x008000 / 绿色32768 / 绿色颜色数据占用 4 字节的空间。第一个字节一般被忽略,后三个字节包含了红绿蓝的组成信息。Datetime constants日期时间常数日期时间数据由 6 个部分的字符
11、组成:年、月、日、时、分、秒,以 D 开头, 用单引号括起。日期(年、月、日)或者时间(时、分、秒)甚至两者一起都可以不用填写。 日期时间数据开始于 1. 1. 1970 截止到12.31. 2037 D2004.01.01 00:00 / 新年1980.07.19 12:30:2719.07.1980 12:19.07.1980 12 /等于 D00:01.01.200401.01.2004 00:12:编译日期 12:编译日期 00:日期时间数据占用 4 字节空间长度的整型数值。其值从1970年1月00:00开始以秒的形式显示总数。Operations & Expressions操作表达式
12、一些数字和字符的组合是特别重要的,它们被称为运算符,例如:+ - * / % 算术运算符& | 逻辑运算符= += *= 负值运算符运算符应用在表达式中实现特定的作用。需要特别注意标点符号如圆括号、方括号、逗号、冒号、分号。运算符、标点符号、空格用来分割语句的不同部分。Expressions表达式一个表达式可以拥有多个字符和操作符,一个表达式可以写在几行里面。a+; b = 10;x = (y * z) / (w + 2) + 127;一个表达式的最后一个分号(;) 操作符。Arithmetical operations算术运算算术运算符包括加法和乘法运算:求和 i = j + 2;求差 i
13、= j - 3;改变运算符 x = - x;求积 z = 3 * x;求商 i = j / 5;求模 minutes = time % 60;自加1 i+;自减1 k-;添加1的运算符不能使用在表达式中。int a=3; / 有效表达式int b=(a+)*3; / 无效表达式Assignment operation赋值操作表达式的值包括左边值给出的赋值运算符。把变量 x 的值赋予变量 y y = x;下列表达式中赋值运算符结合了算术运算符或位运算符:在 y 值上加上 x y += x;在 y 值上减去 x y -= x;在 y 值上乘以 x y *= x;在 y 值上除以 x y /= x;
14、在 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值),其结果等于余数。Operations of relation操作关系逻辑值FALSE代表整数零值,逻辑值TRUE 代表不同于零的任何值。用返回0(False
15、)或1(True)来表示两个量之间的关系。等于b a = b;不等于b a != b;小于b ab;小于等于 b a 2个不规范的浮点型数据不能用 = 或 != 运算符比较,但是我们可以把2者相减, 正常化后和 null进行比较。Boolean operations布尔运算否定运算符(!),用来表示真假的反面的结果。如果运算值是FALSE (0) 结果为TRUE (1);如果运算不同于FALSE (0)等于FALSE (0) 。if(!a) Print(不是 a);x和y值的逻辑运算符或OR (|)用来表示两个表达式只要有一个成立即可。如果x和y值为真的,表达式值为TRUE (1)。否则,值为
16、FALSE (0)。逻辑表达式被完全计算。if(x=max_bars) Print(超出范围x和y值的逻辑运算符AND (&)。如果x和值都是真实的,表达式值为TRUE (1)。 Otherwise, it is FALSE (0). if(p!=x & py) Print(TRUEBitwise operations位运算运算符对操作数执行按位求补操作。表达式的数字值中包含1,其中n 包含 0和数字值中包含0 ,其中 n 包含 1。b = n;运算符x 向右移动到数字y 代表二进制代码。向右移动是逻辑运算,即左侧将被零填满。x = x y;左侧将被零填满x = x 二进制的x 和y代表位逻辑
17、运算符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类型。Other operations其他运算指数在数组第一元素的位置,表达式值为i的系列数变量值。arrayi = 3; /
18、数组的3的计算值到第i个元素。只有整数能够成为数组指数。四维以下的数组是禁止的。每组的检测是从0 到 测量大小-1。 特定情况下,对于维数组由50 个元素组成,参照的第一个数组将为0,这样最后一个数组将是49。获取超出数组,将会发生常规错误 ERR_ARRAY_INDEX_OUT_OF_RANGE, 可以调用 GetLastError() 函数。调用x1,x2,.,xn 自变数函数每一个自变数可以显示一个常数,一个变量和相应类型表达式。自变数的通过必须根据通道命令。用此函数返回表达式值。如果返回的表达式值为空,一些函数不能进行中转。请确认表达式x1,x2,.,xn 是按照命令执行的。doubl
19、e SL=Bid-25*Point;int ticket=OrderSend(Symbol(),OP_BUY,1,Ask,3,SL,Ask+25*Point,My comment,123,0,Red);标点操作符从左到右的表达式用标点分开。所有表达式的计算是从左至右的。结果类型和值相互吻合,说明表达式是正确的。参量列表可以作为范例被通过。for(i=0,j=99; i100; i+,j-) Print(数组ij);Precedence rules优先规则下面是从上到下的运算优先规则,优先级高的将先被运算。() 函数调用 从左到右 数组元素参考! 真假运算符 从右到左- 改变运算符+ 增量- 减
20、量 位逻辑运算符 位逻辑运算符 AND 从左到右| 位逻辑运算符 OR 位逻辑运算符 OR 左移 右移* 乘法 从左到右/ 除法% 百分比+ 加法 从左到右- 减法 小于 从左到右= 小于等于 大于= 大于等于= 等于= 不等于| 逻辑 OR 从左到右 逻辑 AND 从左到右= 值 从右到左+= 加法值-= 减法值*= 乘法值/= 除法值%= 百分比值= 右移值= 左移值= 位逻辑运算符 AND值|= 位逻辑运算符OR值= 位逻辑运算符 OR值, 逗号 从左到右插入语会显示所优先执行的运算注意:在MQL4程序中执行优先运算不同于在C 语言范围内的运算。Operators操作符语言操作符必须对执
21、行完成任务的一些运算法操作进行描述。程序本身是这样的序列语句 。语句逐个随后以分号分离。一个语句能占领一条或几条线。二个或更多语句可能位于同样线。单独执行命令的语句(if, if-else, switch, while and for) 可以相互插入if(Month() = 12) if(Day() = 31) Print(新年快乐!Compound operator复合操作符一个复合操作符有一个(一个区段)和由一个或多个任何类型的操作符组成的的附件. 每个表达式使用分号作为结束(;if(x=0) Print(无效位置 x=,x); return; Expression operator表达式
22、操作符任何以分号(;)结束的表达式都被视为是一个操作符。这里是一些表达式操作符得范例:称号运算符:Identifier=expression;x=3;y=x=3; / 错误称号运算符在表达式操作符中只限一次使用。函数调用运算符:Function_name(argument1,., argumentN); FileClose(file);空运算符:它是由分号(;)组成并且使用在一个检测运算符中。Break operator终止操作符一个嵌入操作符终止最近外部操作符 switch, while或 for 的执行。在终止操作符之后给出检测操作符。这个操作符的目的之一:当中心值指定为变量时,操作符完成
23、循环执行。/ 搜索第一个零元素for(i=0;iarray_size;i+) if(arrayi=0)break;Continue operator继续操作符一个 继续操作符。 我们将其放在嵌套内的指定位置,用来在指定情况下跳过接下来的运算,直接跳入下一次的循环 while 或for操作符。操作符 嵌入 位置与此操作符相反。/ 总结数组非零元素int func(int array) int array_size=ArraySize(array); int sum=0; for(int i=0; i+) if(ai=0) continue; sum+=ai; return(sum);Return
24、 operator返回操作符一个return将需要返回的结果放在return后面的()中。int CalcSum(int x, int y) return(x+y);在函数中省缺值类型被返回,此 return操作符必须使用:void SomeFunction()Hello! / 这个操作符被删除函数正确的震动表示return操作符执行。Conditional operator if-else条件操作符如果表达式为true,操作符执行并按照操作符1 给出的检测。如果表达式为false,操作符2 执行。if (expression) operator1 operator2if操作符 else部分可能被忽略。 if操作符忽略 else部分,显示分歧可能会嵌入。这种情况下, else 位置在先前if操作符的最近部位,这样不会出现else部分。
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1