一、概述
在MQL4编程中,变量的声明和使用是编写代码的基础环节,也是一个至关重要的步骤。本文将详细介绍MQL4编程中的变量类型、如何声明和使用这些变量、复合类型、数组、访问说明符以及存储类别等重要知识点。
二、基本变量类型
1、简单类型:
MQL4中的简单变量类型包括:
- 整型:char, short, int, long, uchar, ushort, uint, ulong;
- 颜色型:color,代表RGB色彩;
- 日期时间型:datetime,以1970年1月1日零点为起点,以秒为单位的无符号整数;
- 布尔型:bool,表示真(true)或假(false);
- 双精度浮点型:double;
- 单精度浮点型:float;
- 字符串型:string。
举例:
string szInfoBox;
int nOrders;
double dSymbolPrice;
bool bLog;
datetime tBegin_Data = D'2004.01.01 00:00';
color cModify_Color = C'0x44,0xB9,0xE6';
2、复合类型:
复合类型是由其他类型构成的复杂数据类型,如结构。
举例:
struct MyTime
{
int hour; // 0-23
int minute; // 0-59
int second; // 0-59
};
MyTime strTime; // 变量strTime的类型是已声明的结构MyTime
注意,必须先声明结构类型,才能声明该结构类型的变量。
三、数组
数组是同一类型数据的索引序列:
int a[50]; // 一维数组,包含50个整数.
double m[7][50]; // 二维数组,包含7个数组,每个数组包含50个数字.
MyTime t[100]; // 数组,包含100个MyTime类型的元素
数组的索引必须是整数,最多允许四维数组。数组元素的编号从0开始,一维数组的最后一个元素编号比数组大小小1,例如,一个包含50个整数的数组的最后一个元素将显示为a[49]。这同样适用于多维数组:每一维度都从0到该维度大小-1进行索引,二维数组的最后一个元素将显示为m[6][49]。
注意,静态数组不能表示为时间序列,也就是说不能对其应用ArraySetAsSeries()函数。如果想要像访问时间序列一样访问数组,可以使用动态数组对象。
四、访问说明符
访问说明符定义编译器如何访问变量、结构或类的成员。
例如,const说明符声明一个变量为常量,在运行时不能改变此变量。在声明时允许对变量进行一次初始化。
举例:
int OnCalculate (const int rates_total, // 输入时间序列的大小
const int prev_calculated, // 在前一次调用中处理的条形图数量
const datetime& time[], // 时间
const double& open[], // 开盘价
const double& high[], // 最高价
const double& low[], // 最低价
const double& close[], // 收盘价
const long& tick_volume[], // Tick Volume
const long& volume[], // 实际交易量
const int& spread[] // 点差
);
五、存储类别
存储类别有三种:静态(static)、输入(input)和外部(extern)。这些存储类别的修饰符明确指示编译器,相应的变量在全局内存池中预先分配。此外,这些修饰符还指示变量数据的特殊处理。如果在局部级别声明的变量不是静态的,那么该变量的内存将在程序栈中自动分配。非静态数组的内存也会在超出声明该数组的块的可见区域时自动释放。