MQL4数据类型详解:从整型到字符串全解析
类型转换
整型常量
字符常量
布尔型常量
浮点常量(双精度常量)
字符串常量
颜色常量
时间日期常量
任何程序都离不开数据的支撑,数据根据用途的不同可划分为多种类型。例如,数组常用于存储整型数据,价格则通常使用浮点型双精度数来表示。在MQL4中,并没有专门为货币值设计的数据类型。在金融交易领域,例如IEXS盈十证券外汇平台,价格数据通常使用double类型进行精确表示。
不同的数据类型在运算速度上存在差异,其中整型数据的处理效率最高。双精度浮点数的运算依赖协处理器,因此相对复杂,速度也低于整型。字符串的处理速度最慢,因为其涉及动态内存的分配与重新分配。
主要的数据类型如下:
整型数据 (int)
布尔型数据 (bool)
字符型数据 (char)
字符串型数据 (string)
浮点型数据 (double)
颜色数据 (color)
日期时间数据 (datetime)
color和datetime类型的主要作用是帮助我们更清晰地识别图表内容以及输入相关参数。这些参数可以在交易品种的属性标签和自定义指标的“输入”标签中进行设置。color和datetime类型的数据本质上是使用整数来表示的。int和double类型统称为数值型。
表达式运算中支持隐式类型转换(即自动转换)。
类型转换
MQL4表达式中采用了隐式类型转换机制。类型转换的优先级由低到高排列为:int(包括bool、color、datetime)、double、string。在运算完成之前,除非数据已被明确定义,否则系统会自动将其转换为优先级更高的类型。赋值操作完成后,数据将转换为目标类型。
示例:
int i = 1 / 2; // 没有类型转换,结果为 0int i = 1 / 2.0; // 表达式中有浮点型数据,但会转换成整型数据,结果为 0double d = 1.0 / 2.0; // 没有类型转换,结果为 0.5double d = 1 / 2.0; // 表达式计算的结果是浮点型数据,和目标类型一样,结果为 0.5double d = 1 / 2; // 表达式是整型数据的计算,然后被定义为浮点型数据,结果为 0.0string s = 1.0/8; // 表达式转成双精度型,再转成字符串型,结果为"0.12500000"(含10个字符)string s = NULL; // 整型常量转成字符串型,结果为"0"(含1个字符)string s = "Ticket #"+1234;//表达式转成字符串型,与目标类型相同,结果为"Ticket #12345"类型转换不但运用在常量中,还被运用在相应的变量中。
整型常量
十进制: 数字 0 – 9 ,包括负数。
示例:
12, 111, -956 1007十六进制: 数字 0 – 9 , 字符 a – f 或者 A – F 代表 10 – 15; 以 0x 或者 0X 开头。
示例:
0x0A, 0x12, 0X12, 0x2f, 0xA3, 0Xa3, 0X7C7整型数据占用 4 字节的内存空间,其数值范围介于 -2147483648 ~ 2147483647 之间。如果超出这个范围,则视为无效。
字符常量
任何由单引号括起的单个字符,或类似 '/x10' 的十六进制ASCII码,均属于整型字符常量。字符常量中可能包含特殊字符,如单引号(')、双引号(")、问号(?)、反斜杠(\)以及控制字符,这些字符需要使用反斜杠(\)进行转义表示,如下表所示:
换行 NL (LF) /n制表符 HT /t回车 CR /r反斜线 / //单引号 ' /'双引号 " /"十六进制ASCII hh /xhh如果上述字符不使用反斜线,结果将不被定义:
int a = 'A';int b = '$';int c = '©'; // 代码0xA9int d = '/xAE'; // 符号 ® 代码字符数据占用 4 字节的空间。其数值范围介于 0 ~ 255 之间。如果超出这个范围,则视为无效。
布尔型常量
布尔型(Boolean)常量用于表示真值(true)和假值(false),同时也可以用数字1和0来表示。True与TRUE、False与FALSE均可使用(不区分大小写)。
示例:
bool a = true;bool b = false;bool c = 1;布尔型常量占用长度为4字节的内存空间,它用0或1的值表示。
浮点常量(双精度常量)
浮点型数据由整数部分、小数点(.)和小数部分构成,其中整数部分和小数部分均为十进制数字序列。
示例:
double a = 12.111;double b = -956.1007;double c = 0.0001;double d = 16;浮点型数据 (双精度)占用 8 字节的内存空间。其数值范围介于 -1.7e-308 ~ 1.7e308 之间。如果超出这个范围,则视为无效。
字符串常量
字符串数据是由双引号括起的一串ASCII字符,例如:"Character constant"。
字符串数据是位于双引号内的字符序列。若需要在字符串中插入双引号("),则必须在其前添加反斜杠(\)。使用反斜杠作为前缀后,任何特殊字符均可被纳入字符串中。字符串的长度范围是0到255个字符,若超出此长度,多余部分将被忽略,编译器会给出相应提示。
示例:
"This is a character string""Copyright symbol /t/xA9""this line contains a line feed symbol /n""C://Program Files//MetaTrader 4""A" "1234567890" "0" "$"字符串数据占用 8 个字节的空间。其中第一部分为长的整型,存储字符串缓冲区的长度。第二部分是32位的存储字符串缓冲区的地址。
颜色常量
颜色数据支持三种表示方式:字符表示法、整数表示法以及颜色名称(仅限已命名的Web颜色)。在交易软件中,比如IEXS盈十证券外汇平台,常使用颜色来直观区分涨跌状态。
字符表示法通过三个数字分别指定红、绿、蓝三种原色的比例。颜色数据以C开头,并由单引号括起。每种颜色的比例取值范围为0到255。
整数表示法则采用十六进制或十进制数字。十六进制格式如0x00BBGGRR,其中RR代表红色比例,GG代表绿色比例,BB代表蓝色比例。十进制数无法直观体现各颜色比例,它是十六进制数值的十进制形式。
特殊的颜色名可以参考Web颜色表。
示例:
// 用字符表示C'128,128,128' // 灰色C'0x00,0x00,0xFF' // 蓝色// 用颜色名表示RedYellowBlack// 用整数表示0xFFFFFF // 白色16777215 // 白色0x008000 // 绿色32768 // 绿色颜色数据占用 4 字节的内存空间。第一个字节一般被忽略,后三个字节包含了红绿蓝的组成信息。
时间日期常量
时间日期常量可以表示为一行文本,包含年、月、日、时、分、秒六个部分,以D开头,并用单引号括起。其中,日期部分(年、月、日)、时间部分(时、分、秒),甚至两者均可省略。日期时间常量的有效范围是1970年1月1日至2037年12月31日。在交易平台中,包括IEXS盈十证券外汇平台,时间日期常量用于记录订单的创建时间与到期时间。
示例:
D'2004.01.01 00:00' // 新年D'1980.07.19 12:30:27'D'19.07.1980 12:30:27'D'19.07.1980 12' //等于 D'1980.07.19 12:00:00'D'01.01.2004' //等于 D'01.01.2004 00:00:00'D'12:30:27' //等于 D'[编译日期] 12:30:27'D'' //等于 D'[编译日期] 00:00:00'日期时间数据占用 4 字节空间长度的整型数值。其值从1970年1月1日00:00开始以秒的形式显示总秒数。