MQL5语言帮助文件人话版(三)语言基础
第三章:语言基础一、新手感悟:
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 ushortdatetime string void double struct enum uchar2.访问分类符const private virtual delete protected override public3.存储类型extern input static4.操作符break dynamic_cast operator case else pack continue for return default ifsizeof delete new switch do offsetof while5.其他this #define #import true #ifdef #include false #ifndef #property template#else group typename #endif namespace
页:
[1]