美文网首页
数组函数

数组函数

作者: 牛在汇上飞 | 来源:发表于2018-10-23 12:01 被阅读0次

int ArrayBsearch( double 数组名, double 查找值, int 范围=WHOLE_ARRAY, int 始点=0, void 方向=MODE_ASCEND)
搜索某在组中的位置

如果找到,则返回第一次找到的元素下标。如果未找到,则返回最接近搜索值的元素下标。

此函数不能用于字符串型数组或序列数组(不包括K线开盘时间)。

注:二进制查找只能在已排序的数组中进行。使用 ArraySort() 函数可以排序数值数组。

:: 输入参数
array[] - 需要搜索的数组
value - 要搜索的值
count - 搜索的数量,默认搜索所有的数组
start - 搜索的开始点,默认从头开始
direction - 搜索的方向,

           MODE_ASCEND 顺序搜索 

          MODE_DESCEND 倒序搜索

示例:

datetime 日期组[];

int shift= 350,

     dayshift;

//--Time[]中所有数值降序排列

ArrayCopySeries(日期组, MODE_TIME, Symbol(), PERIOD_D1); // 将日K线的时间序列考贝到日期组

//--若在当前时框内的所查棒时间大于今天,则按今天的日线棒

if(Time[shift]>=日期组[0])

  dayshift= 0;

//--否则按

else{

  dayshift= ArrayBsearch(日期组, Time[shift], WHOLE_ARRAY, 0, MODE_DESCEND); // 查找

  if(Period()<PERIOD_D1)

     dayshift++;

 }

Print("所查棒时间 ",TimeToStr(Time[shift]),"在日K线前第 ",dayshift," 天内,该日K开盘时间为:",TimeToStr(日期组[dayshift]));

int ArrayCopy( object& 受组名, object 源组名, int 受组始下标=0, int 源组始下标 =0, int 拷贝总数=WHOLE_ARRAY)

把一个数组拷贝到另外一个数组。

数组必须类型相同,且只有同类型的double, int, datetime, color和bool型数组之间可以被复制。

返回被复制元素的个数。

:: 输入参数
dest[] - 目标接受数组
source[] - 读取源数组
start_dest - 从目标数组的第几位开始写入,默认为0
start_source - 从源数组的第几位开始读取,默认为0
count - 要复制的元素个数;默认为 WHOLE_ARRAY 常数。

示例:

double 源数组[][6];

double 接受组[10][6];

//--将源数组的部分数据填充进接受组中

ArrayCopyRates(源数组);

ArrayCopy(接受组, 源数组, 0, Bars-9, 10);

//--结果现在接受组 已经有了前10个历史K线数据

int ArrayCopyRates( double& 受组名, string 货币名=NULL, int 时框=0)
把K线数据拷贝到二维数组,数组的第二维只有6个项目分别是:

0 - 时间,
1 - 开盘价,
2 - 最低价,
3 - 最高价,
4 - 收盘价,
5 - 成交量.

返回已复制的柱数。如果返回-1,表示复制失败。

如果想从另一个图表获取数据(货币对名称/图表时段与当前不同),而相应的图表又没有打开,需要从服务器下载必要的数据,那么出现这种状况是有可能的。这种情况下,错误信息ERR-HISTORY-WILL-UPDATED (4066 – 历史数据正在更新)将被放到 last_error 变量中,并且不得不再次下载数据( 查看范例 ArrayCopySeries() )。

注:此数组通常用于向DLL函数传递数据。没有真正为数据数组分配内存,也没有真正地执行复制。当存取这样的数组时,访问将被重定向。

:: 输入参数
dest_array[] - 目标接收数组
symbol - 货币对名称
timeframe - 时框

示例:

double 数组[][6];

ArrayCopyRates(数组, "EURUSD", PERIOD_H1);

Print("E/U一小时框K线: 当前 ", TimeToStr(数组[0][0]), "开盘价为", 数组[0][1]);

int ArrayCopySeries( double& 受组名, int 序号, string 货币名=NULL, int 时框=0)

把K线数据拷贝到一维数组

返回复制的元素个数。

没有真正为数据数组分配内存,也没有真正地执行复制。当存取这样数组时,访问将被重定向。自定义指标中指标数组是例外情况,这种情况下,数组被真正复制。

如果数据从不同货币对或不同的时框复制,可能会出现缺少数据情况,则错误信息ERR-HISTORY-WILL-UPDATED(4066 – 历史数据正在更新)将被放到last_error中,在一段时间之后重新尝试复制。

