MQL5语言帮助文件人话版(三)语言基础

| 发表于 8 小时前 | 显示全部楼层 |复制链接
第三章:语言基础

一、新手感悟:
    MT5交易平台是一种电脑程序,已经完成的、可以正常运转的EA也是一种电脑程序,用来编写EA的工具——METAEDITOR同样是一种电脑程序。    但MQL5编程语言不是电脑程序,这是编程小白的第一个认知。
    编程语言之所以叫语言,就因为它本质上和人类语言是一样的,只不过是跟电脑用来说话和交流的工具,一种说话的规则,所以叫语言,本质上也是一堆词汇和语法规则。我们学习一门编程语言,其实就是在学习一门外语。
    MQL5语言是基于C++语言编制的。如果说C++是编程界的普通话,那么MQL5就是自动交易程序这一小块地方的方言。有C++基础的人学MQL5,可能会更容易,但完全不懂编程的人直接学MQL5也不会有任何问题。
    本手册中大部分的基础内容,比如数据类型、运算符、程序类型、头文件、关键字等等内容,其实都是在讲MQL5语言的语法结构。本质上就是这门方言的词汇和遣词造句的规范,只有按照正确的规范来排列这些词汇,电脑才能够理解你想说什么。所谓的程序报错,就是电脑发现你说的话它听不懂,无法理解。
    但一些功能性的东西,比如前文说的程序库,系统已经写好的一些自带函数,还有前文说的事件驱动模式等等,这些东西在本手册中占比也很大,且是最有用的一些东西,它们并不是本语言语法的范畴。语法类似字典、辞书等通用的语言规则类概念,而功能性的东西属于工具书,是成套的为了解决一些特定问题的东西,它里面的语句已经写好,你也不需要去编写修改,也不用你关心它写的是否有语法错误,只调来用就好了。
    这就好比你会了写字造句写文章,就可以宣布学会了这门语言,但并不代表你就能用这门语言写出一本数学书。而实际生活中,当你需要算账的时候,也不需要自己先编一本数学书出来,只找一本人家编好的,照着上面的公式算就好了。这大概就是编程语法和应用的关系。
    需要指出的是,相对于人类语言来说,任何程序语言的语法,都是比较死板和枯燥的。它们最大的特点就是没有歧义,一句代码只能表达一个意思,而且是精确量化的,没有模棱两可,没有差不多。
    这也是EA自动交易往往被人被叫做“量化交易”的本质原因,但这两个真不是一回事。

二、MQL5语言基础——注释
    编程语言中的注释,就相当于你学英语时在书上写的中文翻译。但如果你直接在程序中写翻译文字,编译器会把它当作程序的一部分,且它又不认识中文汉字,就会报错了。
    所以在代码中,我们需要一些特别的符号来区别正文和注释,系统一旦看到注释符号,就可以区分注释内容和代码正文,注释内容不参与代码正文的逻辑判断过程,所以关于注释的内容,你想写什么,写什么,想怎么写就怎么写。
    注释分两种:
    (1)单行注释:用双斜杠//来开头,以换行符为结尾。我们肉眼看不到换行符号,但你按下回车键另起一行时,系统可以看到你按回车键的那地方有个换行符。
    注释内容默认是灰色的。如果你写的注释内容很多,按了一下回车键,系统就会认为后面的内容是代码正文,把它们标注成彩色,就会报错了。
    在METAEDITOR代码编写器的窗口中,一行代码最多可以写4096个字符,理论上你可以把你想注释的东西完全用单行注释写出来,但你的屏幕没有那么宽,看起来很难受。又不能直接按回车键另起一行,所以需要用到多行注释。
    (2)多行注释:用单斜杠加星号键/*开头,用星号加单斜杠*/结尾。系统看到这两组符号之后,会把它们里面的任何东西都当作注释,多行注释中间你可以随便按回车键另起一行,也可以加入双斜杠//再写一行单行注释,也可以把所谓的多行注释只写成一行,不按回车键。但不允许在多行注释中再写多行注释,如果系统发现连续两个/*开头符号,它就不知所谓了,会报错。

