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