在金融市场分析中,实时准确地获取和处理汇率数据是至关重要的。MQL4中的ArrayCopyRates
函数便是此类操作的有力工具,它能够复制汇率数据到数组中,并返回复制的柱状图数量。接下来,我们将深入探讨这一函数的两个变体及其应用场景。
函数详解
ArrayCopyRates
函数存在两种变体,用于处理不同类型的目标数组。
第一种变体
此变体用于虚拟复制数据到MqlRates
类型的数组中,该数组通常用于传递数据到DLL函数。
int ArrayCopyRates(
MqlRates& rates_array[], // 目标数组,MqlRates类型
string symbol=NULL, // 符号名称
int timeframe=0 // 时间周期
);
第二种变体
这个版本用于实际复制数据到两维的double类型数组RateInfo[][6]
中。
int ArrayCopyRates(
void& dest_array[][], // 目标数组,double类型
string symbol=NULL, // 符号名称
int timeframe=0 // 时间周期
);
参数说明
rates_array[] / dest_array[][]
:目标数组,分别为MqlRates
类型和两维double类型。symbol=NULL
:符号名称,默认为当前符号。timeframe=0
:时间周期,可以是ENUM_TIMEFRAMES
枚举值,0表示当前图表时间周期。
返回值
函数返回复制的柱状图数量,失败时返回-1。
示例分析
我们通过一个实际的例子来探讨这两种变体的应用。首先,我们分别定义了一个两维double数组double_array
和一个MqlRates
类型数组mqlrates_array
,并在OnTick
事件中调用ArrayCopyRates
函数。
double double_array[][6];
MqlRates mqlrates_array[];
bool first_call;
void OnTick()
{
if(first_call)
{
// 实际复制到 double_array
ArrayCopyRates(double_array,NULL,0);
// 虚拟复制到 mqlrates_array,该数组将持有数据的引用
ArrayCopyRates(mqlrates_array,NULL,0);
first_call=false;
}
// 每个tick打印数组第0个元素的值以观察差异
Comment("double_array[]值未变化(实际数据复制):n",
"0 - time: ",(datetime)double_array[0][0],"n",
// 其他值的打印...
"mqlrates_array[]值发生变化(虚拟数据复制):n",
"0 - time: ",mqlrates_array[0].time,"n"
// 其他值的打印...
);
}
通过这个例子,我们可以观察到虚拟复制和实际复制之间的差异。虚拟复制意味着mqlrates_array
始终引用最新数据,而实际复制则保持double_array
数据不变。
总结
ArrayCopyRates
函数是MQL4中一种强大的工具,能够帮助我们灵活地处理和分析汇率数据。掌握这一函数及其变体,将有助于我们更加高效和准确地进行金融市场分析,实现数据的实时准确处理。