2赞

357评论

14收藏

MQL4 Reference MQL4命令手册(完整版)

 

评论|共 357 个

EA狙击手

发表于 2013-7-19 23:22:53 | 显示全部楼层

Other operations其他运算
指数
在数组第一元素的位置,表达式值为i的系列数变量值。
示例:
array[i] = 3; //数组的3的计算值到第i个元素。
只有整数能够成为数组指数。四维以下的数组是禁止的。每组的检测是从0 到 测量大小-1。 特定情况下,对于维数组由50 个元素组成,参照的第一个数组将为[0],这样最后一个数组将是[49]。
获取超出数组,将会发生常规错误 ERR_ARRAY_INDEX_OUT_OF_RANGE, 可以调用 GetLastError() 函数。
调用x1,x2,...,xn 自变数函数
每一个自变数可以显示一个常数,一个变量和相应类型表达式。自变数的通过必须根据通道命令。
用此函数返回表达式值。如果返回的表达式值为空,一些函数不能进行中转。请确认表达式x1,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]);

EA狙击手

发表于 2013-7-19 23:23:03 | 显示全部楼层

Precedence rules优先规则
下面是从上到下的运算优先规则,优先级高的将先被运算。
()     函数调用                     从左到右
[]     数组元素参考
!      真假运算符                   从右到左
-      改变运算符
++     增量
--     减量
~      位逻辑运算符
&      位逻辑运算符 AND             从左到右
|      位逻辑运算符 OR
^      位逻辑运算符 OR
<<     左移
>>     右移
*      乘法                        从左到右
/      除法
%      百分比
+      加法                        从左到右
-      减法
<      小于                        从左到右
<=     小于等于
>      大于
>=     大于等于
==     等于
!=     不等于
||     逻辑 OR                      从左到右
&&     逻辑 AND                     从左到右
=      值                          从右到左
+=     加法值
-=     减法值
*=     乘法值
/=     除法值
%=     百分比值
>>=    右移值
<<=    左移值
&=     位逻辑运算符 AND值
|=     位逻辑运算符OR值
^=     位逻辑运算符 OR值
,     逗号                         从左到右
插入语会显示所优先执行的运算
注意:在MQL4程序中执行优先运算不同于在C 语言范围内的运算。

EA狙击手

发表于 2013-7-19 23:23:17 | 显示全部楼层

Operators操作符
语言操作符必须对执行完成任务的一些运算法操作进行描述。程序本身是这样的序列语句 。语句逐个随后以分号分离。
一个语句能占领一条或几条线。二个或更多语句可能位于同样线。单独执行命令的语句(if, if-else, switch, while and for) 可以相互插入
示例:

if(Month() == 12)
  if(Day() == 31) Print("新年快乐!");
Compound operator复合操作符
一个复合操作符有一个(一个区段)和由一个或多个任何类型的操作符组成的的附件{}. 每个表达式使用分号作为结束(;)。
示例:
if(x==0)
  {
   Print("无效位置 x=",x);
   return;
}

EA狙击手

发表于 2013-7-19 23:23:31 | 显示全部楼层

Expression operator表达式操作符
任何以分号(;)结束的表达式都被视为是一个操作符。这里是一些表达式操作符得范例:
称号运算符:
Identifier=expression;
x=3;
y=x=3; // 错误
称号运算符在表达式操作符中只限一次使用。
函数调用运算符:
Function_name(argument1,..., argumentN);
  FileClose(file);
