MQL4预定义变量(二)
- 获取每个柱体(K线)的收盘价 Close[ ]
- 获取每个柱体(K线)的开盘价 Open[ ]
- 获取每个柱体(K线)的最高价 High[ ]
- 获取每个柱体(K线)的最低价 Low[ ]
- 获取每个柱体(K线)的开盘时间 Time[ ]
- 获取每个柱体(K线)的成交量 Volume[ ]
对于每个可执行的MQL4程序,在程序启动时(智能交易、脚本或是自定义指标),诸多的预定义变量可以轻松应对图表中的各种价格状态等价格相关信息。
库可以使用模块中的预定义变量。
为了能安全、快速地访问这些数据,客户端程序会为每个单独启动的程序提供预定义变量的本地副本。这些数据会在每次运行智能交易或自定义指标后自动更新,或调用RefreshRates()函数更新。
获取每个柱体(K线)的收盘价 Close[ ]
double Close[ ]
收盘价序列数组,包含了当前图表中每个柱子的收盘价。
收盘价按逆序方式保存在数组元素中,即最新的K线收盘价下标为0,上一个K线下标为1,上上一个K线下标为2,图表中最后一个K线的下标为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); }
获取每个柱体(K线)的开盘价 Open[ ]
double Open[ ]
开盘价序列数组,包含了当前图表中每个柱体(K线)的开盘价。
开盘价按逆序方式保存在数组元素中,即最新的K线开盘价下标为0,上一个K线下标为1,上上一个K线下标为2,图表中最后一个K线的下标为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--; }
获取每个柱体(K线)的最高价 High[ ]
double High[ ]
最高价序列数组,包含了当前图表中每个柱体(K线)的最高价。
最高价按逆序方式保存在数组元素中,即最新的K线最高价下标为0,上一个K线下标为1,上上一个K线下标为2,图表中最后一个K线的下标为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--; }//----
获取每个柱体(K线)的最低价 Low[ ]
double Low[ ]
最低价序列数组,包含了当前图表中每个柱体(K线)的最低价。
最低价按逆序方式保存在数组元素中,即最新的K线最低价下标为0,上一个K线下标为1,上上一个K线下标为2,图表中最后一个K线的下标为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--; }//----
获取每个柱体(K线)的开盘时间 Time[ ]
datetime Time[ ]
开盘时间序列数组,包含了当前图表中每个柱体(K线)的开盘时间。日期时间型数据按秒计算,是从1970年1月1日00:00开始的总秒数。
开盘时间按逆序方式保存在数组元素中,即最新的K线开盘时间下标为0,上一个K线下标为1,上上一个K线下标为2,图表中最后一个K线的下标为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; }
获取每个柱体(K线)的成交量 Volume[ ]
double Volume[ ]
成交量序列数组,包含了当前图表中每个柱体(K线)的tick成交量。
成交量按逆序方式保存在数组元素中,即最新的K线成交量下标为0,上一个K线下标为1,上上一个K线下标为2,图表中最后一个K线的下标为Bars-1。
注:该成交量并非真正意义上的成交量,这是一个估计值,其值为该K线下tick价格变动的数量,其背后的意义为如果tick价格变动很快,表示成交量越大;tick价格变动越慢,表示成交量越小。
参见 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);
本文地址:https://www.waihuibang.com/fxschool/autotrading/mql4/49057.html