
用于数组处理的一组函数。
数组的最大维数为四维。每一维索引编号为0至(数组大小 减 1)。比如,在50个元素的一维数组中,调用第一个元素用array[0],最后一个元素用array[49]。
- ArrayBsearch() – 数组搜索
- ArrayCopy() – 数组复制
- ArrayCopyRates() – 复制柱体(K线)报告到二维数组
- ArrayCopySeries() – 复制柱体(K线)报告到一维数组
- ArrayDimension() – 返回数组维数
- ArrayGetAsSeries() – 分析序列数组
- ArrayInitialize() – 数组初始化
- ArrayIsSeries() – 分析数组能否序列化
- ArrayMaximum() – 返回数组中最大值的位置
- ArrayMinimum() – 返回数组中最小值的位置
- ArrayRange() – 获取数组元素个数
- ArrayResize() – 重设数组大小
- ArraySetAsSeries() – 设置为序列化数组
- ArraySize() – 获取数组大小
- ArraySort() – 数组排序
int ArrayBsearch(double array[], double value, void count, void start, void direction)
假使在数组中寻到,返回首次寻到的元素下标。假使未寻到,则返回最靠近搜索值的元素下标。
此函数不能用于字符串型数组或序列数组(不包含柱子开盘时问的序列数组)。
注:二进制查找只能在已排序的数组中执行。运用 ArraySort() 函数可以排序数值数组。
参数:
array[] - 需要搜索的数值数组。value - 要搜索的值。count - 要搜索的元素数量,默认搜索所有的数组。start - 搜索的开始位置,默认从第一个元素开始。direction - 搜索的方向,可以运用下面的值: MODE_ASCEND 顺序搜索, MODE_DESCEND 倒序搜索。
示例:
datetime daytimes[]; int shift=10,dayshift; // Time[]中所有数值降序排列 ArrayCopySeries(daytimes,MODE_TIME,Symbol(),PERIOD_D1);if(Time[shift]>=daytimes[0]) dayshift=0; else { dayshift=ArrayBsearch(daytimes,Time[shift],WHOLE_ARRAY,0,MODE_DESCEND);if(Period()
int ArrayCopy(void dest[], object source[], void start_dest, void start_source, void count)
复制一个数组报告到此外一个数组。数组务必类型相同,只有同类型的double, int, datetime, color和bool型数组之间可以被复制。
返回被复制元素的个数。
参数:
dest[] - 目标数组。 source[] - 源数组。start_dest - 接收报告的目标数组起始下标,默觉得0。 start_source - 读取报告的源数组起始下标,默觉得0。 count - 要复制的元素个数;默认值为 WHOLE_ARRAY 常数。
示例:
double array1[][6]; double array2[10][6]; // 用报告填充array2数组 ArrayCopyRates(array1);ArrayCopy(array2,array1,0,0,60);// 当下array2有了来自于历史的前10柱报告(第一个柱子索引为[Bar-1]) ArrayCopy(array2,array1,0,Bars*6-60,60);// 当下array2有了来自于历史的后10柱报告(最后一柱索引为[0])
int ArrayCopyRates(void dest_array[], void symbol, void timeframe)
复制图表上柱体(K线)报告到一个二维数组,并返回已复制的柱数。假使返回-1,表明复制失利。数组的第二维有6个项目,分别是:
- 0 – 开盘时间
- 1 – 开盘价
- 2 – 最低价
- 3 – 最高价
- 4 – 收盘价
- 5 – 成交量
假使想从其他图表获取报告(货币对名称/图表时段与目前不同),而相应的图表又没有打开,需要从服务器下载必要的报告,那么显现该种情况是有机会的。该种情形下,错误信息ERR-HISTORY-WILL-UPDATED (4066 – 历史报告正在更新)将被放到 last_error 变量中,而且必须又一次下载报告( 查看范例 ArrayCopySeries() )。
注:此数组一般用于向DLL函数传递报告。没有真正为报告数组分配内存,也没有真正地实施复制。当存取如此的数组时,访问将被重定向。
参数:
dest_array[] - 二维目标数组(double类型数组)。 symbol - 货币对名称 timeframe - 时间周期,可以是 列出时间周期 的任意值。
示例:
double array1[][6]; ArrayCopyRates(array1,"欧元兑美元", PERIOD_H1);Print("目前柱 ",TimeToStr(array1[0][0]),"开盘价格", array1[0][1]);
int ArrayCopySeries(void array[], int series_index, void symbol, void timeframe)
复制一组柱体(K线)报告到一个一维数组,并返回复制的元素个数。
没有真正为报告数组分配内存,也没有真正地实施复制。当存取如此数组时,访问将被重定向。自定义指标中指标数组是例外情形,该种情形下,数组被真正复制。
假使报告从不同货币对/图表时段复制,或许会缺少报告。该种情形下,错误信息ERR-HISTORY-WILL-UPDATED(4066 – 历史报告正在更新)将被放到last_error变量中,在一段时间之后从新试图复制。
注:假使series_index是MODE_TIME,那么传递给函数的数组报告类型务必是日期时间型。
参数:
array[] - 一维目标数组。 series_index - 序列数组标示符,务必是 序列化数组常量列表 中标示符。 symbol - 货币对名称。 timeframe - 时间周期,可以是 列出时间周期 的任意值。
示例:
datetime daytimes[];int shift=10,dayshift,error;//---- 此 Time[] 数组降序排列ArrayCopySeries(daytimes,MODE_TIME,Symbol(),PERIOD_D1);error=GetLastError();if(error==4066) { //---- 试读两次以上 for(int i=0;i<2; i++) { Sleep(5000);ArrayCopySeries(daytimes,MODE_TIME,Symbol(),PERIOD_D1);//---- 检查每日柱体时间 datetime last_day=daytimes[0]; if(Year()==TimeYear(last_day) && Month()==TimeMonth(last_day) && Day()==TimeDay(last_day)) break; } }if(Time[shift]>=daytimes[0]) dayshift=0;else { dayshift=ArrayBsearch(daytimes,Time[shift],WHOLE_ARRAY,0,MODE_DESCEND);if(Period()