MQL4基础:运算符和表达式

阅读 :
欢迎访问 外 汇 邦 WWW.WaiHuiBang.com

  • 表达式
  • 算术运算符
  • 赋值运算符
  • 关系运算符
  • 布尔运算符
  • 位运算符
  • 其他运算符
  • 优先级规则

某些数字和字符的组合是特别重要的,它们被称为运算符,例如:

算术运算符:+ – * / %

逻辑运算符:&& ||

赋值运算符:= += *=

运算符常用在表达式中,只有结合操作数时才有意义。

需要特别注意标点符号,如圆括号、方括号、逗号、冒号、分号。

运算符、标点符号、空格用来分割语句的不同部分。

表达式

一个表达式由一个或多个操作数和运算符组成,一个表达式可以分成若干行来书写。

示例:

a++; b = 10;x = (y * z) /    (w + 2) + 127;

一个表达式的最后必须由一个分号(;) 来表示结束。

算术运算符

算术运算符包括加减法、乘除法运算等:

求和                   i = j + 2;求差                   i = j - 3;改变符号               x = - x;求积                   z = 3 * x;求商                   i = j / 5;求模                   minutes = time % 60;自增                   i++;自减                   k--;

自增/自减运算符不能使用在表达式中。

示例:

int a=3;a++;              // 有效表达式int b=(a++)*3;    // 无效表达式

赋值运算符

表达式的值赋给左边的变量。

y = 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;        //把 y 值向左做 x 位逻辑移位                y &= x;         //AND 位运算符                            y |= x;         //OR 位运算符                             y ^= x;         //把 x 和 y 按做逻辑异或的操作

表达式中只能有一个赋值运算符。 位运算符只能用于整型数据。逻辑移位运算符中 x 值只能是小于 5 位的二进制数,过大的数值将会被拒绝。所以移动范围只能是 0 到 31 。 用 %= 运算符求模 ( 求y/x的模),其结果赋予y。

关系运算符

整数0代表逻辑假值FALSE,任何非零的值代表逻辑真值TRUE。

用关系运算符或逻辑运算符组成的表达式值是0 (False)或1 (True)

a = b;     //a等于b          a != b;    //a不等于b                      a< b;      //a小于b                        a >b;      //a大于b                        a <=b;     //a小于等于b                    a >= b;    //a大于等于b

2个浮点型数据不能用 = 或 != 运算符比较,但是我们可以把2者相减, 并将所得结果和null进行比较。

布尔运算符

逻辑非运算符(!)的操作数必须是算术类型。如果运算值是FALSE (0),其非运算的结果为TRUE (1);如果运算值不同于FALSE (0),其非运算的结果等于FALSE (0)。

if(!a) Print("不是 'a'");

x和y值的逻辑或运算符 (||)用来表示两个表达式只要有一个成立即可。如果x和y值只要有1个值为真的,表达式值为TRUE (1)。否则,值为FALSE (0)。

if(x<0 || x>=max_bars) Print("超出范围");

x和y值的逻辑与运算符 (&&)。如果x和y的值都是真实的,表达式值为TRUE (1)。否则,值为FALSE (0).

if(p!=x && p>y) Print("TRUE");

位运算符

取反运算符(~)对变量值二进制代码按位取反。表达式值中所有1变为0,0变为1 。

b = ~n;

将二进制代码表示的X逻辑右移Y位。右移是逻辑运算,即左侧用零填满。

x = x >> y;

将二进制代码表示的X逻辑左移Y位,右侧(低位)用零填满。

x = x << y;

二进制表示的x和Y位运算与(&)。如果x和y两个相应的二进制位都为1,则该位的结果为1,否则为0。

b = ((x & y) != 0);

二进制表示的x和Y位运算或(|)。如果x和y两个相应的二进制位都为0,则该位的结果为0,否则为1。

b = x | y;

二进制表示的x和Y位运算异或(~)。如果x和y两个相应的二进制位相异,则该位的结果为1,否则为0。

b = x ^ y;

位运算符只适合整型数据类型。

其他运算符

下标

数组的第i个元素的序号,i可以为整数或整型表达式。

示例:

array[i] = 3; //将3赋予数组的第i个元素。