注: 如果series_index是MODE_TIME, 那么这个一维数组必须是datetim型数组而不能是double型
:: 输入参数
dest_array[] - 目标接收数组
series_index - 想要取的系列的名称或编号,0-5
symbol - 货币对名称
timeframe - 时框

示例:

datetime 日K时间组[];

int shift= 10,

     dayshift,

     错码;

//--此 Time[] 数组降序排列

ArrayCopySeries(日K时间组, MODE_TIME, Symbol(), PERIOD_D1);

错码= GetLastError();

if(错码==4066){

//--试读两次以上

for(int i=0;i<2; i++){

  Sleep(5000);

  ArrayCopySeries(日K时间组,MODE_TIME,Symbol(),PERIOD_D1);

  //--检查每日K线时间

  datetime last_day=日K时间组[0];

  if(Year()==TimeYear(last_day) && Month()==TimeMonth(last_day) && Day()==TimeDay(last_day))

     break;

 }

}

if(Time[shift]>=日K时间组[0])

dayshift= 0;

else{

dayshift= ArrayBsearch(日K时间组, Time[shift], WHOLE_ARRAY, 0, MODE_DESCEND);

if(Period()<PERIOD_D1)

  dayshift++;

}

Print(TimeToStr(Time[shift]), " corresponds to ",dayshift," day bar opened at ", TimeToStr(日K时间组[dayshift]));

int ArrayDimension( int 数组名)
数组的维数

:: 输入参数
array[] - 需要检查的数组

示例:

int 数组[10][5];

int 维数;

维数= ArrayDimension(数组);

// 维数结果为2

bool ArrayGetAsSeries(object 数组名)
判断数组是否按序列数组形式排列( 即数组元素从最后到最开始的顺序)

:: 输入参数
array[] - 需要检查的数组

示例:

if(ArrayGetAsSeries(数组1)==true)

Print("数组1 是作为序列数组排序");

else

Print("数组1 正常排序(从左到右)");

int ArrayInitialize( double& 数组名, double 新元素值)

初始化为统一值

将数值型数组的每个元素的值都设为同一个数值,

返回己初始化的元素个数。

注:在自定义指标init()函数中不建议初始化指标缓冲区,在缓冲区分配和重分配内存时这种函数自动初始化为 "空值" 。

:: 输入参数
array[] - 需要初始化的数组
value - 设置新的数组项的值

示例:

//---- 把所有元素的值都设置为2.1
double 数组[10];
ArrayInitialize( 数组 , 2.1);

bool ArrayIsSeries( object 数组名)
检查数组是否为系列的(如 Close[], Open[], High[], Low[], Time[] 或 Volume[] )

:: 输入参数
array[] - 需要检查的数组

示例:

if(ArrayIsSeries(array1)==false)

ArrayInitialize(array1,0);

else{

Print("序列数组不能被初始化!");

return(-1);

}

int ArrayMaximum( double 数组名, int 搜索总数 =WHOLE_ARRAY, int 搜始点=0)
找出数组中最大值的定位

:: 输入参数
array[] - 需要检查的数组
count - 搜索数组中元素的个数
start - 搜索的开始点

示例:

double 数组[15]={4,1,6,3,9,4,1,6,3,9,4,1,6,3,9};

int 最大位= ArrayMaximum(数组);

Print("最大值 = ", 数组[最大位]);

int ArrayMinimum( double 数组名, int 搜索总数 =WHOLE_ARRAY, int 搜始点=0)
找出数组中最小值的定位

:: 输入参数
array[] - 需要检查的数组
count - 搜索数组中元素的个数
start - 搜索的开始点

示例:

double 数组[15]={4,1,6,3,9,4,1,6,3,9,4,1,6,3,9};

double 最小位= ArrayMinimum(数组);

Print("最小值 = ", 数组[最小位]);

int ArrayRange( object 数组名 , int 指定维)
取数组中指定维数的元素的个数。

由于下标从零开始,数组的大小要比最大下标数多1。

:: 输入参数
array[] - 需要检查的数组
range_index - 指定的维数

示例:

double 数组[30,20,10]; // 数组[第0(+1)维, 第1(+1)维, 第2(+1)维]

int 维0个数;

int 维1个数;

int 维2个数;

int 维3个数;

维0个数= ArrayRange(数组, 0);

维1个数= ArrayRange(数组, 1);

维2个数= ArrayRange(数组, 2);

维3个数= ArrayRange(数组, 3);

Comment(" 维0(+1)的元素个数= ",维0个数," 维1(+1)的元素个数= ",维1个数," 维2(+1)的元素个数= ",维2个数," 维3(+1)的元素个数= ",维3个数);

