首页学院交易策略EA智能交易文章详细

EA编程教程大全之数组函数

外汇网2021-06-17 09:42:30 59
汇外网 - 全球专业的黄金外汇门户导航行情资讯网站

运用数组的一组函数。

数组的最大维数为四维。

每个维数被索引编为从0至维度-1。

实际上,第一维数组的50个,在调用时第一个数组表明为[0],最后一个数组表明为[49]。

运用这些函数(除那些更改定量和定性的数组外)

能够预定义时间系列

Time[],Open[],High[],Low[],Close[],Volume[]

ArrayBsearch

ArrayCopy

ArrayCopyRates

ArrayCopySeries

ArrayDimension

ArrayGetAsSeries

ArrayInitialize

ArrayIsSeries

ArrayMaximum

ArrayMinimum

ArrayRange

ArrayResize

ArraySetAsSeries

ArraySize

ArraySort

intArrayBsearch(doublearray[],doublevalue,voidcount,voidstart,voiddirection)

假使没有发现事件,值会返回到第一个维度的数组或者近期的一个数组。

此函数不能用在字符型或接连数字的数组上(除打开柱的接连数组)。

注解:双元查找只能够存储数。存储数字数组运用ArraySort()函数。

参数:

array[]-需要搜索的数组.

value-将要搜索的值

count-搜索的数量,默认搜索所有的数组.

start-搜索的开始点,默认从头开始.

direction-搜索的方向:

MODE_ASCEND顺序搜索,

MODE_DESCEND倒序搜索.

示例:

datetimedaytimes[];

intshift=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()

}

Print(TimeToStr(Time[shift]),"correspondsto",dayshift,"daybaropenedat",

TimeToStr(daytimes[dayshift]));

ArrayCopy

intArrayCopy(voiddest[],objectsource[],voidstart_dest,voidstart_source,voidcount)

复制一个数组到此外一个数组。只有double[],int[],datetime[],color[],和bool[]这些类型的数组可以被复制。

返回复制元素总量。

参数:

dest[]-目标数组。

source[]-源数组。

start_dest-从目标数组的第几位开始写入,默觉得0。

start_source-从源数组的第几位开始读取,默觉得0。

count-读取多少位的数组。默认值为WHOLE_ARRAY常数。

示例:

doublearray1[][6];

doublearray2[10][6];

//数组2被相同报告添满

ArrayCopyRates(array1);

ArrayCopy(array2,array1,0,0,60);

//当下数组2的前10个柱来自历史(前10个柱包含索引[Bars-1])

ArrayCopy(array2,array1,0,Bars*6-60,60);

//当下数组2的后10个柱来自历史(后10个柱包含索引[0])

ArrayCopyRates

intArrayCopyRates(voiddest_array[],voidsymbol,voidtimeframe)

复制一段行情图上的报告到一个二维数组,并返回复制柱总量,假使是-1表明失利。数组的第二维只有6个项目分别是:

0-时间,

1-开盘价格,

2-最低价格,

3-最高价格,

4-收盘价格,

5-成交量.

假使报告(货币对名称/不同于目前的时间周期)婉拒其余图表,该种情形下相应的图表不能够在客户端内打开,报告自然会婉拒服务器。该种情形,错误ERR_HISTORY_WILL_UPDATED(4066-婉拒创下历史报告)将被放置到last_error变量中,而且将又一次婉拒(查看范例ArrayCopySeries()).

注解:此数组一般用于到DLL函数的通过报告。

对于报告数组内存没有真正的分配,没有真正地实施复制。当数组访问时,将令更改方向。

参数:

dest_array[]-在二维数组上的双重目标数组。

symbol-货币对名称

timeframe-时间周期.可以是列出时间周期的任意值。

示例:

doublearray1[][6];

ArrayCopyRates(array1,"欧元兑美元",PERIOD_H1);

Print("目前柱",TimeToStr(array1[0][0]),"开盘价格",array1[0][1]);

ArrayCopySeries

intArrayCopySeries(voidarray[],intseries_index,voidsymbol,voidtimeframe)

复制一个系列的行情图报告到数组上.

对于报告数组内存没有真正的分配,没有真正地实施复制。当数组访问时,将令更改方向。在客户指标内禁止数组作为数组下标分配。该种情形下,数组被真正复制。

假使报告从不同货币对/时间周期图表复制,报告或许缺乏。该种情形下,错误ERR_HISTORY_WILL_UPDATED(4066-婉拒创下历史报告)将被放置到last_error变量中,而且在确定的时间周期内将从新试图复制。

注解:假使series_index是MODE_TIME,那么第一个参数务必是日期型的数组

参数:

array[]-目标第一维数字数组。

series_index-接连数组识别符。务必是接连数组列表识别符其中的值。

symbol-目前货币对名称

timeframe-图表时间周期。可以是列出时间周期的任意值。

示例:

datetimedaytimes[];

intshift=10,dayshift,error;

//----此Time[]数组被排列在后面的命令

ArrayCopySeries(daytimes,MODE_TIME,Symbol(),PERIOD_D1);

error=GetLastError();

if(error==4066)

