第四章 预定义变量

每个可执行的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;
  }
1
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;
1
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));
1
2
3
4
5
6
7

另见 MQLInfoInteger, 输入函数 (#import)