MQL5语言帮助文件人话版(十七)数据类型之空值和零

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

第十七章 空值和零


一、空不是零、零不是空
MQL5语言中,有多种表示空或者零的概念,但彼此又不相同,如不加以区分,很多人见到之后都会懵比。我做了一个总结,如下表所示:

ScreenShot_2026-09-02_125653_397.png

表格中前三种,都是0,但这个0仅仅是在程序的2进制底层代码上显示为0,在业务逻辑上完全不同。后两种也都叫“空”,但空数组表示有位子无元素,无返回值的空,那是真的什么都没有。

这一节我们着重研究void空值和NULL常量。void是系统关键字,NULL是宏常量,大小写不能改变。

二、void空值
void往往会被说明为,本函数不返回任何值。所以要理解何为void空值,先要明白什么是“函数返回值”。

在编程中的所谓“函数”,与我们在数学中学的“函数”有点类似。它也可以去做加减乘除以及各种运算,有参数输入,有结果输出。

但程序中的函数,输出的并不一定是数据,也可以输出一种动作,比如修改了其他函数的某个参数,打印了日志文件,甚至是执行了买卖操作等,这叫函数的副作用。这种输出动作的函数,没有任何数据输出。所以说一个函数返回void空值或者说没有返回值的函数,只是说它没有返回一个数据,而不是说它啥都没返回。

但void确实是一种数据类型,通常放在函数前面,用来定义该函数没有返回值。

根据函数之前是否带有void,可以清楚明了的把函数划分为有返回值函数和无返回值函数两大类。简单来说,有返回值的函数,开头肯定没有void,而是其他数据类型,偏向数据加工工具,送入参数,内部加工,输出一份结果给调用方拿去计算、赋值。无返回值函数,开头一般会有个void,偏向执行动作,完成一件事情(打印、下单、修改变量),不把加工结果通过返回通道交回来。

但是需要知道,有返回值的函数,也可以通过内部代码实现某种动作。而无返回值的函数,只是表面上没有直接的输出数据,但它本质上还是通过修改其他参数来输出动作,这个修改其他参数也是一种数据输出。所以这种划分方法,并不是本质内涵的实质性区别,只是形式上的区别。

三、NULL常量

MQL5 中NULL是内置常量,等价整数0;它不是数据类型,不是一个数学意义上的数字,也和 void 空型无关。主要用于资源句柄(文件句柄等),表示请求失败。

我们自己写普通业务逻辑(写自己的函数、变量、策略计算),几乎不需要主动写 NULL。 NULL 主要是接收系统 API 的返回值,用来判断:资源有没有申请成功。我们写NULL写的最多的就是,if(fh == NULL) { Print("打开失败"); },意思如果结果是NULL,那就在日志中输出调用失败的结果。

要理解何为资源句柄,需要先了解API。我们学习编程,API是个经常见到的词汇。API翻译成人话就是“应用程序编程接口"。我们编的EA是无法直接让交易商给我们开单买卖的,真正能让交易商给我们开单的是MT5平台,这个MT5就是应用程序。我们编的EA,通过MT5预留的一些接口,调用MT5的开单指令,从而最终实现开单。

也就是说,我们编的程序,里面能命令MT5给我们干活,而不是要自己写代码去实现的功能,就叫API,也就是MT5程序可供我们调用的”资源“。我们调用API,API会给我们一个回馈,如果调用成功了,给我们成功的结果,这个结果会复杂很多。如果调用不成功,那它就简单粗暴给你一个”NULL“。
举报

评论 使用道具

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

麻爪

麻爪 D

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

Fast跟单EA