- 数组,缓冲器和时序列中索引方向
- 组织数据存储
- SeriesInfoInteger
- Bars
- BarsCalculated
- IndicatorCreate
- IndicatorParameters
- IndicatorRelease
- CopyBuffer
- CopyRates
- CopySeries
- CopyTime
- CopyOpen
- CopyHigh
- CopyLow
- CopyClose
- CopyTickVolume
- CopyRealVolume
- CopySpread
- CopyTicks
- CopyTicksRange
- iBars
- iBarShift
- iClose
- iHigh
- iHighest
- iLow
- iLowest
- iOpen
- iTime
- iTickVolume
- iRealVolume
- iVolume
- iSpread
数组,缓冲器和时序列中索引方向
所有数组和指标缓冲区的默认索引是从左至右的,第一元素的索引等于0,因此,数组或指标缓冲区的第一元素默认从最左边的0开始,而最后一个元素在最右边。
指标缓冲区是双精度类型 动态数组 ,由客户端进行管理,因此相当于指标的字节数量。一个普通的双精度类型动态数组可以使用 SetIndexBuffer() 函数分派到指标缓冲区。指标缓冲区不要求使用 ArrayResize() 函数来建立大小-它会被终端的执行系统来执行。
时序列是颠倒搜索的数组,例如,时序列的第一个元素在最右边,最后一个元素在最左边。时序列是用来存储历史价格数据并包括时间信息,我们可以看见时序列最右边是最新数据,而最左边是最旧的数据。
因此时序列以0索引,包括最近引用的交易品种的信息。如果时序列包括每日时间列表的数据,当前尚未完成的日期会显示在0位置,而1索引位置会显示昨天的数据。
改变索引方向
函数 ArraySetAsSeries() 允许改变方位动态数组元素的方法,数据的自动命令在电脑内存中并未改变。该函数简单改变了安置数组元素的方法,因此当使用ArrayCopy(),函数复制一组数组到另一组中时,接收数组的命令会依据源数组的索引方向执行。
索引方向不能为分散的静态数组改变,即使数组以参量传递函数,想要改变内置的索引方向也是不可以的。
对于指标缓冲区来说,像普通数组一样,索引方向向后设置(像时序列),例如,关于指标缓冲区的零位置代表类似指标缓冲区的的最后值,也相当于指标最新字节的值。因此,指标的实际字节位置并未改变。
指标接收价格数据
每个自定义指标 都必要地建立 OnCalculate() 函数,价格数据需要传递指标缓冲区的计算值,搜索方向可以在传递数组中使用 ArrayGetAsSeries() 函数找到。
传递到函数的数组反应价格数据,例如,当检测数组时,这些数组都有时序列标志和函数ArrayIsSeries()返回真值,然后,在许多情况下,索引方向应该只能通过 ArrayGetAsSeries()函数检测。
为了不依赖默认值,ArraySetAsSeries() 应该为数组无条件调用,并建立必要方向。
接收价格数据和指标值
在EA交易,指标和脚本中的所有默认检索方向都是从左至右。如果必要的话,在MQL5程序中,可以要求时序列价值是任意交易品种和时序列,指标的计算值是任意交易品种和时序列。
使用Copy...() 函数完成这些操作:
- 复制缓冲器 复制指标缓冲区到双精度类型数组;
- 复制价格 复制价格记录到结构 MqlRates类型数组;
- 复制时间 复制时间值到日期时间类型数组;
- 复制开盘价 复制开仓价格到双精度类型数组;
- 复制最高价 复制最高价值到双精度类型数组;
- 复制最低价 复制最低价值到双精度类型数组;
- 复制收盘价 复制收盘价格到双精度类型数组;
- 复制点成交量 复制点成交量到长类型数组;
- 复制真实成交量 复制空成交量到长类型数组;
- 复制点差 复制点差到整型数组;
所有这些函数都以相同方式工作,考虑到CopyBuffer()在示例中包含的原理,暗示在需求数据的索引方向是时序列,0索引位置存储当前未完成字节的数据。为了房屋这些数据,需要复制必要的数据成交量容器数组,例如,数组 buffer。
当复制时,我们需要在源数组中指定起始位置,从数据复制的容器数组开始。在成功的条件下,指定元素数量从源数组中复制容器数组(假设从指标缓冲区中)。不考虑设置在容器数组中的索引值,复制执行总是显示在上述计算中。
如果预计价格数据将被大量迭代循环处理,那么您使用IsStopped()函数检查迫使程序终止这个事实更明智:
int copied=CopyBuffer(ma_handle,// 指标处理
|
示例:
input int per=10; // 指数周期
|
另见