![程序自动化交易:投资策略解析](https://wfqqreader-1252317822.image.myqcloud.com/cover/277/33831277/b_33831277.jpg)
2.3 MQL4基础知识
学习编程语言一定要克服惧怕心理,有人担心自己英文水平有限,怕很多英文注释看不明白;有人担心自己学历太低,看不懂、写不出程序。其实所有的担心都是自我设限,自己给前方的道路增加“拦路虎”,但只要肯下功夫,就没有攀登不了的高峰。MQL4 语言简洁,函数高度集成,是我们实现程序自动化交易的最佳选择。但是万丈高楼平地起,我们依然需要从基础知识开始学习。
对于计算机程序来说,其本质上是通过数据处理来实现一定功能的,因此学习和掌握与数据相关的信息,就显得十分必要,与数据相关的信息包括数据类型、数据的运算等。同时我们在编写程序的时候还要对程序的书写规则以及函数有一个清晰的认识。
2.3.1 语法规则
任何一种语言在表述的时候都有一套规则,例如我们说的中文、英文或计算机C语言,如果没有规则,那么别人就听不明白你想要表达的意思或者计算机不知道你要执行什么。MQL4语言也是一样的,只有书写出满足MQL4语法结构的程序,MT4平台才能够对其识别和运行。下面我们将从格式、注释、保留字、标识符等方面做介绍。
1.格式
在编写程序的时候,我们可以使用空格或者制表符来分割代码,以达到让代码美观简洁的目的,例如下面的代码:
![](https://epubservercos.yuewen.com/68DF0D/18096060108237406/epubprivate/OEBPS/Images/38909_21_1.jpg?sign=1739285395-Jh1wzemHDNMfZskimU3ycUpTbEXYTVzh-0-3fe11998b9051d07237fcef7ad847b17)
我们还可以这样表述:
![](https://epubservercos.yuewen.com/68DF0D/18096060108237406/epubprivate/OEBPS/Images/38909_21_2.jpg?sign=1739285395-iqLx3VgNi23UWEgM1FNygwntCEGeZtQE-0-33262f1dc741e76b778f2692353680bc)
以上两种代码表述的方式都是正确的,但是从简洁的角度考虑,我们还是选择第一种表述方法。但是在多条件共振的时候,建议每一个条件都单独成行,这样更方便我们排查单个条件,例如下面的写法:
![](https://epubservercos.yuewen.com/68DF0D/18096060108237406/epubprivate/OEBPS/Images/38909_21_3.jpg?sign=1739285395-xZ6jTSC6GvRHZy18pYSNeXBnkZAumvuv-0-889907977749ee042d52ea9ea5b937a1)
2.注释
注释是对程序的解释,方便在日后对程序进行维护和升级,使程序更加清晰易读。程序会忽略被注释的代码,不会去执行。MQL4语言规则下的注释分为两种:单行注释和多行注释。单行注释开始于“//”,结束于一个新行。多行注释开始于“/*”,结束于“*/”,如下所示:
![](https://epubservercos.yuewen.com/68DF0D/18096060108237406/epubprivate/OEBPS/Images/38909_22_1.jpg?sign=1739285395-PqGCZc5dJ9G5KlJ4WOpxuPz2XVKmoOdJ-0-a70b74b91f966aff03ee006967c690ba)
3.保留字
保留字是程序语言已经定义过的字,MQL4的保留字如表2-1所示。
表2-1
![](https://epubservercos.yuewen.com/68DF0D/18096060108237406/epubprivate/OEBPS/Images/38909_22_2.jpg?sign=1739285395-k4U6iN9Gq1CAP6cYlTd4a4PaPCiHk0Fs-0-2219e5193886b514d6a7bfffb7a2ae22)
在编程过程中不能再将这些字作为变量名或过程名使用。例如,我们把一个变量命名为“switch”,给它赋值为1.68,因为“switch”是MQL4语言的保留字,所以这样的写法就是错误的,在编译的时候会报错。
![](https://epubservercos.yuewen.com/68DF0D/18096060108237406/epubprivate/OEBPS/Images/38909_22_3.jpg?sign=1739285395-nG5cExBP2fYoLMPs4Skz20hKGAgY1VdY-0-2d1bfdf410696f2972927f8a873074a4)
4.标识符
标识符用来给变量、函数和数据类型进行命名,其长度不能超过 31 个字符。标识符可以使用数字0~9、大写英文字母A~Z、小写英文字母a~z(区分字母大小写)和下画线。此外,标识符的首字符不能是数字,而且标识符不能使用保留字,但可以使用中文进行命名,只是字符长度要符合要求。
![](https://epubservercos.yuewen.com/68DF0D/18096060108237406/epubprivate/OEBPS/Images/38909_22_4.jpg?sign=1739285395-iv2smkkSoO4OKKW9EcikZ0DfP3ExV8AB-0-49cf4a3bfd2bb78dfb8fba40a189fdd5)
![](https://epubservercos.yuewen.com/68DF0D/18096060108237406/epubprivate/OEBPS/Images/38909_23_1.jpg?sign=1739285395-53YcMeEbC8ZiW3Wb8ukgRXdRspSdYx93-0-c31a2794897f94faf2b4110e51a5b231)
2.3.2 数据类型
数据类型,顾名思义是给数据指定一个类型,使得数据指向更加精确。我们用一个例子来加深理解,比如,国外产的某品牌汽车有3台,国产的某品牌汽车有4台,汽车品牌就是一个变量名字,汽车产地就是这个变量的数据类型。MQL4语言中数据类型常用的有整型数据类型、浮点数据类型、布尔数据类型、字符串数据类型、日期时间数据类型、颜色数据类型。
1.整型数据类型(int)
整型数据类型可以表示十进制和十六进制的整型数据,例如:
![](https://epubservercos.yuewen.com/68DF0D/18096060108237406/epubprivate/OEBPS/Images/38909_23_2.jpg?sign=1739285395-TOwS9JL7B5SJsMfp3vRd5ODI5nYm7Gpf-0-2b834b2833990e5964c5d16baf271167)
2.浮点数据类型(double)
浮点数据类型由整数部分、小数点和小数部分组成,其中整数部分和小数部分都是一组十进制数字。
![](https://epubservercos.yuewen.com/68DF0D/18096060108237406/epubprivate/OEBPS/Images/38909_23_3.jpg?sign=1739285395-QXzfKUFSL6IrzTaKcaZWv9F6VT5BhOYY-0-f6f4dbce5f3d60874ac66dfc15b549a0)
一个浮点数据(双精度)占用8字节的内存空间。其数值范围为-1.7e308~1.7e308。如果超出这个范围,则视为无效。
3.布尔数据类型(bool)
布尔值用来表示“真”和“假”,还可以用数字1和0进行表示,True和False的书写可以忽略大小写。
![](https://epubservercos.yuewen.com/68DF0D/18096060108237406/epubprivate/OEBPS/Images/38909_23_4.jpg?sign=1739285395-KhudjIvdmmV35qAqpD1EKTcIYrxt2lEG-0-b11da6e2da6085328a68061df83ed0bf)
![](https://epubservercos.yuewen.com/68DF0D/18096060108237406/epubprivate/OEBPS/Images/38909_24_1.jpg?sign=1739285395-kocTyAupMhGMONrOmN7GNtJpVeXbc6Z1-0-b3396b0e388c92abf062ae32dd423f6c)
4.字符串数据类型(string)
字符串数据是用双引号括起来的一串ASCII字符,如“zifu”。
如果需要在字符串中插入一个双引号("),那么在它前面必须使用反斜杠(/)。如果有前置反斜杠,则任何特殊字符都能用在字符串中。字符串长度介于0到255个字符之间,如果超过这个长度,尾部多余的字符将被忽略,编译器也会有相应的提示。
![](https://epubservercos.yuewen.com/68DF0D/18096060108237406/epubprivate/OEBPS/Images/38909_24_2.jpg?sign=1739285395-E1qr9piFyqFaLf6KTXWo6YcK7gPDTKgt-0-4988d1f6ac86c3e79c9815da40286a9d)
5.日期时间数据类型(datetime)
日期时间数据由6个部分的字符组成:年、月、日、时、分、秒。以D开头,用单引号括起来。日期(年、月、日)或者时间(时、分、秒)可以单独使用,或者两者都不用填写也可以表示日期时间数据。日期时间数据的变化范围是1970.1.1~2037.12.31。
![](https://epubservercos.yuewen.com/68DF0D/18096060108237406/epubprivate/OEBPS/Images/38909_24_3.jpg?sign=1739285395-usYvaBESDVnmJ3npL1jsHKNpQxJgrshW-0-ce8b91db489874652e91e94b811237d0)
6.颜色数据类型(color)
颜色数据可以用三种方法表示:字符数据、整型数据和颜色名。颜色名表示某一个特定的颜色。
![](https://epubservercos.yuewen.com/68DF0D/18096060108237406/epubprivate/OEBPS/Images/38909_24_4.jpg?sign=1739285395-xdRe4Cw983UePzqlo1nAyDsiskgxxwYl-0-ac7bfc5bd97bafa7d70d1b2e0f0eddae)
2.3.3 数据运算
我们在用中文表达意思的时候,如果只有名词没有形容词、介词、动词等其他词语,则不能完美地传达出意思。同样,在编程语言中,如果我们只有数据和参量而没有连接它们的纽带,计算机程序也不会识别出你想实现的目标。这个纽带就是我们接下来要介绍的运算符和表达式。运算符连接参量和字符,有了这些运算符的配合,才能正确地完成表达式。在MQL4语言中经常用到的运算符有算术运算符、赋值运算符、关系运算符和逻辑运算符等。
1.算术运算符
主要的算术运算符如表2-2所示。
表2-2
![](https://epubservercos.yuewen.com/68DF0D/18096060108237406/epubprivate/OEBPS/Images/38909_25_1.jpg?sign=1739285395-HjuFO9uX16tDkuFBs35IeQaQjLqbfCrY-0-ed919e9662c89a5f03a9f79af3841b14)
2.赋值运算符
赋值运算符的作用就是把运算结果赋予左边的参量。在MQL4自动化交易编程中常用的赋值运算符如表2-3所示。
表2-3
![](https://epubservercos.yuewen.com/68DF0D/18096060108237406/epubprivate/OEBPS/Images/38909_25_2.jpg?sign=1739285395-Y6v1XPcAtlfWk6ALkhmUGCDCTi3j2q1k-0-58378b27b8277882447cd69368d42a0e)
3.关系运算符
关系运算符连接两个参量,用False和True来表示两个参量之间的逻辑关系。MQL4编程语言常用的关系运算符如表2-4所示。
表2-4
![](https://epubservercos.yuewen.com/68DF0D/18096060108237406/epubprivate/OEBPS/Images/38909_26_1.jpg?sign=1739285395-LgNjH9Wt22Y9gdAOMuZT8NtKzQXYB2i0-0-9cfe643b572f4df3ed8d6f548d1c3ac0)
4.逻辑运算符
逻辑运算符根据表达式的值来返回真值(True)或者假值(False)。MQL4使用3个逻辑运算符,如表2-5所示。
表2-5
![](https://epubservercos.yuewen.com/68DF0D/18096060108237406/epubprivate/OEBPS/Images/38909_26_2.jpg?sign=1739285395-gXYwhzmoTCS8USniO2WccWt4YPrAtv5m-0-417ab2f9e44d54aa82b0fed07dea3ad0)