EA编程常用函数详解:基础篇

在MQL4程序中,每个执行的智能交易系统、脚本或客户指标,都会使用一定数量的预定义变量来轻松应对图表中的价格状态。

这些变量包含了当前图表的基础数据,并且可以应用于可变量的模型中。

对于预定义的变量,程序会自动分开处理,并在开启后通过RefreshRates()函数进行更新,确保数据的时效性。

以下为常用函数和变量的详细说明:

Ask

Bars

Bid

Close

Digits

High

Low

Open

Point

Time

Volume

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;

}

Bars

int Bars

返回当前图表中的柱数(即K线数量)。

参见iBars()函数。

示例:

int counter=1;

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

{

Print(关闭[i-1]);

}

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);

}

Close

double Close[]

该系列数组用于存储当前图表每个柱的收盘价格。

系列数组的元素按照倒序索引,即从最后一个柱到第一个柱。其中,当前最后一个柱的索引为0,而图表中第一个柱的索引为Bars-1。

参见iClose()函数。

示例:

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

if(handle0)

{

// 表格栏标题记录

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

// 数据记录

for(int i=0; i

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

FileClose(handle);

}

Digits

int Digits

返回当前货币对的汇率小数位(即价格精度)。

参见MarketInfo()函数。

示例:

Print(DoubleToStr(Close[0], 小数位));

High

double High[]

该系列数组用于存储当前图表每个柱的最高价格。

系列数组的元素按照倒序索引,即从最后一个柱到第一个柱。其中,当前最后一个柱的索引为0,而图表中第一个柱的索引为Bars-1。

参见iHigh()函数。

示例:

//---- 最大值

i=Bars-KPeriod;

if(counted_barsKPeriod) i=Bars-counted_bars-1;

while(i=0)

{

double max=-1000000;

k = i + KIG markets官网Period-1;

while(k=i)

{

price=High[k];

if(max

k--;

}

HighesBuffer=max;

i--;

}

//----

Low

double Low[]

该系列数组用于存储当前图表每个柱的最低价格。

系列数组的元素按照倒序索引,即从最后一个柱到第一个柱。其中,当前最后一个柱的索引为0,而图表中第一个柱的索引为Bars-1。

参见iLow()函数。

示例:

//---- 最小值

i=Bars-KPeriod;

if(counted_barsKPeriod) i=Bars-counted_bars-1;

while(i=0)

{

double min=1000000;

k = i + KPeriod-1;

while(k=i)

{

price=Low[k];

if(minprice) min=price;

k--;

}

LowesBuffer=min;

i--;

}

//----

Open

double Open[]

该系列数组用于存储当前图表每个柱的开盘价格。

系列数组的元素按照倒序索引,即从最后一个柱到第一个柱。其中,当前最后一个柱的索引为0,而图表中第一个柱的索引为Bars-1。

参见iOpen()函数。

示例:

i = Bars - counted_bars - 1;

while(i=0)

{

double high = High;

double low = Low;

double open = Open;

double close = Close;

AccumulationBuffer = (close-low) - (high-close);

if(AccumulationBuffer != 0)

{

double diff = high - low;

if(0==diff)

AccumulationBuffer = 0;

else

{

AccumulationBuffer /= diff;

AccumulationBuffer *= Volume;

}

}

if(i

i--;

}

double Point

返回当前图表的点值(即最小价格变动单位)。

参见MarketInfo()函数。

示例:

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

datetime Time

datetime Time[]

该系列数组用于存储当前图表每个柱的开盘时间。时间以日期时间的形式呈现,从1970年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) != 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;

LastHigh = Open;

}

//----

PBuffer = P;

S1BuffeIG markets官网r = S1;

R1Buffer = R1;

S2Buffer = S2;

R2Buffer = R2;

S3Buffer = S3;

R3Buffer = R3;

}

Volume

double Volume[]

该系列数组用于存储当前图表每个柱的替克成交量(即成交量)。

系列数组的元素按照倒序索引,即从最后一个柱到第一个柱。其中,当前最后一个柱的索引为0,而图表中第一个柱的索引为Bars-1。

参见iVolume()函数。

示例:

if(i==0 && time0

{

d_volume += Volume[0];

if(Low[0]

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

d_close = Close[0];

}

last_fpos = FileTell(ExtHandle);

last_volume = Volume;

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);