EA编程教程大全之数组函数-外汇EA下载

您正在浏览EA码头网,我们提供了许多优质的EA供您下载使用,请点击这里
我们建议大家用多款不同策略的EA,每个EA交易多个品种,每个EA在每个品种上只承担一丁点风险,这样能在增加收益的同时,分散风险,以达到持续稳定盈利的目的,您也可以根据你的交易理念自行设置参数。

 使用数组的一组函数。

 
数组的最大维数为四维。

每个维数被索引编为从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 

 

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()<PERIOD_D1) dayshift++; 
    } 
  Print(TimeToStr(Time[shift]),” corresponds to “,dayshift,” day bar opened at “, 
        TimeToStr(daytimes[dayshift])); 
 
 
ArrayCopy  
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]; 
  // 数组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
int ArrayCopyRates( void dest_array[], void symbol, void timeframe)

复制一段走势图上的数据到一个二维数组,并返回复制柱总量,如果是-1表示失败。数组的第二维只有6个项目分别是:

0 – 时间,  
1 – 开盘价格,  
2 – 最低价格,  
3 – 最高价格,  
4 – 收盘价格,  
5 – 成交量.  
 
如果数据(货币对名称/不同于当前的时间周期) 拒绝其他图表,这种情况下相应的图表不能够在客户端内打开,数据自然会拒绝服务器。这种情况, 错误 ERR_HISTORY_WILL_UPDATED (4066 – 拒绝刷新历史数据) 将被放置到 last_error 变量中,并且将再次拒绝(查看范例ArrayCopySeries()). 
 
注解:此数组通常用于到DLL函数的通过数据。

对于数据数组内存没有真正的分配,没有真正地执行复制。当数组访问时,将会改变方向。

参量:

dest_array[]  –  在二维数组上的双重目标数组。  
symbol  –  货币对名称  
timeframe  –  时间周期. 可以是列出时间周期的任意值。  
 
示例:

  double array1[][6]; 
  ArrayCopyRates(array1,”EURUSD”, PERIOD_H1); 
  Print(“当前柱 “,TimeToStr(array1[0][0]),”开盘价格”, array1[0][1]);

 

ArrayCopySeries 
int ArrayCopySeries( void array[], int series_index, void symbol, void timeframe)

复制一个系列的走势图数据到数组上.

 
对于数据数组内存没有真正的分配,没有真正地执行复制。当数组访问时,将会改变方向。在客户指标内禁止数组作为 数组下标分配。这种情况下,数组被真正复制。
 
如果数据从不同货币对/时间周期图表复制,数据可能缺乏。这种情况下, 错误 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()<PERIOD_D1) dayshift++; 
  } 
Print(TimeToStr(Time[shift]),” 相应 “,dayshift,” day bar opened at “, TimeToStr(daytimes[dayshift])); 
 
 
ArrayDimension 
int ArrayDimension( object array[])

返回数组的多元维数

参量:

array[]  –  将要返回的数组。
 
示例:

int num_array[10][5]; 
int dim_size; 
dim_size=ArrayDimension(num_array); 
// dim_size=2 
 
 
 
ArrayGetAsSeries 
bool ArrayGetAsSeries( object array[])

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

参量:

array[]  –  需要检查的数组。  
 
示例:

  if(ArrayGetAsSeries(array1)==true) 
    Print(“数组1是作为连续指数被编入索引”); 
  else 
    Print(“数组1 正常编入索引(从左到右)”); 
 
 
 
ArrayInitialize 
int ArrayInitialize( void array[], double value)

对数组进行初始化,返回经过初始化的数组项的个数。

注解:在客户指标中的init()函数不建议使用到初始化缓冲,在这种函数自动初始化”空值”将自动分配和缓冲重新分配。

参量:

array[]  –  需要初始化的数组。  
value  –  新的数组项的值 。  
 
示例:

  //—-初始化所有带有2.1的数组 
  double myarray[10]; 
  ArrayInitialize(myarray,2.1); 
 
 
 
ArrayIsSeries 
bool ArrayIsSeries( object array[])

如果检查数组是连续的(Time[],Open[],Close[],High[],Low[], or 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]); 
 
 
 
ArrayRange
int ArrayRange( object array[], int range_index)

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

参量:

array[]  –  需要检查的数组。  
range_index  –  指定的维数 。  
 
示例:

int    dim_size; 
double num_array[10,10,10]; 
dim_size=ArrayRange(num_array, 1); 
 
 
 
ArrayResize 
int ArrayResize( void array[], int new_size)

设定第一维度的大小。如果成功执行,在重新设定后返回包含的全部个数。如果数组没有重设,返回 -1。

注解:在函数完成执行后,在函数内数组地方水平化并且重设将保留不变。 在函数被重新调用后,一些数组将不同于表明的数组。

参量:

array[]  –  需要重设的数组。  
new_size  –  第一维中数组的新大小 。  
 
示例:

double array1[][4]; 
int    element_count=ArrayResize(array1, 20); 
// 新大小 – 80个 
 
 
 
ArraySetAsSeries 
bool ArraySetAsSeries( void array[], bool set)

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

参量:

array[]  –  需要设置的数组。  
set  –  索引数组命令。  
 
示例:

double macd_buffer[300]; 
double signal_buffer[300]; 
int    i,limit=ArraySize(macd_buffer); 
ArraySetAsSeries(macd_buffer,true); 
 
for(i=0; i<limit; i++) 
  macd_buffer=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++) 
  signal_buffer=iMAOnArray(macd_buffer,limit,9,0,MODE_SMA,i); 
 
 
 
ArraySize 
int ArraySize( object array[])

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

参量:

array[]  –  任何类型数组。
 
示例:

int count=ArraySize(array1); 
for(int i=0; i<count; i++) 
  { 
  // 一些计算. 
  } 
 
 
 
ArraySort 
int ArraySort( void array[], void count, void start, void sort_dir)

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

参量:

array[]  –  被排列的数组。  
count  –  对多少个数组项进行排序。  
start  –  排序的开始点。  
sort_dir  –  排序方式,  
MODE_ASCEND顺序排列,  
MODE_DESCEND倒序排列。  
 
示例:

  double num_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

您也可以注册登陆签到领取M币。免费下载EA,请点击这里

· 免责声明:投资有风险,本网站所包含之所有信息均不构成对外汇的任何任何投资的建议或意见, 网站内容仅供参考。不适合所有投资者,客户需根据自身情况选择,网站访问者不应依赖本网站信息并将其视爲作爲或不作爲之依据。 对于任何个人依据本网站或网站的信息采取的作爲或不作爲所导致的结果,我们将毋须承担任何责任。

外汇EA策略宝盒 » EA编程教程大全之数组函数-外汇EA下载

发表评论