5 MQL4预定义常量(Predefined variables)

对于每个执行的MQL4程序,一定数量的变量设定可以轻松应对图表中的价格状态:智能交易,脚本或者是客户指标。
资料应用到可变量的模型中来。
可以由预定义的变量分开处理。 这些数据会在开启后应用 RefreshRates()函数更新。

5.1 Ask(做多买入价)

double Ask

对于当前货币对的最新买入价格。使用RefreshRates()函数更新。
参见
MarketInfo().

示例:

if(iRSI(NULL,0,14,PRICE_CLOSE,0)<25)

{

OrderSend(Symbol(),OP_BUY,Lots,Ask,3,Bid-StopLoss*Point,Ask+TakeProfit*Point,

“My order #2”,3,D’2005.10.10 12:30′,Red);

return;

}

5.2 Bars(K线总数)

int Bars

返回图表中的柱数。
参见 iBars().

示例:

int counter=1;


for(int i=1; i<=Bars; i++)


{

Print(关闭[i-1]);

}

5.3 Bid(做空买入价)

double Bid

对于当前货币对的最新卖出价格。使用RefreshRates()函数更新。
参见
MarketInfo().

示例:

if(iRSI(NULL,0,14,PRICE_CLOSE,0)>75)

{

OrderSend(“EURUSD”,OP_SELL,Lots,Bid,3,Ask+StopLoss*Point,Bid-TakeProfit*Point,

“My Order #2”,3,D’2005.10.10 12:30′,Red);

return(0);

}

5.4 Close(收盘价数组)

double Close[]

系列数组包含当前图表每个柱的收盘价格。
系列数组元素被索引入倒序的定单,即从最后一个到第一个。. 当前最后一个柱在数组中的索引为0。图表中的第一个柱的索引为Bars-1.
参见
iClose().

示例:

int handle = FileOpen(“file.csv”, FILE_CSV|FILE_WRITE, “;”);

if(handle>0)

{

// 表格栏标题记录

FileWrite(handle, “Time;Open;High;Low;Close;Volume”);

// 数据记录

for(int i=0; i<Bars; i++)

FileWrite(handle, Time[i], Open[i], High[i], Low[i], Close[i], Volume[i]);

FileClose(handle);


}

5.5 Digits(计价小数位)

int Digits

返回当前货币对的汇率小数位
参见 MarketInfo().

示例:

 Print(DoubleToStr(Close[0], Digits));

5.6 High(最高价数组)

double High[]

系列数组包含当前图表每个柱的最高价格。
系列数组元素被索引入倒序的定单,即从最后一个到第一个。. 当前最后一个柱在数组中的索引为0。图表中的第一个柱的索引为 Bars-1.
参见
iHigh().

示例:

//—- 最大值

i=Bars-KPeriod;

if(counted_bars>KPeriod) i=Bars-counted_bars-1;

while(i>=0)

{

double max=-1000000;

k = i + KPeriod-1;

while(k>=i)

{

price=High[k];

if(max<price) max=price;

k–;

}

HighesBuffer[i]=max;

i–;

}

//—-

5.7 Low(最低价数组)

double Low[]

系列数组包含当前图表每个柱的最低价格。
系列数组元素被索引入倒序的定单,即从最后一个到第一个。. 当前最后一个柱在数组中的索引为0。图表中的第一个柱的索引为 Bars-1.
参见 iLow().

示例:

//—- 最小值


i=Bars-KPeriod;

if(counted_bars>KPeriod) i=Bars-counted_bars-1;

while(i>=0)

{

double min=1000000;

k = i + KPeriod-1;

while(k>=i)

{

price=Low[k];

if(min>price) min=price;

k–;

}

LowesBuffer[i]=min;

i–;

}

//—-

5.8 open(开盘价数组)

double Open[]

系列数组包含当前图表每个柱的开盘价格。
系列数组元素被索引入倒序的定单,即从最后一个到第一个。. 当前最后一个柱在数组中的索引为0。图表中的第一个柱的索引为Bars-1.
参见
iOpen().

示例:

i = Bars – counted_bars – 1;

while(i>=0)

{

double high = High[i];

double low = Low[i];

double open = Open[i];

double close = Close[i];

AccumulationBuffer[i] = (close-low) – (high-close);

if(AccumulationBuffer[i] != 0)

{

double diff = high – low;

if(0==diff)

AccumulationBuffer[i] = 0;

else

{

AccumulationBuffer[i] /= diff;

AccumulationBuffer[i] *= Volume[i];

}

}

if(i<Bars-1) AccumulationBuffer[i] += AccumulationBuffer[i+1];

i–;

}

5.9 Point(点值)

double Point

返回当前图表的点值
参见
MarketInfo().

示例:

OrderSend(Symbol(),OP_BUY,Lots,Ask,3,0,Ask+TakeProfit*Point);

5.10 Time(时间数组)

datetime Time[]

系列数组包含当前图表的每个柱开盘时间。数据像日期时间一样呈现时间,从1979年1月1日零点开始以秒计算。
系列数组元素被索引入倒序的定单,即从最后一个到第一个。当前最后一个柱在数组中的索引为0。图表中的第一个柱的索引为Bars-1.
参见 iTime().

示例:


for(i=Bars-2; i>=0; i–)

{

if(High[i+1] > LastHigh) LastHigh = High[i+1];

if(Low[i+1] < LastLow) LastLow = Low[i+1];

//—-

if(TimeDay(Time[i]) != TimeDay(Time[i+1]))

{

P = (LastHigh + LastLow + Close[i+1])/3;

R1 = P*2 – LastLow;

S1 = P*2 – LastHigh;

R2 = P + LastHigh – LastLow;

S2 = P – (LastHigh – LastLow);

R3 = P*2 + LastHigh – LastLow*2;

S3 = P*2 – (LastHigh*2 – LastLow);

LastLow = Open[i];

LastHigh = Open[i];

}

//—-

PBuffer[i] = P;

S1Buffer[i] = S1;

R1Buffer[i] = R1;

S2Buffer[i] = S2;

R2Buffer[i] = R2;

S3Buffer[i] = S3;

R3Buffer[i] = R3;

}

5.11 Volume(成交量数组)

double Volume[]

系列数组包含当前图表每个柱替克成交量。
系列数组元素被索引入倒序的定单,即从最后一个到第一个。. 当前最后一个柱在数组中的索引为0。图表中的第一个柱的索引为 Bars-1.
参见 iVolume().

示例:


if(i==0 && time0<i_time+periodseconds)

{

d_volume += Volume[0];

if(Low[0]<d_low) d_low = Low[0];

if(High[0]>d_high) d_high = High[0];

d_close = Close[0];

}

last_fpos = FileTell(ExtHandle);

last_volume = Volume[i];

FileWriteInteger(ExtHandle, i_time, LONG_VALUE);

FileWriteDouble(ExtHandle, d_open, DOUBLE_VALUE);

FileWriteDouble(ExtHandle, d_low, DOUBLE_VALUE);

FileWriteDouble(ExtHandle, d_high, DOUBLE_VALUE);

FileWriteDouble(ExtHandle, d_close, DOUBLE_VALUE);

FileWriteDouble(ExtHandle, d_volume, DOUBLE_VALUE);

5.12 _Digits(计价小数位)

_Digits变量存储小数点后的位数,小数点定义了当前图表符号的价格准确性。

5.13 _Point(点值)

_Point变量包含引用货币中当前符号的点大小。

5.14 _LastError(最后一次报错的错误代码)

_LastError变量包含最后一个错误的代码,该错误发生在mql4程序运行期间。它的值可以通过ResetLastError()重置为零。
要获得最后一个错误的代码,还可以使用GetLastError()函数

5.15 _Period(当前图表的时间周期)

_Period变量包含当前图表的时间范围的值。
还可以使用Period()函数。

5.16 _RandomSeed(伪随机数)

用于在生成伪随机整数时存储当前状态。_RandomSeed在调用MathRand()时更改其值。使用MathSrand()设置所需的初始条件。
MathRand()函数接收到的x随机数在每次调用时计算如下:

x=_RandomSeed*214013+2531011;
_RandomSeed=x;
x=(x>>16)&0x7FFF;

5.17 _StopFlag(停止标志)

_StopFlag变量包含mql4程序停止的标志。当客户端试图停止程序时,它将_StopFlag变量设置为true。
要检查_StopFlag的状态,还可以使用IsStopped()函数。

5.18 _Symbol(当前图表货币对名称)

_Symbol变量包含当前图表的符号名。
还可以使用Symbol()函数。

5.19 _UninitReason(初始化失败)

_UninitReason变量包含程序未初始化原因的代码。
通常,该代码是由UninitializeReason()函数获得的。

错误代码常量

说明

REASON_PROGRAM

0

调用了
ExpertRemove()

REASON_REMOVE

1

已经从图表上删除了指标

REASON_RECOMPILE

2

程序被重新编译

REASON_CHARTCHANGE

3

货币对或者时间周期被更改

REASON_CHARTCLOSE

4

图表被关闭

REASON_PARAMETERS

5

用户修改了输入参数

REASON_ACCOUNT

6

更换立刻账户

REASON_TEMPLATE

7

使用新模板

REASON_INITFAILED

8

OnInit()
返回了一个非零值

REASON_CLOSE

9

MT4终端被关闭