空运算符:
它是由分号(;)组成并且使用在一个检测运算符中。
Break operator终止操作符
一个嵌入操作符终止最近外部操作符 switch, while或 for 的执行。在终止操作符之后给出检测操作符。这个操作符的目的之一:当中心值指定为变量时,操作符完成循环执行。
示例:
// 搜索第一个零元素
for(i=0;i<array_size;i++)
  if((array[i]==0)
break;
Continue operator继续操作符
一个 继续操作符。 我们将其放在嵌套内的指定位置,用来在指定情况下跳过接下来的运算,直接跳入下一次的循环 while 或for操作符。操作符 嵌入 位置与此操作符相反。
示例:
//  总结数组非零元素
int func(int array[])
  {
   int array_size=ArraySize(array);
   int sum=0;
   for(int i=0;i<array_size; i++)
     {
      if(a[i]==0) continue;
      sum+=a[i];
     }
   return(sum);
}

EA狙击手

发表于 2013-7-19 23:23:42 | 显示全部楼层

Return operator返回操作符
一个return将需要返回的结果放在return后面的()中。
示例:
int CalcSum(int x, int y)
  {
   return(x+y);
  }
在函数中省缺值类型被返回,此 return操作符必须使用:
void SomeFunction()
  {
   Print("Hello!");
   return;    // 这个操作符被删除
  }
函数正确的震动表示return操作符执行。
Conditional operator if-else条件操作符
如果表达式为true,操作符执行并按照操作符1 给出的检测。如果表达式为false,操作符2 执行。
if (expression)
     operator1
else
     operator2
if操作符 else部分可能被忽略。 if操作符忽略 else部分,显示分歧可能会嵌入。这种情况下, else 位置在先前if操作符的最近部位,这样不会出现else部分。
示例:
//   else 部分提及到第二个if操作符:
  if(x>1)
  if(y==2) z=5;
  else     z=6;
//   else 部分提及到第一个if操作符:
if(x>l)
  {
   if(y==2) z=5;
  }
else        z=6;
//  嵌入操作符
if(x=='a')
  {
   y=1;
  }
else if(x=='b')
  {
   y=2;
   z=3;
  }
else if(x=='c')
  {
   y = 4;
  }
else Print("ERROR");

EA狙击手

发表于 2013-7-19 23:24:01 | 显示全部楼层

Switch operator跳转操作符
在case全部变量和相应表达式值检测的操作符之内比较常数表达式值。每一个case变量会在整数或常数表达式内标注。常数表达式不包含函数变量调用。switch表达式操作符必须是整数类型。
switch(expression)
  {
   case constant: operators
   case constant: operators
     ...
   default: operators
  }
如果在case操作符等于表达式值,操作符 default标签连接将会执行。此default 变量无需在最后。如果相应表达式值和 default变量没有获取,不会有任何执行。关键词case和常数被标注,并且if 操作符执行 case变量,程序将执行以下所有操作符直至break操作符生成。
一个常数表达式的计算是在编译期间。在一个switch操作符内部存在两个相同值的常数。
示例:
switch(x)
  {
   case 'A':
      Print("CASE A");
      break;
   case 'B':
   case 'C':
      Print("CASE B or C");
      break;
   default:
      Print("NOT A, B or C");
      break;
  }
Cycle operator while循环操作符while
如果表达式为true, 操作符执行直至表达式变成false。如果表达式为false,将检测最近操作符。
while(expression)
  operator;
在操作符执行前,一个表达式值已经被指定。不过,如果开始表达式为 false,操作符根本不会执行。
示例:
while(k<n)
  {
   y=y*x;
   k++;
  }
Cycle operator for循环操作符for
用表达式1Expression来定义初始变量,当表达式2Expression2 为真的时候执行操作运算符,在每次循环结束后执行表达式3 Expression3。如果true, 运算符 for 将被执行。循环重复直至Expression2变为false。如果false,循环将会被中断并且检测运算符文本。稍候执行。
for (Expression1; Expression2; Expression3)
   operator;
此 for 运算符下列运算符成功:
Expression1;
while(Expression2)
  {
   operator;
   Expression3;
  };
使用for(;)可以造成一个死循环如同while(1)一样. 表达式1和表达式3都可以内嵌多个用逗号(,)分割的表达式。 <
示例:
for(x=1;x<=7;x++) Print(MathPower(x,2));
for(;;)
  {
   Print(MathPower(x,2));
   x++;
   if(x>10) break;
  }
for(i=0,j=n-l;i<n;i++,j--) a[i]=a[j];
Functions函数
函数是部分程序的一个名称,它可以在需要时从任何一个部分调用。 它是由定义分类返回值,名称,形式参量和合成运算符组成并执行的。通过的总数被限定在64个字符之内。
示例:
double                       // 被返回值的类型
linfunc (double x, double a, double b) // 函数名称和参量列表
{
                             // 合成运算符
   return (a + b);           // 返回值
}
"返回"运算符可以返回在这个运算符内表达式的值。如果需要,此表达式值可以转换为函数结果类型。函数没有返回的值必定是“省缺” 类型。
示例:
void errmesg(string s)
  {
   Print("错误: "+s);
  }
通过函数的参量可能存在由特定类型常数指定的默认值。
示例:
int somefunc(double a, double d=0.0001, int n=5, bool b=true, string s="passed string")
  {
   Print("需求参量 a=",a);
   Print("下列参量被传送: d=",d," n=",n," b=",b," s=",s);
   return (0);
  }
如果此默认值指定一个参量,那么所有的参量也必须存在默认值。
错误范例:
int somefunc(double a, double d=0.0001, int n, bool b, string s="passed string")
  {
  }

EA狙击手

发表于 2013-7-19 23:24:21 | 显示全部楼层

Function call函数调用
如果显示的文件没有描述, 它将考虑上下文的联系作为函数名称。
函数名称 (x1, x2,..., xn)
自变数(形式参量) 以值的形式通过。 计算每一个表达式 xl, . . . , xn 并将其值发送到函数。 表达式计算命令值是被保证的。在执行系统测试数字和自变数类型期间会给出函数。 这种形式的函数调用被称作调用值。调用函数是一个通过函数返回的表达式的值。 描述函数类型必须相应类型返回的值。全球范围内程序的任何一个部分函数是被公布或描述的,即其他函数之外。在另外函数里,函数不能被公布或描述。
例如:
int start()
  {
   double some_array[4]={0.3, 1.4, 2.5, 3.6};
   double a=linfunc(some_array, 10.5, 8);
   //...
  }
double linfunc(double x[], double a, double b)
  {
   return (a*x[0] + b);
  }
函数的调用是默认参量,通过参量的列表是被限定的,但不是之前的第一默认参量。
例如:
void somefunc(double init,double sec=0.0001,int level=10);  // function prototype
somefunc();                   // 错误调用, 第一请求参量必须存在。
somefunc(3.14);               // 正确调用
somefunc(3.14, 0.0002);       // 正确调用
somefunc(3.14, 0.0002, 10);   // 正确调用
当我们调用一个函数时,不可以忽略参量,存在默认值:
somefunc(3.14, , 10);         // 错误调用。第二参量被忽略。
Special functions特殊函数
在MQL4中存在三种预定义名称函数:
init() 在载入时调用,可以用此函数在开始自定义指标或者自动交易之前做初始化操作。
start() 是基本函数。对于智能交易,在下一个价格变动进入之后被调用。对于客户指标,在指标添加到图表之后,客户端开始(如果指标添加到图表)并且下一个价格变动进入之后,函数被调用。对于脚本,在脚本被添加到图表之后立即执行并初始化。如果在模板中不存在start()函数,模板 (智能交易,脚本或客户指标) 不能开启。
deinit() 当数据变动时触发,对于自定义指标或者自动交易的编程主要依靠此函数进行
预定义函数需要一些参量。不过,当这些参量被客户端调用时,外部没有参量提供。 start(), init()和 deinit()函数从模板的任何一点按照常规调用,等于其他函数。
不建议从init()函数调用 start()函数或是执行交易业务,作为图表数据,市场开价格。模板的初始化会出现残缺。这时,init() 和 deinit() 函数必须尽可能结束运行。在调用start()函数之前,尝试重新全面开启运行。

EA狙击手

发表于 2013-7-19 23:24:31 | 显示全部楼层

Variables变量
可变量必须在公开之前使用。 可变量必须拥有特殊的辨认名。相关可变量的定义描述会显示。
基本类型如下:
布尔数据 -布尔值的true 和 false;
字串符数据 - 特殊字符串;
双精度数字 - 带有浮点双精度数字。
示例:
string MessageBox;
int    Orders;
double SymbolPrice;
bool   bLog;
附加类型:
颜色 为整数代表RGB 颜色;
日期时间 为日期和时间, 起始时间从1979年1月上午0.00开始以秒数计算。
添加数据类型在输入参量的属性窗口方便查看。
示例:
datetime tBegin_Data   = D'2004.01.01 00:00';
color    cModify_Color = C'0x44,0xB9,0xE6';
数组
相同数列数据被标注序列。
int    a[50];       // 50整数的一维数组
double m[7][50];    // 7个数组的二维数组
                    //每一个由50 个整数组成。
唯一整数可以是 数组指数。 不允许四唯数列。数组元素开始编号为0 。 一个一维列阵的最后元素是1的数字比列阵大小。这就意味着, 请求数列的最后元素包括50 个整数将出现作为a[49 ] 。 维度被标注从0 到维度大小-1. 一个二维数组的最后元素从示例将出现作为m[6][49 ] 。
如果访问超出数列范围, 执行系统将发生错误可能生成错误 ERR_ARRAY_INDEX_OUT_OF_RANGE,在GetLastError()函数中可以得到。

EA狙击手

发表于 2013-7-19 23:24:42 | 显示全部楼层

Local variables局部变量
在任意的地方内可变量的公开是局部的。局部变量在公开的部分里是被限定的。 局部变量可以由任意一个表示结果初始化。 每次函数的运行只可以初始化一个局部变量。局部变量储存在相应的存储器上。
示例:
int somefunc()
  {
   int ret_code=0;
   ....
   return(ret_code);
  }
Formal parameters形式变量
通过函数的变量 是局部的。范围是在作用块内。在作用之内正式变量的名称必须不同于其他外部定义变量和函数变量。 作用块内的正式变量值已经被赋予。
示例:
void func(int x[], double y, bool z)
  {
   if(y>0.0 && !z)
      Print(x[0]);
   ...
  }
正式参量可能由常数初始化。在这种情况下, 初始化的值作为缺省值被考虑。参量, 在旁边(intialized) , 必须初始化。
示例:
void func(int x, double y = 0.0, bool z = true)
  {
   ...
  }
这样作用显现时, 初始化的参量可能被省去, 缺省值会代替它们。
示例:
func(123, 0.5);
MQL4 资料库功能在外部函数变量 模块之内无法有默认值初始化。
参量值通过。在任何情况下,变量里布局的修改将不会显示在功能板块内。 它是可以通过数列作为参量。但是, 为了数列可以作为变量,需要改变它的数列元素。
它是还可能通过参量参考。在这种情况下, 修改的这样参量将被显示在对应的变量。 数组元素无法参考通过。参量可能只在一个模块参考通过, 数据库不提供。
示例:
void func(int& x, double& y, double& z[])
  {
   double calculated_tp;
   ...
   for(int i=0; i<OrdersTotal(); i++)
     {
      if(i==ArraySize(z))       break;
      if(OrderSelect(i)==false) break;
      z[i]=OrderOpenPrice();
     }
   x=i;
   y=calculated_tp;
  }
数组可以通过参考通过, 全部改变会在数列来源内显示。 不同于简单的参量, 数组可以进入数据库...
以缺省值参量通过无法初始化。
最大参量不可以超过64个。

EA狙击手

发表于 2013-7-19 23:24:59 | 显示全部楼层

Static variables静态变量
"静止" 记忆被称作静态变量。在数据类型之前指定成分"静止" 被公开。
示例:
int somefunc()
  {
   static int flag=10;
   ....
   return(flag);
  }
静态变量被存放在永久记忆里,在函数退出后静态变量不会丢失。所有在同一板块内(除正式变量作用外),可能作为静止变量定义。 静态变量可以由相对应的类型常数初始化。 与局部变量不同。如果没有明确地初始化, 静态变量初始化以零。 静态变量在"init()" 函数之前只可应用一次。
Global variables全局变量
整体变量作为函数被定义在相同水平,即,不可以局部使用。
示例:
int GlobalFlag=10;   // 整体变量
int start()
  {
   ...
  }
整体变量的范围是整个程序。整体变量在所有程序内是被定义的。 如果它的值没有被定义,初始化值为零。 整体变量只对于相应的常数初始化。 整体变量只可以在init()函数操作之前一次性初始化。
注解: 变量在整体变量的水平位上不能够与客户端GlobalVariable...() 函数混淆。
Defining extern variables外部定义变量
外部定义的可变量。 在数据类型公布之前指定外部变量。
示例:
extern double InputParameter1 = 1.0;
extern color  InputParameter2 = red;
int init()
  {
   ...
  }
确定从外部程序输入的变量, 会直接显现输入数据窗口。数列本身不能作为外部变量。
Initialization of variables初始化变量
任何情况定义可变物可以初始化。如果它的原始值未被限定,任何可变物初始化为零(0)。 整体变量和静态变量的初始化由相应的常数进行。
整体变量和静态变量只能一次性初始化。局部变量的初始化与相应的调动进行。
示例:
int    n       = 1;
double p       = MarketInfo(Symbol(),MODE_POINT);
string s       = "hello";
double f[]     = { 0.0, 0.236, 0.382, 0.5, 0.618, 1.0 };
int    a[4][4] = { 1, 1, 1, 1,  2, 2, 2, 2,  3, 3, 3, 3,  4, 4, 4, 4 };
数组元素值列表必须被附寄在括号内。初始化省去的值被考虑为零。 如果初始化的数组大小不被定义, 它将由编译器定义 。多维数组由一个一维序列, 即序列初始化没有另外的括号。所有数列, 只能以常数初始化。
External functions definition外部函数的定义
类型外在作用被定义在程序的其它组分必须明确地被描述。 缺乏这样定义也许导致错误在程序期间的编辑、联结, 或施行。当描述一个外在对象, 主题词进口必须被使用以在模块的参考。
示例:
#import "user32.dll"
  int     MessageBoxA(int hWnd ,string szText,string szCaption,int nType);
  int     SendMessageA(int hWnd,int Msg,int wParam,int lParam);
#import "lib.ex4"
  double  round(double value);
#import
进口可能被使用容易地描述作用叫从外在DLLs 或编写EX4 图书馆。
尖对可变物可能通过对进口的dll作用。串类型的数据 被通过作为尖对对应的记忆块(你应该记住串数据的内部表示法包括二份: 记忆块长度和记忆阻拦尖) 。如果有需要通过数据内部或双重型, 那么对应的型的一维一些应该参考通过作为参量。
示例:
#import "some_lib.dll"
  void    PassIntegerByref(int& OneInt[]);
#import
int start()
  {
   int array[1];
//...
   PassIntegerByref(array);
   Print(array[0]);
//...
  }

您需要登录后才可以回帖 登录 | 注册 微信登录

EA之家评论守则