MQL4数组处理相关函数详解(二)
本文继续介绍一组用于数组处理的相关函数。理解这些函数有助于更高效地操作数据,是编写交易程序时常用的基础工具。
在MQL4中,数组的最大维数为四维。每一维的索引编号从0开始,到(数组大小减1)结束。例如,在一个包含50个元素的一维数组中,第一个元素通过array[0]来调用,最后一个元素则通过array[49]来访问。
ArrayBsearch() – 数组搜索
ArrayCopy() – 数组复制
ArrayCopyRates() – 复制柱体(K线)数据到二维数组
ArrayCopySeries() – 复制柱体(K线)数据到一维数组
ArrayDimension() – 返回数组维数
ArrayGetAsSeries() – 判断序列数组
ArrayInitialize() – 数组初始化
ArrayIsSeries() – 判断数组是否序列化
ArrayMaximum() – 返回数组中最大值的位置
ArrayMinimum() – 返回数组中最小值的位置
ArrayRange() – 获取数组元素个数
ArrayResize() – 重设数组大小
ArraySetAsSeries() – 设置为序列化数组
ArraySize() – 获取数组大小
ArraySort() – 数组排序
ArrayDimension() – 返回数组维数
int ArrayDimension(object array[]) 该函数用于返回指定数组的维数。
参数:
array[] - 目标数组。示例:
int num_array[10][5];int dim_size;dim_size=ArrayDimension(num_array);// dim_size=2ArrayGetAsSeries() – 判断序列数组
bool ArrayGetAsSeries(object array[]) 如果数组按序列形式排列(即元素从最后到最开始排序),则返回true,否则返回false。
参数:
array[] - 需要检测的数组。示例:
if(ArrayGetAsSeries(array1)==true) Print("array1 是作为序列数组排序"); else Print("array1 正常排序(从左到右)");ArrayInitialize() – 数组初始化
int ArrayInitialize(void array[], double value) 将数值型数组的全部元素设置为同一个数值,并返回已初始化的元素个数。
注:在自定义指标的init()函数中,不建议对指标缓冲区进行初始化,因为这些缓冲区在分配和重新分配内存时会自动被设为“空值”。
参数:
array[] - 需要初始化的数组。value - 要设置的新值。 示例:
//----所有数组元素初始化2.1 double myarray[10]; ArrayInitialize(myarray,2.1);ArrayIsSeries() – 判断数组是否序列化
int ArrayIsSeries(object array[]) 如果数组经检查是序列的(例如Close[], Open[], High[], Low[], Time[] 或 Volume[]),则返回TRUE,否则返回FALSE。
参数:
array[] - 需要检测的数组。 示例:
if(ArrayIsSeries(array1)==false) ArrayInitialize(array1,0); else { Print("序列数组不能被初始化!"); return(-1); }ArrayMaximum() – 返回数组中最大值的位置
int ArrayMaximum(double array[], void count, void start) 该函数用于找出数组元素中的最大值,并返回其下标。
参数:
array[] - 要搜索的数值数组。 count - 要搜索的数组元素个数。 start - 开始搜索的初始下标值。示例:
double num_array[15]={4,1,6,3,9,4,1,6,3,9,4,1,6,3,9};int maxValueidx=ArrayMaximum(num_array);Print("最大值 = ", num_array[maxValueIdx]);ArrayMinimum() – 返回数组中最小值的位置
int ArrayMinimum(double array[], void count, void start) 该函数用于找出数组元素中的最小值,并返回其下标。
参数:
array[] - 要搜索的数值数组。 count - 要搜索的数组元素个数。 start - 开始搜索的初始下标值。示例:
double num_array[15]={4,1,6,3,9,4,1,6,3,9,4,1,6,3,9};int minValueidx=ArrayMinimum(num_array);Print("最小值 = ", num_array[minValueIdx]);
