MQL5语言帮助文件人话版(二十九)第四章(1) 函数简介

| 发表于 2 小时前 | 显示全部楼层 |复制链接
最后由 麻爪 于 2026-10-13 12:57 编辑

原手册中关于”操作符“一章最后几项内容,new和delete在前面指针章节已经写过,不再赘述。而矩阵乘法是高阶应用,比如机械学习、暴力计算寻优时才用的到,新手学起来基本用不上,徒增烦恼。所以我们从这章开始聊函数。

函数的重要性无论怎么说都不为过,学不会函数,就不可能学会一门编程语言。因为函数是编程语言的核心执行单元与组织单元,软件的绝大多数功能,都是通过函数的封装、调用与协作完成的,地位是基础性且举足轻重的。甚至可以更绝对一点:所有可运行的代码逻辑,最终都必须落脚在函数里;没有函数,程序就无法组织、无法执行。

MQL5语言中,光是系统自带的函数就有300多个,分为十几个大类,我们若一头扎进这个大迷宫中,很容易难以自拔。我们得先从宏观上理解一下这个所谓函数。

一、从语法上,函数有一个最大的特征,即:函数之外不干活。在 C/C++/MQL5 这类编译型语言中,全局作用域(即函数之外)只能写声明(变量声明、函数声明、类型定义),不能写任何可执行的逻辑。所有的 if 判断、for 循环、运算、下单、打印等等真正 “干活” 的代码,必须放在函数内部。就是你写的整个程序本身,从启动、初始化、主体运行到收尾的全生命周期,所有可执行逻辑都必须由函数承载,并且是由系统预先约定好的生命周期事件函数(OnInit()、OnTick()、OnDeinit()那些)来驱动整个流程。

二、函数的封装使它可以一次编写,到处调用。函数被设计出来,就是为了把一段完成特定功能的代码包起来,起个名字,以后需要用的时候直接调用名字,不用重复写一遍。同类数据、同样数量,如果还是同样的处理过程,本质上就是一个重复的东西。你写完第一次,第二次也绝不会重写一遍,直接复制粘贴就好。但函数封装之后,你连复制粘贴都不需要了,那些具体的处理过程代码,可以直接忽略。我们调用系统自带函数,从来不关心它内部的处理过程,只要弄清楚函数名、参数就搞定了,这就是函数封装的作用。

三、写函数本身就是一个向下拆解、逐步求精的过程。我记得软件课第一节教的就是”描述问题、分析问题、拆解问题“,所谓问题,就是用户需求。用户的问题永远都是宏观的,比如”我需要一个准确率高、风险低的行情分析程序“,这种问题如果直接回答是无解的。编程本质上就是把一个宏观任务拆解乘一个一个的子任务,再给每个任务设计边界条件,比如准确率高,多少算高?风险低,怎么才是低?这样每一个子任务都有了可以量化的具体目标。但对于程序来说,这些子任务依旧太宏观了,无法直接实现,必须进一步分解。当用户需求被一步步分解到无法再分解了,比如判断两根k线是否为包含关系,你只需要设计一个是否包含的判断条件,设定它需要什么参数,然后封装为函数,它的返回值就可以解答是或者否。至于你在什么位置、什么条件下去判断这个包含关系,那就是另一个任务了,可以再写一个函数,该函数中调用包含判断函数就好。我强烈建议初学者尽量把最后一层子功能都封装为函数,在系统的主函数中只做调用,不写任何内部代码,让OnTick()变成一个”函数目录“。但是如果某个子函数,只在另一个函数中被调用,那就没必要单独封装了,可以把它写成上级函数的一部分。但如果调用位置超过两个,强烈建议单独封装。

四、函数就是个黑箱,你只需要知道它的功能和参数即可。函数的这种抽象让开发者可以站在巨人的肩膀上,不用从零造轮子,专注于自己的业务逻辑,调用者只需要知道「传什么参数、得到什么结果」,不需要知道内部具体怎么实现。同样你也可以把一些经典的必用过程写成自定义函数,而不必每次都操心这个细节。如果需求变了,只需要修改对应的函数内部,所有调用这个函数的地方会自动同步更新,也不用到处改代码。

五、MQL5函数的大致分类。从最宏观的角度,可以把MQL5语言中的函数分为四大类:

1.内置基础函数:比如输出函数Print ()、绝对值计算函数MathAbs ()、停止信号检测函数IsStopped ()、服务器当前时间函数TimeCurrent ()等等,属于实现某一个具体的系统功能的内置基础函数。它们的特点是与具体业务(也就是我们分析行情做交易的直接需求)无关,而是做一些通用操作,数学计算、输入输出,以及与MT5平台的互动,获得MT5平台上的一些内置数据。实际上,我们所有的操作都是由这些基础函数实现的,没有这些基础函数,你写的代码和MT5平台就是两个不相关的东西,无法起作用。

2.内置业务函数:比如OrderSend(发单)、iMA(均线)、AccountBalance(账户余额)、Bars(K 线总数)等等,属于和我们的交易业务息息相关,直接进行交易动作的函数,这些函数就是所谓的”API“,应用程序编程接口。我们写EA,本质上就是让MT5平台自动执行各种交易动作,而我们的代码无非就是通过这些内置业务函数告诉MT5,什么时候该下单了,什么时候该平仓了,具体的参数是什么样的。没有它们,代码只能是代码,无法完成交易。

3.系统事件函数:也就是`OnInit()`、`OnTick()`、`OnDeinit()` 这些 EA 入口,这些函数是我们的程序能够正常启动、运转、结束的关键,是驱动器,没有它们,我们的程序就是死的。

4.自定义函数:每一个用户的需求都是个性化的,每一种业务要求的互不相同的,哪怕是同一个概念,比如顶底分型这样的东西,不同的人的判断标准都是不一样的,所以EA程序不是标准化产品,个性化需求必须通过自己写个性化的逻辑过程来实现,这些个性化的逻辑过程就是所谓的自定义函数。可以说,自定义函数,是一个EA的灵魂。

六、本章讲什么

这一章的子标题是调用函数、传递函数、重载函数、操作重载等等,属于函数操作的范畴,并不是具体的某一个函数的介绍。
最近访问 头像模式
举报

评论 使用道具

发新帖
EA交易
您需要登录后才可以评论 登录 | 立即注册

麻爪

麻爪 D

如果你想让一个人下地狱,介绍他做交易。
如果你想让一个人在地狱里永不超生,介绍他做EA交易。

Fast跟单EA