上文大白介绍了MQL5中如何使用单行/双行注释,本文大白MQL5编程教学将同大家一起学习标识符。
MQL5标识符是用于表示变量、函数、对象、常量等程序元素的名称。它们在程序中起着非常重要的作用,可以帮助程序员更好地组织和管理代码。
在MQL5中,标识符的命名规则如下:
以下示例中的标识符分别为 myVariable、MyFunction、MyClass.
// 定义一个整型变量
int myVariable = 0;
// 定义一个函数
void MyFunction(double parameter)
{
// 函数体
};
// 定义一个对象
class MyClass
{
// 类成员
};
三、MQL5标识符不能和保留字冲突
保留字是编程语言中具有特殊含义的关键字,不能用作标识符。如果标识符与保留字相同,则会导致编译错误。
例如,下面的代码中,使用了保留字作为标识符,导致编译错误:
double if = 1.0; // if是保留字,不能用作标识符
正确的做法是选择其他的标识符,例如:
double x = 1.0;
在MQL5中,有很多保留字,例如if、for、while等等。因此,在命名变量、函数或者对象时,需要避免使用这些保留字作为标识符,以免造成编译错误。
MQL5中的数据类型指的是在代码中声明变量时所使用的类型,MQL5中有以下几种数据类型:
整型(int):用于存储整数,包括正数、负数和零。例如:int variable_name;
双精度浮点型(double):用于存储浮点数,包括小数和整数。例如:double variable_name;
布尔型(bool):用于存储布尔值,即true或false。例如:bool variable_name;
字符串型(string):用于存储字符串,即一系列字符。例如:string variable_name;
颜色型(color):用于存储颜色,表示为RGB值。例如:color variable_name;
日期时间型(datetime):用于存储日期和时间。例如:datetime variable_name;
公共访问分类符(public)可以让变量或函数在整个程序中都可见和访问,在MQL5中,使用public关键字来定义公共成员
私有访问分类符(private)允许变量或函数只在类内部可见和访问。在MQL5中,使用private关键字来定义私有成员。
受保护访问分类符(protected)允许变量或函数在类内部和派生类中可见和访问。在MQL5中,使用protected关键字来定义受保护成员。
虚函数访问分类符(virtual)用于实现多态性。在MQL5中,使用virtual关键字来声明虚函数。
....
存储类型
extern用于声明变量并表示它是在外部定义的。在MQL5中,我们通常使用extern关键字来声明一些在主程序以外定义的变量,这些变量可以在主程序中被访问和使用。例如:
extern double Lots=0.01;
在上面的例子中,我们声明了一个名为Lots的变量,并将其初始化为0.01。由于我们使用了extern关键字,所以这个变量可以在主程序以外的其他文件中被访问和使用。
input用于声明一个参数,并表示它可以由用户在程序启动时输入。在MQL5中,我们通常使用input关键字来声明一些需要在程序运行时由用户输入的参数,例如:
input double StopLoss=50.0;
在上面的例子中,我们声明了一个名为StopLoss的参数,并将其初始化为50.0。由于我们使用了input关键字,所以这个参数可以在程序启动时由用户输入,而且用户可以通过修改这个参数的值来改变程序的行为。
static用于声明一个变量并表示它在程序执行期间保持不变。在MQL5中,我们通常使用static关键字来声明一些需要在程序执行期间保持不变的变量,例如:
static int Count=0;
在上面的例子中,我们声明了一个名为Count的变量,并将其初始化为0。由于我们使用了static关键字,所以这个变量在程序执行期间保持不变,即使它被声明在一个函数内部,在函数执行完毕后也不会被销毁。
操作符
break用于中断当前的循环语句(for、while或do-while)。在MQL5代码中,我们通常使用break关键字来在满足某个条件时提前退出循环,例如:
for(int i=0;i<10;i++){if(i==5){break;}Print(i);}
在上面的例子中,当变量i等于5时,break语句被执行,循环就会被中断,输出结果为0、1、2、3、4。
return用于从当前函数中返回一个值,并结束函数的执行。在MQL5代码中,我们通常使用return关键字来将某个值作为函数的返回值,例如:
int Add(int a,int b){return a+b;}
在上面的例子中,我们定义了一个名为Add的函数,它接受两个整数参数a和b,并将它们相加作为返回值。当我们调用这个函数时,它会返回a和b的和。
offsetof是一种宏,用于获取结构体中指定成员的偏移量。在MQL5代码中,我们通常使用offsetof宏来获取某个成员在结构体中的偏移量,例如:
struct Position{double price;int volume;datetime openTime;};int main(){int offset=offsetof(Position,volume);Print(offset);}
在上面的例子中,我们定义了一个名为Position的结构体,它包含了三个成员:price、volume和openTime。在main函数中,我们使用offsetof宏获取了成员volume在结构体中的偏移量,并将结果输出。在这个例子中,偏移量为8,表示成员volume在结构体中的地址相对于结构体地址的偏移量为8个字节。
其他
template用于定义通用的代码模板。在MQL5代码中,我们通常使用template来定义一些通用的函数或类,以便在多个地方复用。例如:
在上面的例子中,我们定义了一个名为Max的函数模板,它接受两个同类型的参数a和b,并返回其中的较大值。在main函数中,我们使用Max模板来获取a和b的最大值,并将结果输出。
namespace用于定义命名空间。在MQL5代码中,我们通常使用namespace来避免不同模块之间的命名冲突,例如:
在上面的例子中,我们定义了一个名为MyNamespace的命名空间,它包含了一个名为value的变量和一个名为PrintValue的函数。在main函数中,我们使用MyNamespace::PrintValue来调用这个函数,并输出变量value的值。
#property是一种预处理器指令,用于定义指定的属性。在MQL5代码中,我们通常使用#property来定义一些与EA相关的属性,例如:
#property strict;#property version;#property copyright;#property link;
在上面的例子中,我们使用#property指令来定义了四个属性:strict、version、copyright和link。这些属性可以在EA编译时被访问,并用于EA的相关功能。