MQL4数组处理相关函数(一)

阅读 :
欢迎访问 外 汇 邦 WWW.WaiHuiBang.com

用于数组处理的一组函数。

数组的最大维数为四维。每一维索引编号为0至(数组大小 减 1)。例如,在50个元素的一维数组中,调用第一个元素用array[0],最后一个元素用array[49]。

  • ArrayBsearch() – 数组搜索
  • ArrayCopy() – 数组复制
  • ArrayCopyRates() – 复制柱体(K线)数据到二维数组
  • ArrayCopySeries() – 复制柱体(K线)数据到一维数组
  • ArrayDimension() – 返回数组维数
  • ArrayGetAsSeries() – 判断序列数组
  • ArrayInitialize() – 数组初始化
  • ArrayIsSeries() – 判断数组是否序列化
  • ArrayMaximum() – 返回数组中最大值的位置
  • ArrayMinimum() – 返回数组中最小值的位置
  • ArrayRange() – 获取数组元素个数
  • ArrayResize() – 重设数组大小
  • ArraySetAsSeries() – 设置为序列化数组
  • ArraySize() – 获取数组大小
  • ArraySort() – 数组排序

 

ArrayBsearch() – 数组搜索

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];  // 用数据填充array2数组  ArrayCopyRates(array1);  ArrayCopy(array2,array1,0,0,60);  // 现在array2有了来自于历史的前10柱数据(第一个柱子索引为[Bar-1])  ArrayCopy(array2,array1,0,Bars*6-60,60);  // 现在array2有了来自于历史的后10柱数据(最后一柱索引为[0])

ArrayCopyRates() – 复制柱体(K线)数据到二维数组

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,"EURUSD", PERIOD_H1);  Print("当前柱 ",TimeToStr(array1[0][0]),"开盘价格", array1[0][1]);

ArrayCopySeries() – 复制柱体(K线)数据到一维数组

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()<PERIOD_D1) dayshift++;  }Print(TimeToStr(Time[shift])," corresponds to ",dayshift," day bar opened at ", TimeToStr(daytimes[dayshift]));
欢迎访问 外 汇 邦 WWW.WaiHuiBang.com
本文标题:MQL4数组处理相关函数(一) - MT4平台MQL4编程学习
本文地址:http://www.ea666.cn/fxschool/autotrading/mql4/49053.html

相关文章

  • EA智能交易外汇的优势

    在金融交易市场,外汇越来越被人所关注,他的稳定,低风险高回报及交易时间和买卖的自由度赢得了广大投资者的亲睐,然后个人自主交易即手动交易即使是在外汇市场也是存在很大的弊端,目前前华尔街60%以上的交易都是由程序化...

    MQL4编程学习
  • 外汇EA编程教程――数据类型

      所有的程序就是对数据进行操作,我们根据不同的需求对数据定义不同的类型,比如数字类型的数据用于操作数组。价格数据使用浮点型类型数据,MQL本身没有货币类型的数据类型。 不同的数据类型有着不同的处理速度,其中...

    MQL4编程学习
  • 外汇智能交易MQL4语言教程(二)

    4.固定字MetaQuotes 4 语言使用下面的几组固定字。1. 逻辑符号。 AND, NOT, OR. 2. MQL 4语言指令。 Array, Begin, Break, Continue, Define, Downto, Else, End, Exit, For, If, Input, Then, To, Variable, Wh...

    MQL4编程学习
  • MT4三色移动平均线交易助手

    一条均线时,也可以判断趋势,两条的趋势感更加强烈,三条则如彩虹般艳丽。当短期、中期、长期三条平均线在价格下方呈自上而下的排列顺序时,称“多头排列”:  当短期、中期、长期三条平均线在价格上方呈自下而上的排列顺序时,称“空头排列”。...

    MQL4编程学习
  • 外汇EA简介

    EA 即 Expert Advisors 的英文缩写 中文意思专家顾问,俗称智能交易系统,就是由电脑模拟交易员的下单操作进行机器自动交易的过程。 一>、人工操盘过程 下面我们...

    MQL4编程学习
你可能感兴趣