三、MQL5语言基础——标识符
    标识符就是系统自带或者编程者自己给一些程序结构起的名字,比如常量、函数、枚举、类、结构体等等,都需要一个名字来表述它,这些名字就叫标识符。可不是图案符号,我最开始就认为是星号之类的才叫标识符。    如果用人类语言来比喻,标识符就相当于名词。像一些代表程序动作的函数名称,比如前面说到的开始函数OnStart 也是标识符,可以类比为动词,而动词本质上就是某个动作的名称。
    最常见的标识符就是变量的名字,所谓变量就是一个或者一组数据,它可以变化,但为了区分这个数据和别的数据,你需要给它们分别取个名字。这个名字,就是标识符。比如你可以设定一个标识符price代表价格,再设定一个标识符time代表时间,就可以区分这两种数据。
    MQL5语言规定,任意标识符的字符长度,不得超过63字节,一个英文字母或者一个英文符号,算一个字节。这就相当于我们起名字,最多三个字,四个字,如果弄出五个字八个字,一看就不是本地人了。
    我们可以用数字0到9,大写英文字母A到Z,小写英文字母a到z,以及下划线_来编写标识符,除此之外,概不接受。
    写标识符还有两个特殊规定:
    (1)不能以数字开头,大小写字母和下划线都可以作为开头。
    (2)不能与本语言的关键字重复。
    其他建议:
    (1)标识符大小写是严格区分的,Price 和 price 是两个完全独立的标识符。
    (2)不要使用系统自带的函数名称作为标识符,虽然自带函数的名称不是关键字,你写了也不报错,但会出现干扰,后面的标识符会覆盖前面的标识符,让其失效。
    (3)标识符要见名知意,建议用英文单词,或者单词缩写,也可以用汉语拼音。但汉语是多音文字,许多词的读音一样,除非你固定一些拼音作为专门使用,大量地用拼音会造成相当的混淆。另外也不要使用纯编号,比如一个变量是A1,另一个是AA1,这种也可以用,但代码写多了,连你自己都不知道这变量代表的是什么了。
    (4)如果一个变量需要用到多个单词,单词之间不能有空格,添加空格之后,系统会认为你同时设置了两个变量,这是不允许的,所以它就会报错。这种情况要用所谓“驼峰命名法”,把两个单词连起来,用首字母大写来区分。也可以用下划线代替空格,把两个单词连起来。
    (5)变量和函数是最常见的标识符,为了区分这两大类,建议变量的首字母用小写,函数的首字母用大写,这样一眼就可以看出类别。
    (6)如果你非要用系统函数或者关键字来做变量,觉得别的字无法准确表达这个意思,可以加上数字后缀,或者下划线后缀之类的,总之不能一模一样。

四、MQL5语言基础——关键字
    任何程序软件都有关键字,又叫保留字。这些单词不是标识符,反而是和标识符相对立的概念。也就是说系统自带函数的名称并不是关键字,你也可以用系统自带函数名字当变量、自定义函数等的名称,系统不会报错,但实际运行起来,重名的东西会相互覆盖,割裂你的逻辑链条,所以还是别这么干。
    关键字是语法结构用字,相当于人类语言中的“虽然、但是”这种词,它们专门表达一种语言结构,一旦出现“虽然、但是”,你就知道这话要转折了。编程也一样,它看到关键字,就会做相应动作。如果你非要用关键字给变量或函数命名,就好像给孩子起名叫“虽然、但是”一样,人类听到这种名字会觉得奇怪,程序遇到用关键字来起名字,就直接报错。
    下面列出的是固定的保留字标识符,每个标识符相当于一个动作,不能用来操作其他命令。不必去记忆这些关键字,写程序时,你真写出这些字做变量,系统会给你指出来。
1.数据类型
bool float uint char int ulong class long union color short ushort
datetime string void double struct enum uchar
2.访问分类符
const private virtual delete protected override public
3.存储类型
extern input static
4.操作符
break dynamic_cast operator case else pack continue for return default if
sizeof delete new switch do offsetof while
5.其他
this #define #import true #ifdef #include false #ifndef #property template
#else group typename #endif namespace
最近访问 头像模式
举报

评论 使用道具

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