MQL5关键知识点总结一.docx
- 文档编号:29547067
- 上传时间:2023-07-24
- 格式:DOCX
- 页数:16
- 大小:204.88KB
MQL5关键知识点总结一.docx
《MQL5关键知识点总结一.docx》由会员分享,可在线阅读,更多相关《MQL5关键知识点总结一.docx(16页珍藏版)》请在冰豆网上搜索。
MQL5关键知识点总结一
MQL5关键知识点总结
(一)
薛辉原创
知识点颜色说明:
01、不同字体表示一般级别的知识点。
02、加黑字条表示中等级别的知识点。
03、红色字体表示高级别知识点。
04、红色加黑字条表示极其重要、易出错知识点。
0001、静态库的功能还是有的。
只是写法和过去有些不同了。
函数定义时需要使用export
关键词输出。
0002、如何把类包含在静态库中还不清楚,MQL5示例代码中没有提供介绍。
0003、静态库文件编译后的EX5文件必须放在library目录下。
0004、头文件中必须引入ex5文件,并且必须在“#import”之间导入函数名称。
0005、MT5的安装目录下有MQL.EXE程序这个程序负责编译MQL5应用程序。
0006、MQL.EXE程序既可以编译程序生成可执行文件,也可以只检查语法是否准确。
检查语
法节约很多时间。
0007、Bases目录下面主要是保存各种历史数据。
0008、历史数据按照不同服务器来源放在不同目录下面。
0009、历史数据又根据不同交易品种放在不同目录下。
0010、历史数据似乎是以年为单位保存在*.hcc文件中。
0011、*.hcc文件应该是一种经过压缩的文件,体积很小。
一般单纯数据文件比较好压缩。
0012、logs目录下以日期为单位记录重大事件。
0013、metaeditor.log文件记录编辑器的一些重要事件。
0014、Profiles目录应该是一些配置文件。
0015、Sound目录下面是一些声音文件。
0016、tester目录下保存的是测试用数据。
0017、MQL5目录是最重要的程序目录。
0018、EA系统、脚本、指标、包含文件、库文件都在这个目录下。
这个目录显然应该定期
备份的。
0019、MT4平台对应的文件名直接就是expert,EA程序直接就放在该目录下面。
0020、MQL5\Experts提供了一些EA系统的源代码,对于学习EA开发帮助非常大。
不过不
适合初学者。
0021、MQL5\Include分成了多个文件夹。
从文件夹的名字就可以看出来属于不同的功能类
别。
0022、Include\Arrays目录包含和数组处理相关的很多类的定义和实现。
不同的数组元素类
型使用不同的文件。
0023、Include\ChartObjects目录下主要保存图表对象相关的类定义和实现。
0024、Include\Charts目录下保存图表相关文件的定义和实现。
0025、Include\Expert目录非常重要,有很多和EA系统开发类定义和实现。
0026、Include\Expert目录下又有金钱、交易、Trailing等子目录。
0027、Include\Files目录下有文件处理相关的类定义及实现。
0028、Include\Indicators目录下的类定义和实现同技术指标相关。
0029、Include\Strings字符串相关处理类在这个目录下。
0030、Include\Trade目录下有大量账户信息、交易信息、订单信息、交易历史信息相关的类
定义和实现。
0031、MQL5中依然大量支持MQL4中的函数,并新增了很多新的强大的函数。
0032、MQL5的底层依然是普通的库函数。
通过\Include目录下的大量mqh头文件封装了很
多类的定义及实现。
0033、MQL5中使用标识符给变量和函数进行命名,长度不能超过31个字节。
0034、标示符可以使用数字0-9、拉丁字母大写A-Z和小写a-z(大小写有区分的)还有下划线
(_)。
0035、标示符的首字母不可以是数字并且标识符不能和保留字冲突。
0036、数据类型的关键词有:
0037、访问控制类关键词有:
0038、存储控制类关键词有:
0039、操作类关键词有:
0040、其他关键词有:
0041、同MQL4相比MQL5的整数类型新增了:
short、ushort、uint、long、ulong等几种类
型。
0042、日期时间型是为存储日期时间型预留的,开始日期是1970年1月1日,占8字节
内存。
0043、标准C++中没有专门的日期时间类型数据,这是MQL4、MQL5语言中的特例。
0044、日期时间型常量可被当做数字串,由6个部分的字符组成:
年、月、日(或是日、月、
年)、时、分、秒。
0045、日期时间数据声明时以D开头,用单引号括起。
0046、日期时间类型数据的表示方法:
D'2004.01.0100:
00'//新年
D'1980.07.1912:
30:
27'
D'19.07.198012:
30:
27'
D'19.07.198012'//等同于D'1980.07.1912:
00:
00'
D'01.01.2004'//等同于D'01.01.200400:
00:
00'
D'12:
30:
27'//等同于D'[编辑日期]12:
30:
27'
D''//等同于D'[编辑日期]00:
00:
00'
0047、日期时间类型的终值在:
3000年12月31日。
0048、颜色类型数据用于存储颜色信息的,占用4个字节。
0049、颜色类型数据的第一个个字节忽略不计,其他3个字节包括红绿蓝3个数据。
0050、颜色类型数据也是C++中没有定义的一类数据。
MQL5定义此类数据主要是为了方便
绘制各种图形。
0051、颜色数据可以用三种方法表示:
字符数据、整型数据或者是颜色名。
0052、字符数据的表达方法是用三个数字来表示三种主要颜色:
红、绿、蓝的比例。
0053、字符数据以C开头,用单引号括住。
数字的值在0~255之间按比例选取。
0054、整数数据的表达方法使用十六进制或十进制数字。
0055、十六进制数字如:
0x00BBGGRR,其中RR是红色元素的比例,GG是绿色的比例,
BB是蓝色的比例。
0056、十进制数不能直接体现红绿蓝的比例,而是十六进制数字的十进制表示方式。
0057、布尔类型是用来存储true或者false的逻辑值的,它们的数字表示法分别是1和0。
0058、枚举类型数据是一种重要的数据集合。
0059、MQL4不支持枚举类型,而MQL5支持此种类型。
0060、枚举类型的一般定义:
enumnameofenumerabletype
{
listofvalues
};
该值列表是分割逗号命名的标识符常量列表。
0061、枚举类型的实例:
enummonths//已命名常量的计算
{
January,
February,
March,
April,
May,
June,
July,
August,
September,
October,
November,
December
};
0062、真实型(或浮点型)数据是带有小数的数据类型。
0063、在MQL5语言里,浮点型数据有两种类型。
0064、在内存中实型(real)数据的表示方法由IEEE754标准规定。
它并不依赖平台、操作系统
和程序语言。
0065、浮点型和双精度类型数据的对比表格:
0066、双精度类型的含义是为了表示浮点型数据的双倍准确度。
0067、在大多数情况下双精度型是最方便的,浮点型数据的精密度不够高。
0068、双精度和浮点数据定义示例:
doublea=12.111;
doubleb=-956.1007;
floatc=0.0001;
floatd=16;
0069、双精度数据保存时依然存在误差,不要直接比较两个双精度数是否相等。
0070、字符串数据用于存储文本串。
0071、文本串是由字符组成,且最后一位为0的字符序列。
0072、每串常数分配给一个变量,每串数据都用双引号引出。
0073、储存字符串的表达式占用8字节的结构。
0074、结构中的第一个元素是intbuf_len型的整数,它包括分配给每串的字符长度。
0075、结构的第二个元素是buf_ptr结构,有32点指向缓冲区的字符串,在缓冲区的右
边有各种str_len型字符串,包括字符串的长度(字符串中字符的数量直到0)。
0076、结构体可以包含任何类型的元素(除了空型)。
0077、因此结构体组合了不同类型,但逻辑上相关成员变量。
0078、结构体是MQL5引入的新复合数据类型,MT4中没有此类型。
0079、定义结构类型数据类型:
structstructure_name
{
elements_description
};
0080、结构体数据类型定义示例:
structtrade_settings
{
ucharslippage;//许可的下降值-1字节大小
charreserved1;//跳过1字节
shortreserved2;//跳过2字节
intreserved4;//跳过另4个字节。
确保定位8字节界限
doubletake;//固定利润价格值
doublestop;//受保护的止损价格值
};
0081、类和结构体有很多形似和不同的地方,下面从几个方面对比。
0082、类在声明中使用关键字class。
0083、即使在类中没有虚函数,类对象总是有一个虚函数图表。
0084、结构体没有虚函数。
0085、结构类没有虚函数
0086、构造函数是一类有特殊功能的函数。
0087、当结构体或类的一个对象生成时构造函数自然调用。
0088、也用来初始化类的成员。
0089、MQL5的构造函数不含输入参数。
0090、因此每一类都只有一个构造函数。
(不能依靠不同类型、个数的参数来实现函数重载。
)
0091、析构函数是一种特殊功能的函数,当类对象被删除时自动调用。
0092、析构函数的名称用波浪字符(~)加class类名实现。
0093、允许转换的数据类型格式:
0094、箭头指明表示转换方向,期间没有任何损失信息。
0095、布尔型可以取代字符类型(只占用1字节)。
0096、颜色型可以取代整型(4字节),日期时间型可以取代长型(占用8字节)。
0097、四条灰色虚线,也带有箭头可以进行转换,但是会出现精度缺失的情况。
0098、如果两个数据进行数值运算,在执行操作前需要按照下表的先后顺序,把低类型转化
成高类型。
0099、数值类型调整转换的顺序为:
0100、在MQL5中可以动态创造复杂类型的对象。
0101、new()创建一个新的对象,返回结果是一个描述符。
该描述符占用8个字节的空间。
0102、MyObject*hobject=newMyObject();
0103、与C++不同的是:
上述示例变量hobject并不指向内存,只是目标的描述符号。
0104、在MQL5中简单类型参数可以通过传值或者传引用来传送。
0105、而复合类型参数经常通过引用来传递。
0106、若要使编译器了解参数是通过引用传送,需要在参数前加上&符号。
0107、通过引用传送参数意味着传送变量地址。
0108、这就是通过引用传送的参数的所有改变能够马上在变量源中反映出来的原因。
0109、使用通过引用传送的参数,一个函数可以同时得出几种结果。
0110、因为输入的参数也可以被函数修改得到计算结果。
0111、而普通传值函数只能通过返回值得到结果。
0112、为防止引用传送的参数改变,需要使用常量修饰符:
const。
0113、有一些数字和字符的组合非常重要它们被称为运算符。
0114、运算符示例:
0115、运算符应用在表达式中实现特定的作用。
0116、需要特别注意标点符号如圆括号、方括号、逗号、冒号、分号。
0117、运算符,标点符号,空格用于分割语句的不同部分。
0118、MQL5中赋值操作符在一个表达式中可以使用多次。
y=x=3;
0119、连续赋值在C++中允许但在MQL4中不允许。
0120、在MQL5中每个函数都有其执行范围。
0121、例如Print()系统函数可以在全局范围使用。
又import导入函数后使用。
0122、类的成员函数用在类的范围内。
0123、范围解析操作语法如下:
[Scope_name]:
:
Function_name(parameters)
0124、MQL5中import可以引入*.ex5中的函数。
也可以引入*.dll中的函数。
0125、#import引入库文件之后,就在之下写出引入的函数名。
0126、在一个库中的函数被全部引入之后应该使用:
#import作为结束符。
0127、通过import引入外部动态链接库中的函数示例:
#import"kernel32.dll"
intGetLastError(void);
#import
0128、获得数据类型大小或者任何类型数据对象大小的运算:
sizeof。
0129、使用sizeof()运算可以确定标识符或者类型的大小。
0130、sizeof()的一般用法为:
sizeof(expression)。
0131、任何标识符或者类型名都可以放在括号中用作表达式。
0132、注意空类型名不可以使用。
0133、sizeof()不属于二进制,也不是函数名。
0134、如果表达式为静态数组名,那么结果就是整个数组大小。
0135、如果表达式是动态数组名,结果就是动态数组对象大小。
0136、当sizeof用在结构体名、类型名或者结构体变量、类型标识符时结果就是结构或者类
的真实大小。
0137、返回操作符终止当前函数操作返回控制访问程序。
0138、表达式计算结果返回调用函数。
0139、表达式可以包括返回操作符。
0140、需要选择时使用if-else操作符。
0141、语法形式如下:
0142、如果表达式是真实的,操作符1执行,操作符2不执行。
如果表达式是错误的,操
作符2被执行。
0143、if操作符else部分可能被忽略。
0144、三进制操作符一般形式如下:
expression1?
expression2:
expression3
0145、对于第一个操作-"expression1"-任何表达式在布尔型中值都可以用。
0146、如果结果是true,那么第二个操作的操作符,例如"expression2",就被执行。
0147、如果第一操作是false,第三操作-"expression3"-就被执行。
0148、三进制操作符在C++中支持,MQL4中不支持,MQL5才提供支持。
0149、switch-case-default是一种重要的分支结构。
0150、switch后变量和case相应表达式值比较。
判断满足哪个条件,就进入相应的分支中。
0151、switch后面的表达式操作符必须是整数类型。
0152、每一个case分支结构运行后并不会直接跳出该结构。
如果要求跳出这个结构需要使
用:
break命令。
0153、如果希望多个条件中任意一个满足时执行相关代码则无需使用break命令。
0154、default:
指令是在所有case条件均无法满足时使用的命令。
0155、while()指令多用于根据逻辑表达式决定是否运行。
0156、while()指令的一般形式为:
while(expression)
operator;
0157、如果表达式为true,后面的指令循环执行直至表达式变成false。
0158、所以在while的循环体中必须要有修改表达式的语句。
0159、for循环一般由三个表达式和一个执行操作符组成。
0160、for循环的一般结构为:
0161、用表达式1Expression来定义初始变量。
0162、当表达式2Expression2为真的时候执行操作运算符的内容。
0163、for在每次循环结束后执行表达式3Expression3的内容。
0164、如果true运算符的内容将被执行。
0165、for循环重复执行直至Expression2变为false。
0166、for操作符中可以缺少任何三个或者全部三个表达式
0167、但是分隔它们的分号”;”一定不能省略。
0168、如果表达式2省略则意味着不变的true。
0169、for(;;)操作符是持续循环与while
(1)操作符一样。
0170、每一个表达式1或者3都由几个逗号','组成的表达式构成。
0171、for和while从起点循环检测终止,不在循环末端。
0172、第三种循环操作符do-whileo每次循环重复后在最后检测终止状态。
0173、do-while循环的一般结构为:
0174、break命令终止最近外部嵌入操作符。
0175、new操作符自动创建一个相应大小的对象。
0176、new会调用对象构造函数并回转已经创建的对象描述符。
0177、失败的情况下操作符返回一个与常量NULL相比较的null描述符。
0178、new操作符仅能用于类对象。
0179、new操作符不能应用于结构体。
0180、new操作符不能用于创建对象数组。
0181、delete操作符删除通过new操作符创建的对象。
0182、delete将会调用类的析构函数并释放由对象占据的内存。
0183、通常情况下函数名反映它的作用。
0184、一般说来,一个程序中包括各种专用函数名称标识符。
0185、有时不同的函数具有相同的功能。
0186、例如,计算双精度数数组的平均值的函数,也可有操作整数数组。
0187、它们都可以称为数组平均函数AverageFromArray()。
0188、函数重载就是一个函数定义多个数值。
0189、根据函数接收的自变量类型选择特定的值。
0190、函数重载有很重要的意义,过去不同的参数必须使用不同的函数名才能区分。
0191、函数重载可以使用同一个函数名,大大降低了开发的繁杂性。
0192、函数重载功能是C++的基本功能。
但MQL4中未提供此项功能,MQL5才引入进来。
0193、描述外部的ex5函数库的指令为:
#import"lib.ex5"
doubleround(doublevalue);
#import
0194、通过MQL5输出后置修饰符发布的函数可以用在其他MQL5程序中。
0195、修饰符名称为:
export。
0196、导出函数的用法为:
intFunction()export
{
}
0197、该修饰符使编译器将函数添加进ex5文件导出的EX5函数表格中。
0198、只有带这个修饰符的函数可以从其他MQL5程序中接入。
0199、MQL5语言提供预定义事件处理。
0200、处理这些事件的函数由MQL5程序确定;函数名,返回类型,参数组成(有几个参数
情况下)以及类型必须严格遵照事件处理程序函数。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- MQL5 关键 知识点 总结