微信扫一扫 分享朋友圈

已有 48 人浏览分享

开启左侧

MQL4基础:函数

[复制链接]
48 0
MQL4基础:函数
  • 函数调用
  • 特殊函数
    函数是一段已命名的程序,它可以从程序任一部分多次调用。它是由函数返回值的类型说明、函数名称、形式参数和语句块组成。传递参数的个数被限定在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() 是一个在模块初始化时调用的函数,可以用此函数在开始自定义外汇MT4指标或者自动交易之前做初始化操作。如果这个函数不可用,初始化时就不会调用任何函数。
    start() 是主函数。对于智能交易,它在收到下一跳数据后调用该函数。对于自定义外汇MT4指标,在外汇MT4指标添加到图表之后,或在客户端开始运行之时,也可在收到下一跳数据之后,该函数被调用。对于脚本,在脚本被添加到图表之后立即执行并初始化。如果模块中根本不存在start()函数,模块(智能交易、脚本或自定义外汇MT4指标)就不能执行。
    deinit() 是一个模块的析构函数(注:借用C++概念),执行一与init()函数相反的操作。deinit()函数往往用来做“清理善后”的工作,例如,创建对象时开辟了一片内存空问,退出模块前需要释放。如果用户没有编写该函数,它也不会执行任何操作。
    预定义函数可以带参数。不过,当客户端调用这些函数时,并不能从外部向它传递参数,只能采用默认值。start(),  init()和deinit()函数可从模块任何一点按照常规函数规则调用,等同于其他函数。
    不推荐从init()函数调用start ()函数或是执行交易操作。对于图表数据、市价等,在模块初始化期间,数据可能残缺不全,这时,init()和deinit()函数必须尽快地完成任务。在调用start()函数之前,千万不要开始尝试交易操作。
    大家在看了小编以上对"MQL4基础:函数"的介绍后应该都清楚了吧,希望对大家做单有所帮助。如果大家还想要下载更多有关"MQL4基础:函数"的相关EA源码,敬请关注汇探网下载。我们会持续更新交易系统,EA源码。
  • 举报 使用道具

    回复
    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    精彩推荐
    热门资讯
    网友晒图
    图文推荐
    • 联系我们
    • 邮箱:1912582076#qq.com(请把#改成@)
    • 电话:400-178-8526
    • QQ客服 1912582076
    • 工作时间:周一至周五(早上9点至下午5:30点)
    • 微信公众平台

    • 客服微信号

    QQ|外汇EA|炒外汇论坛|外汇ea|汇探网 |网站地图

    GMT+8, 2026-3-20 05:29 , Processed in 0.165963 second(s), 29 queries .

    Powered by 汇探网 免责申明:本平台仅提供 外汇ea, 外汇指标模板所有产品及展示信息均由第三方发布提供.|投资有风险,交易需谨慎.

    Copyright © 2014-2023, 汇探网-提供 外汇MT4指标,外汇EA下载,外汇交易系统,外汇开户赠金视频教程,外汇软件工具等.版权所有,复制必究.