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