手机版
专业交易平台

MQL4基础:变量

开户问题咨询
在线交易开户咨询
阅读 : 12884 次
在正规专业、多重监管的经纪商开户交易
外_汇_邦 WaiHuiBang.com

  • 局部变量
  • 形式参数
  • 静态变量
  • 全局变量
  • 定义外部变量
  • 变量初始化
  • 外部函数定义

变量必须在使用之前定义(声明)。变量必须拥有唯一的标识名。变量的声明包括要定义的变量名及其类型。变量的声明不是语句。

基本类型如下:

  • bool -布尔值 truefalse;
  • string – 字符串;
  • double – 带有浮点双精度数字;
  • int – 整数;

变量声明示例:

string MessageBox;int    Orders;double SymbolPrice;bool   bLog;

其他类型:

  • color –  代表 RGB 颜色的整数;
  • datetime – 日期和时间,起始时间从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()函数得到。

局部变量

在一个函数内部定义的变量是局部变量。局部变量的作用范围被限定在所定义的函数内。局部变量可以用任意一个表达式值进行初始化。每次调用函数都会初始化一次局部变量。局部变量存储在函数申请的临时空间中。

示例:

int somefunc()  {   int ret_code=0;   ....   return(ret_code);  }

形式参数

传递给函数的参数都是局部变量。作用范围限制在函数内。形式参数名称应与外部定义的变量名和函数内部定义的局部变量名不同。调用函数时形参变量必须赋值,当然,在函数内,这些形参变量也可以被赋值。

示例:

void func(int x[], double y, bool z)  {   if(y>0.0 && !z)      Print(x[0]);   ...  }

形参变量可用常数进行初始化。在这种情况下,初始化值被当作默认值。另外,紧随其后的形参变量也必须初始化。

示例:

void func(int x, double y = 0.0, bool z = true)  {   ...  }

当调用函数时,初始化过的参数可能被省略不写,默认值会代替它们。

示例:

func(123, 0.5); //参数z被省略,函数内使用z的默认值

从外部模块导入的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个。

静态变量

“static(静态)”存储类型用于定义一个静态变量。在数据类型前指定”static”说明符说明定义的是一个静态变量。

示例:

int somefunc()  {   static int flag=10;   ....   return(flag);  }

静态变量被存放在内存静态存储区里,在函数运行结束后静态变量的值不会丢失。同一模块内所有变量,除函数的形参变量外,都能定义成静态变量。静态变量只能由相应类型的常量初始化,这点与一般的局部变量有所不同,局部变量可由任意类型的表达式进行初始化。如果静态变量没有明确地初始化,它将被初始化为零。静态变量只可在”init()”函数之前初始化一次。当从定义了静态变量的函数内部退出时,静态变量值不会丢失。

全局变量

全局变量只能定义在函数之外,与函数同级,也就是说,在任何模块中全局变量都不是局部的。

示例:

int GlobalFlag=10;   // 全局变量int start()  {   ...  }

全局变量的作用域是整个程序。全局变量可从任意函数内访问。如果它的值没有被明确定义,初始化值就为零。一个全局变量只能由相应类型的常量进行初始化。全局变量只可以在程序装入到客户机内存时初始化一次。

注:全局定义的变量不能与那些能被GlobalVariable…()函数访问的客户端全局变量混淆。

定义外部变量

外部存储类型extern可以定义一个外部变量。在数据类型之前冠以”extern”说明符指明其为外部变量。

示例:

extern double InputParameter1 = 1.0;extern color  InputParameter2 = red;int init()  {   ...  }

外部变量决定程序的数据输入,他们会直接显示在程序属性窗口。数组本身不能作为外部变量。

变量初始化

定义变量时可以初始化值。如果变量的初始值未被明确指定,它就被初始化为零(o)。全局变量和静态变量仅能被相应类型的常量初始化,而局部变量可以被任意类型的表达式初始化,并不局限于常量。

全局变量和静态变量只能初始化一次。局部变量在被相应的函数调用时每次都会初始化。

示例:

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 };

数组元素值列表必须被包含在大括号{}内,省略初始化的值被认为零。如果初始化定义时没有指定数组大小,编译器将根据初始化值列表的大小来定义。多维数组按照一维数组的顺序进行初始化,即初始化序列中不需要另加大括号。所有数组,包括那些在局部范围内定义的数组,只能用常数进行初始化。

外部函数定义

定义在程序其它部分内的外部函数类型必须明确地说明。缺乏这样定义也许导致在程序的编译、连接、运行时出错。说明一个外部对象时,必须使用关键字#import。

示例:

#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

import语句清楚地说明这些函数是从外部DLL库或编译过的EM4库中引用的。

变量的指针能传给导入的DLL函数。字符串型数据能作为指针传给相应的内存块(我们应该记住,字符串数据的内部表示分为两个部分:内存块长度和内存块的指针)。如果有必要传递整型或双精度型数据,那么这些类型的一维数组也能作为参数引用传递。

示例:

#import "some_lib.dll"  void    PassIntegerByref(int& OneInt[]);#importint start()  {   int array[1];//...   PassIntegerByref(array);   Print(array[0]);//...  }
外_汇_邦 WaiHuiBang.com
       专业稳定、深受用户好评的在线交易平台

本文标题:MQL4基础:变量 - MT4平台MQL4编程学习
本文地址:https://www.waihuibang.com/fxschool/autotrading/mql4/49064.html

免责声明: 本文内容不代表外汇邦网站观点,内容仅供参考,不构成投资建议。投资者若据此操作,风险自担。

相关文章

点击查看低点差交易经纪商点击咨询交易开户相关问题多重监管的在线交易平台

  • FX Monetizer:Forex Growth Bot的兄弟
    FX Monetizer:Forex Growth Bot的兄弟

    今天我们就来评论一个机器人FX Monetizer,提供了一些相当强劲的业绩。我承认我在文章的开头,对这个EA的注意力,是因为它是由Eugene L编程的,Eugene L是著名的Forex Growth Bot (FGB)的作者。这是在Myfxbook上追随者和...

    专业交易平台 MQL4编程学习
  • EA智能交易外汇的优势

    在金融交易市场,外汇越来越被人所关注,他的稳定,低风险高回报及交易时间和买卖的自由度赢得了广大投资者的亲睐,然后个人自主交易即手动交易即使是在外汇市场也是存在很大的弊端,目前前华尔街60%以上的交易都是由程序化...

    经纪商平台 MQL4编程学习
  • 外汇EA编程入门【第三课】 认识EA常用的一点点英文

    if 如果else 不然true 真的false 假的double 数目字是有小数点int...

    在线交易开户 MQL4编程学习
  • MT4 MQL4编程基础语法学习

    语法 [Syntax] 代码格式 空格建、Tab键、换行键和换页符都可以成为代码排版的分隔符,你能使用各种符号来增加代码的可读性。...

    低点差交易平台 MQL4编程学习
  • 外汇EA编程入门【第五课】:EA模式结构

    打开你的metaeditorcopy & press 下面的ea结构然后save 一个名字比...

    经纪商平台 MQL4编程学习
你可能感兴趣