第四章 预定义变量
每个可执行的MQL5程序,都支持一组预定义的变量,这反映了一个MQL5程序(EA交易程序、脚本或自定义指示器)启动时的当前价格图表的状态。 在启动MQL5程序之前,客户端设置预定义变量的值。预定义的变量是常量,不能在MQL5程序中更改。作为例外,有一个特殊的变量 _LastError,它可以由ResetLastError函数重置为0。
变量 | 值 |
---|---|
_AppliedTo | _AppliedTo变量可以找出用于指标计算的数据类型 |
_Digits | 小数位数字 |
_Point | 在引用货币中当前交易品种的大小 |
_LastError | 后的错误代码 |
_Period | 前表格的时间表 |
_RandomSeed | 假随机整数生成器的当前状态 |
_StopFlag | 停止标记程序 |
_Symbol | 当前图表的交易品种名称 |
_UninitReason | 阻止初始化原因代码 |
_IsX64 | _IsX64变量可以找出运行MQL5应用程序的程序端的位元版本 |
预定义的变量不能在库中定义。一个库使用这些变量,需要在调用库的程序中定义这些变量。
int _AppliedTo _AppliedTo变量可以找出用于指标计算的数据类型:
数据类型 | 含义 | 用于指标计算的数据描述。 |
---|---|---|
― | 0 | 这个指标使用第二个OnCalculate()调用表格 - 计算的数据不由某个缓冲区或数据数组指定 |
Close | 1 | 收盘价 |
Open | 2 | 开盘价 |
High | 3 | 最高价 |
Low | 4 | 最低价 |
Median Price(HL/2) | 5 | 中间价 = (High+Low)/2 |
Typical Price(HLC/3) | 6 | 典型价格 = (High+Low+Close)/3 |
Weighted Price(HLCC/4) | 7 | 加权价格= (Open+High+Low+Close)/4 |
指标数据前值 | 8 | 该指标之前,图表上启用的指标数据。 |
第一个指标数据 | 9 | 图表上最先启用的指标数据 |
指标句柄 | 10+ | 使用指标句柄传递到iCustom()函数的指标数据。_AppliedTo值包含指标句柄 |
例如:
//+------------------------------------------------------------------+
//| 自定义指标初始化函数 |
//+------------------------------------------------------------------+
int OnInit()
{
//--- 指标缓冲映射
SetIndexBuffer(0,Label1Buffer,INDICATOR_DATA);
// 获得用于指标计算的数据类型
Print("_AppliedTo=",_AppliedTo);
Print(getIndicatorDataDescription(_AppliedTo));
//---
return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
//| 用于指标计算的数据描述 |
//+------------------------------------------------------------------+
string getIndicatorDataDescription(int data_id)
{
string descr="";
switch(data_id)
{
case(0):descr="It's first type of OnCalculate() - no data buffer";
break;
case(1):descr="Indicator calculates on Close price";
break;
case(2):descr="Indicator calculates on Open price";
break;
case(3):descr="Indicator calculates on High price";
break;
case(4):descr="Indicator calculates on Low price";
break;
case(5):descr="Indicator calculates on Median Price (HL/2)";
break;
case(6):descr="Indicator calculates on Typical Price (HLC/3)";
break;
case(7):descr="Indicator calculates on Weighted Price (HLCC/4)";
break;
case(8):descr="Indicator calculates Previous Indicator's data";
break;
case(9):descr="Indicator calculates on First Indicator's data";
break;
default: descr="Indicator calculates on data of indicator with handle="+string(data_id);
break;
}
//---
return descr;
}
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
另见
ENUM_APPLIED_PRICE
int _Digits
_Digits变量 保存的是小数点后的位数,它定义当前图表交易品种的报价精度
您还可以使用 Digits() 函数。
double _Point
_Point变量保存的是货币报价中当前交易品种的点值大小
您还可以使用 Point() 函数。
在MQL5程序运行时,如果发生任何错误, _LastError 变量保存的是最后一次的错误代码,使用 ResetLastError() 值能将此变量的值重设成0。
获得最后一次错误的代码,可以使用 GetLastError() 函数。
int _Period
_Period变量保存当前图表时间框架的值。
您还可以使用 Period() 函数。
相关参考
PeriodSeconds , 图表时间表 , 日期和时间 , 对象可见性
_RandomSeed
在生成伪随机整数时存储当前状态的变量。_RandomSeed在调用MathRand()时更改其值。使用MathSrand()设置所需的初始条件。
由MathRand()函数接收的x随机数按如下方式计算:
x=_RandomSeed*214013+2531011;
_RandomSeed=x;
x=(x >> 16)&0x7FFF;
2
3
相关参考
MathRand(), MathSrand(), 整数类型
bool _StopFlag
_StopFlag变量保存MQL5程序停止标帜,当客户端想要停止程序,设置 _StopFlag 变量为真(true)。
为了检测_StopFlag的状态,你可以使用 IsStopped() 函数。
string _Symbol
_Symbol变量保存当前图表的交易品种名称。
您还可以使用 Symbol() 函数。
int _UninitReason
_UninitReason变量包含程序 不能初始化 原因的代码。
通常,这段代码是由UninitializeReason()函数获得的。
int _IsX64
_IsX64变量可以找出运行MQL5应用程序的程序端的位元版本:_IsX64=0用于32位程序端,_IsX64!=0 用于64位程序端。
此外,还可以使用TerminalInfoInteger(TERMINAL_X64)函数。
例如:
// 检查程序运行的程序端
Print("_IsX64=",_IsX64);
if(_IsX64)
Print("Program ",__FILE__," is running in the 64-bit terminal");
else
Print("Program ",__FILE__," is running in the 32-bit terminal");
Print("TerminalInfoInteger(TERMINAL_X64)=",TerminalInfoInteger(TERMINAL_X64));
2
3
4
5
6
7
另见 MQLInfoInteger, 输入函数 (#import)