{

//----使两个以上接受只读

for(inti=0;i<2;i++)

{

Sleep(5000);

ArrayCopySeries(daytimes,MODE_TIME,Symbol(),PERIOD_D1);

//----检查但前每日柱时间

datetimelast_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()

}

Print(TimeToStr(Time[shift]),"相应",dayshift,"daybaropenedat",TimeToStr(daytimes[dayshift]));

ArrayDimension

intArrayDimension(objectarray[])

返回数组的多元维数

参数:

array[]-将要返回的数组。

示例:

intnum_array[10][5];

intdim_size;

dim_size=ArrayDimension(num_array);

//dim_size=2

ArrayGetAsSeries

boolArrayGetAsSeries(objectarray[])

返回TRUE,假使数组有组织序列的数组(能否从最后到最开始排序过的),否则返回FALSE。

参数:

array[]-需要检查的数组。

示例:

if(ArrayGetAsSeries(array1)==true)

Print("数组1是作为接连指数被编入索引");

else

Print("数组1正常编入索引(从左到右)");

ArrayInitialize

intArrayInitialize(voidarray[],doublevalue)

对数组执行初始化,返回经历初始化的数组项的个数。

注解:在客户指标中的init()函数不提倡运用到初始化缓冲,在该种函数自动初始化"空值"将自动分配和缓冲从新分配。

参数:

array[]-需要初始化的数组。

value-新的数组项的值。

示例:

//----初始化所有带有2.1的数组

doublemyarray[10];

ArrayInitialize(myarray,2.1);

ArrayIsSeries

boolArrayIsSeries(objectarray[])

假使检查数组是接连的(Time[],Open[],Close[],High[],Low[],orVolume[]),返回TRUE,否则返回FALSE。

参数:

array[]-需要检查的数组。

示例:

if(ArrayIsSeries(array1)==false)

ArrayInitialize(array1,0);

else

{

Print("接连数组不能被初始化!");

return(-1);

}

ArrayMaximum

intArrayMaximum(doublearray[],voidcount,voidstart)

找出数组中最大值的定位。在数组中函数返回最大值位置。

参数:

array[]-搜索数字数组。

count-搜索数组中项目的个数。

start-搜索的开始指数。

示例:

doublenum_array[15]={4,1,6,3,9,4,1,6,3,9,4,1,6,3,9};

intmaxValueIdx=ArrayMaximum(num_array);

Print("最大值=",num_array[maxValueIdx]);

ArrayMinimum

intArrayMinimum(doublearray[],voidcount,voidstart)

找出数组中最小值的定位。在数组中函数返回最小值位置。

参数:

array[]-搜索数字数组。

count-搜索数组中项目的个数。

start-搜索的开始指数。

示例:

doublenum_array[15]={4,1,6,3,9,4,1,6,3,9,4,1,6,3,9};

intminValueidx=ArrayMinimum(num_array);

Print("最小值=",num_array[minValueIdx]);

ArrayRange

intArrayRange(objectarray[],intrange_index)

取数组中指定维数中项目的数量。索引以零为基础,维度的大小要大于最大索引1个点。

参数:

array[]-需要检查的数组。

range_index-指定的维数。

示例:

intdim_size;

doublenum_array[10,10,10];

dim_size=ArrayRange(num_array,1);

ArrayResize

intArrayResize(voidarray[],intnew_size)

设定第一维度的大小。假使成功实施,在从新设定后返回包含的全部个数。假使数组没有重设,返回-1。

注解:在函数完成实施后,在函数内数组地方水平化而且重设将保留不变。在函数被从新调用后,一部分数组将不同于显示的数组。

参数:

array[]-需要重设的数组。

new_size-第一维中数组的新大小。

示例:

doublearray1[][4];

intelement_count=ArrayResize(array1,20);

//新大小-80个

ArraySetAsSeries

boolArraySetAsSeries(voidarray[],boolset)

设定指数数组为系列数组。假使设置参数值为TRUE,数组将被编入索引。数组0名的值是最后的值。其FALSE值设定一个标准的索引命令。此函数返回先前状态。

参数:

array[]-需要设置的数组。

set-索引数组命令。

示例:

doublemacd_buffer[300];

doublesignal_buffer[300];

inti,limit=ArraySize(macd_buffer);

ArraySetAsSeries(macd_buffer,true);

for(i=0;i

macd_buffer=iMA(NULL,0,12,0,MODE_EMA,PR洲际交易所_CLOSE,i)-iMA(NULL,0,26,0,MODE_EMA,PR洲际交易所_CLOSE,i);

for(i=0;i

signal_buffer=iMAOnArray(macd_buffer,limit,9,0,MODE_SMA,i);

ArraySize

intArraySize(objectarray[])

返回数组的项目数。对于第一维数组,用ArraySize函数返回的ArrayRange(array,0)。

参数:

array[]-任何类型数组。

示例:

intcount=ArraySize(array1);

for(inti=0;i

{

//一部分计算.

}

ArraySort

intArraySort(voidarray[],voidcount,voidstart,voidsort_dir)

对数组执行排序,系列数组不能ArraySort()运用执行排序。

参数:

array[]-被排列的数组。

count-对多少个数组项执行排序。

start-排序的开始点。

sort_dir-排序方式,

MODE_ASCEND顺序排列,

MODE_DESCEND倒序排列。

示例:

doublenum_array[5]={4,1,6,3,9};

//新数组包含值4,1,6,3,9

ArraySort(num_array);

//被排列新数组1,3,4,6,9

ArraySort(num_array,WHOLE_ARRAY,0,MODE_DESCEND);

//被排列新数组9,6,4,3,1

标签:

随机快审展示
加入快审,优先展示

加入VIP