// 结果为:第一维30个,第二维20个,第三维10个,第四维0个

int ArrayResize( object& 数组名, int 新大小)

重新设定数组第一维的大小。

如果执行成功的话,函数将返回新数组的元素个数,否则,返回-1,数组大小并不改变。

注:函数执行完成后,在函数内局部定义和重设大小的数组将维持原样不变。在函数被重新调用后,这种数组的大小将会与定义时大小有差异。

:: 输入参数
array[] - 需要检查的数组
new_size - 第一维中数组的新大小值

示例:

double 数组[][4];

int 元素总数= ArrayResize(数组, 20);

// 结果为新的大小 为80个元素 (每维20个元素,共4维) 未

bool ArraySetAsSeries( double& 数组名 , bool 设置方向)
设置数组为系列化数组,设定数组的排列方向。

:: 输入参数
array[] - 需要处理的数值型数组

set - 数组索引顺序,(即:是否是设置为系列数组)

    true  为倒序  (即: 数组元素下标为0的值 是最后的值)

    false 为顺序。(表明数组原本是一个正常的排列顺序,此函数原样返回以前的数组。)

示例:

double Macd缓组[300];

double 信号缓组[300];

int i,

   limit= ArraySize(Macd缓组);

ArraySetAsSeries(Macd缓组, true);

for(i=0; i<limit; i++)

Macd缓组[i]= iMA(NULL, 0, 12, 0, MODE_EMA, PRICE_CLOSE, i)-iMA(NULL, 0, 26, 0, MODE_EMA, PRICE_CLOSE, i);

for(i=0; i<limit; i++)

信号缓组[i]= iMAOnArray(Macd缓组, limit, 9, 0, MODE_SMA, i);

int ArraySize( object 数组名 )

数组元素的个数。

对于一维数组,用ArraySize()返回的大小和ArrayRange(array, 0)的结果相等

:: 输入参数
array[] - 需要处理的数组

示例:

int 元素总数= ArraySize(数组);

for(int i=0; i<元素总数; i++){

// 。。。一些计算.

}

int ArraySort( double& 数组名, int 元素总数=WHOLE_ARRAY, int 起点=0, int 方向=MODE_ASCEND)

按数值型数组的第一维进行排序。

该函数不可以对系列数组进行排序
:: 输入参数
array[] - 需排序的数组
count - 参与排序的元素个数
start - 排序的起始下标
sort_dir - 排序方式:

            MODE_ASCEND顺序排列; 

            MODE_DESCEND倒序排列

示例:

double 数组[5]= {4,1,6,3,9}; // 现在数组包含了值 4,1,6,3,9

ArraySort(数组); // 结果为 1,3,4,6,9

ArraySort(数组,MODE_DESCEND); // 结果为 9,6,4,3,1

相关文章

  • 函数指针

    概念: 指针函数, 函数指针, 指针数组, 数组指针, 指向数组的指针, 指向函数指针数组的指针。

  • C语言-2、数组、函数

    数组定义 数组的指针、内存地址、取值 数组大小 函数指针 函数指针2 函数指针3

  • C语言

    C 指针、指针变量、函数指针、指针函数、指针数组、数组指针、C 数组

  • 关于webpack loader的加载顺序

    函数组合 先介绍一个概念,函数组合:函数组合是函数式编程中非常重要的思想,它的实现的思路也没有特别复杂。 函数组合...

  • compose

    函数组合 先介绍一个概念,函数组合:函数组合是函数式编程中非常重要的思想,它的实现的思路也没有特别复杂。 函数组合...

  • day05(2017.9.28)

    数组 声明变量是保存数据,数组可以保存多个变量 数组案例 函数 函数基础 函数小案例 arguments(参数)案例

  • PHP中的数组

    数组分类 索引数组 关联数组 数组遍历 传值遍历 传址遍历 数组函数 指针操作函数 current($array)...

  • 7月9号

    1 //数组作为函数参数,可以省略元素个数 //数组作为函数参数,传递是整个数组的地址,修改函数形参数组元素的值,...

  • React函数组件与类组件

    函数组件与类组件 GitHub地址 函数组件与类组件函数组件(functional component)类组件(c...

  • 混淆知识点

    1、指针数组&数组指针、常量指针&指针常量、函数指针&指针函数 数组指针&指针数组 数组指针的定义 int (*p...

网友评论

      本文标题:数组函数

      本文链接:https://www.haomeiwen.com/subject/mvttzftx.html