只有整数才能成为数组的下标。只允许使用四维或四维以下的数组。每维索引是从0到(数组总长度-1)。举一个例子,一个有50个元素组成的一维数组,引用第一个数组元素用array [0],这样,最后一个数组元素将足array[49]。

如果访问数组超出了数组下标范围,系统将会出错 ERR_ARRAY_INDEX_OUT_OF_RANGE (下标超过范围),通过调用GetLastError()函数,获取这些错误信息。

调用xl,x2,…,xn形式参数的函数

每个形参可以是一个常量、一个变量和相应类型的表达式。传递的参数用逗号隔开,并放在圆括号()内,函数名放在圆括号()前。

用此函数返回表达式值。如果函数返回值定义为void型,这些函数调用就不能放在赋值号右边。请确认表达式xl,x2,…,xn是按序执行的。

示例:

double 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; i<100; i++,j--) Print(数组[i][j]);

优先级规则

下表中同组运算符优先级相同。排在前面的运算符优先级高,排在后而的运算符优先级低。运算符按优先级顺序从高到低排列如下:

()     函数调用                     从左到右[]     引用数组元素
!      真假运算符                   从右到左-      改变符号++     自增--     自减~      "按位取反"运算符
&      "按位与"位运算符             从左到右|      "按位或"位运算符^      "按位异或"位运算符<<     逻辑左移>>     逻辑右移
*      乘法                        从左到右/      除法%      求模
+      加法                        从左到右-      减法
<      小于                        从左到右<=     小于等于>      大于>=     大于等于==     等于!=     不等于
||     逻辑 或                      从左到右
&&     逻辑 与                      从左到右
=      赋值                            从右到左+=     加法复合赋值运算符-=     减法复合赋值运算符*=     乘法复合赋值运算符/=     除法复合赋值运算符 %=     求模复合赋值运算符 >>=    右移复合赋值运算符<<=    左移复合赋值运算符&=     按位与复合赋值运算符|=     按位或复合赋值运算符^=     按位异或复合赋值运算符
,     逗号                         从左到右

高优先级的圆括号可以改变运算符的执行顺序。

注意:在MQL4程序中,运算符的优先级不同于C 语言。

欢迎访问 外 汇 邦 WWW.WaiHuiBang.com
本文标题:MQL4基础:运算符和表达式 - MT4平台MQL4编程学习
本文地址:http://www.ea666.cn/fxschool/autotrading/mql4/49067.html

相关文章

  • 外汇EA:简单的订单管理(一)

    1. 介绍 每个智能交易程序里都有一段代码是控制建仓的。它在所有的定单中不断搜索,通过信息选择仓位,然后进行修改和关闭。这段代码看上去都差不多,并且往往具有相同的功能。这就是为什么这段经常被重复的代码可以从...

    MQL4编程学习
  • 租服务器 / VPS挂MT4 EA最全面的教程
    租服务器 / VPS挂MT4 EA最全面的教程

    如何让外汇EA 24小时运行? 答案就是:租用独享的服务器或者虚拟专用服务器(VPS)挂外汇EA,从而保证你的EA 24小时不间断稳定运行。...

    MQL4编程学习
  • MQL4交易处理函数(二)

    从自定义指标中不能调用OrderSend()、OrderClose()、OrderCloseBy()、OrderDelete()和OrderModify()交易函数。本组交易函数应用于智能交易和脚本中。只有智能交易设置中的“允许实时交易”属性被选中,才能...

    MQL4编程学习
  • 外汇EA编程教程——预处理程序

      预处理程序是MQL编译器的一个子系统,通过预处理程序可以使软件的可读性更好,预处理程序运行在程序编译之前。预处理指令以(#)开头。 1 定义常量使用#define来定义常量。如: 1. #define ABC 100 2. #define P...

    MQL4编程学习
  • 手把手教你搭建一套免费的跨多个外汇平台商的MT4本地正反向跟单系统
    手把手教你搭建一套免费的跨多个外汇平台商的MT4本地正反向跟单系统

    在我们日常的外汇交易中,常常有一些交易上的需求,必须依赖第三方软件来辅助解决。MT4只是解决了基本的挂单、下单问题,像跨越多个平台商进行信号同步下单这样的需求,光靠手工是解决不了的,需要用跨平台的跟单软件,...

    MQL4编程学习
你可能感兴趣