首页学院交易策略EA智能交易文章详细

MQL4基础:函数

外汇网2021-06-17 09:40:30 64
汇外网 - 全球专业的黄金外汇门户导航行情资讯网站

  • 函数调用
  • 特殊函数

函数是一段已命名的程序,它可以从程序任一部分多次调用。它是由函数返回值的类型表明、函数名称、形式参数和语句块构成。传递参数的个数被限定在64个之内。

示例:

double                       // 返回值的类型linfunc (double x, double a, double b) // 函数名称和参数列表{                             // 语句块   return (a + b);

// 返回表达式值}

return语句可以返回函数内表达式的值。如有必要,表达式值的类型可以转换为函数结果类型。没有返回值的函数务必定义成 “void” 型。

示例:

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")  {  }
函数调用

假使在表达式前显现一个曾未用过的名字,又后跟一个左括号,在上下文环境中它将被视作函数的名字。

函数名称 (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);

// 函数原型somefunc();

// 错误调用, 第一请求参数务必存在。somefunc(3.14);

// 正确调用somefunc(3.14, 0.0002);

// 正确调用somefunc(3.14, 0.0002, 10);

// 正确调用

当我们调用一个函数时,不可以忽视参数,即便那些存在默认值的参数也不行。

somefunc(3.14, , 10);

// 错误调用。第二参数被忽视。

特殊函数

在MQL4中存在三种预定义名称函数:

init() 是一个在模块初始化时调用的函数,可以用此函数在开始自定义指标或者自动交易以前做初始化操作。假使这个函数不可用,初始化时就不会调用任何函数。

start() 是主函数。对于智能交易,它在收到下一跳报告后调用该函数。对于自定义指标,在指标添加到图表之后,或在客户端开始运行之时,也可在收到下一跳报告之后,该函数被调用。对于脚本,在脚本被添加到图表之后立刻实施并初始化。假使模块中根本不存在start()函数,模块(智能交易、脚本或自定义指标)就不能实施。

deinit() 是一个模块的析构函数(注:借用C++概念),实施一与init()函数相反的操作。deinit()函数往往用来做“清理善后”的工作,比如,创建对象时开辟了一片内存空问,退出模块前需要放出。假使用户没有编撰该函数,它也不会实施任何操作。

预定义函数可以带参数。然而,当客户端调用这些函数时,并没有能从外部向它传递参数,只能采取默认值。start(), init()和deinit()函数可从模块任何一点依照常规函数规则调用,等同于其余函数。

不推荐从init()函数调用start ()函数或是实施交易操作。对于图表报告、市价等,在模块初始化阶段,报告或许残缺不全,这时,init()和deinit()函数务必赶紧地完成任务。在调用start()函数以前,千万不要开始试图交易操作。

标签:

随机快审展示
加入快审,优先展示

加入VIP