MQL4预定义变量详解:价格与时间数据

DooPrime 分析团队
资深外汇分析师
阅读 收藏
专业分析

在MQL4编程中,预定义变量是访问图表数据的关键。例如,通过Close[]数组可以获取每个K线柱体的收盘价。

Open[]数组则用于获取每个K线柱体的开盘价。

要获取每个K线柱体的最高价,可以使用High[]数组。

相应地,Low[]数组用于获取每个K线柱体的最低价。

Time[]数组包含了每个K线柱体的开盘时间。

Volume[]数组则提供了每个K线柱体的成交量数据。

对于每一个在德璞资本官网交易平台或其他MT4终端上运行的可执行MQL4程序,无论是智能交易系统、脚本还是自定义指标,这些预定义变量都能在程序启动时,帮助开发者轻松应对图表中的各种价格状态及相关信息。

库文件也可以使用这些模块中的预定义变量。

为了确保安全、快速地访问这些数据,客户端程序会为每个单独启动的程序提供预定义变量的本地副本。这些数据会在每次运行智能交易或自定义指标后自动更新,或者通过调用RefreshRates()函数来手动更新。

获取每个K线柱体的收盘价 Close[ ]

double Close[ ]

这是一个收盘价序列数组,包含了当前图表中每个柱子的收盘价。

收盘价数据按逆序方式保存在数组元素中。具体来说,最新K线的收盘价下标为0,上一个K线的下标为1,再上一个为2,图表中最早一个K线的下标则为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

获取每个K线柱体的开盘价 Open[ ]

double Open[ ]

这是一个开盘价序列数组,包含了当前图表中每个K线柱体的开盘价。

开盘价同样按逆序方式保存,最新的K线开盘价下标为0,依此类推,最早一个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

获取每个K线柱体的最高价 High[ ]

double High[ ]

这是一个最高价序列数组,包含了当前图表中每个K线柱体的最高价。

最高价数据也遵循逆序保存规则,下标0对应最新K线的最高价。

相关函数可参见 iHigh()

示例代码:

//---- 计算最大值 i=Bars-KPeriod; if(counted_barsKPeriod) i=Bars-counted_bars-1; while(i=0) { double max=-1000000; k = i + KPeriod-1; while(k=i) { price=High[k]; if(max

获取每个K线柱体的最低价 Low[ ]

double Low[ ]

这是一个最低价序列数组,包含了当前图表中每个K线柱体的最低价。

最低价同样以逆序方式存储在数组中,方便开发者进行历史数据分析。

相关函数可参见 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[i]=min; i--; }//----

获取每个K线柱体的开盘时间 Time[ ]

datetime Time[ ]

这是一个开盘时间序列数组,包含了当前图表中每个K线柱体的开盘时间。其日期时间型数据以秒为单位计算,表示从1970年1月1日00:00开始的总秒数。

开盘时间数据也按逆序保存,下标0对应最新K线的时间。

相关函数可参见 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成交量估计值。

成交量数据同样按逆序方式保存,下标0代表最新K线的数据。

请注意:此处的成交量并非传统意义上的真实成交量,而是一个基于tick价格变动频率的估计值。其逻辑是,tick价格变动越快,估计的成交量就越大;变动越慢,则估计的成交量越小。理解这一点对于在德璞资本官网等平台进行数据分析尤为重要。

相关函数可参见 iVolume()

示例代码:

if(i==0 && time0

DooPrime 分析团队

资深外汇分析师

由多名资深外汇分析师组成的专业团队,拥有平均15年以上的市场分析经验,擅长技术分析和基本面分析相结合的交易策略。

相关分析

立即开启您的外汇交易之旅

加入我们的交易社区,享受专业的交易服务和优惠活动