- 数组,缓冲器和时序列中索引方向
- 组织数据存储
- 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
CopySeries
从MqlRates结构获取指定交易品种周期和指定数量的同步时间序列。数据被收入到指定的数组集中。元素从现在到过去倒数,这意味着起始位置等于0表示当前柱形图。
如果不知道要复制的数据量,建议使用动态数组来接收数组,因为如果数据量超过一个数组的容量,这可能会导致尝试重新分配数组以适应所有请求的数据。
如果您需要复制预定数量的数据,建议使用静态分配缓冲区以避免不必要的内存重新分配。
接收数组的属性 ― as_series=true或as_series=false ― 将被忽略:在复制期间,最早的时间序列元素将被复制到为数组分配的物理内存的开头。
int CopySeries(
|
参数
symbol_name
[in] 交易品种。
timeframe
[in] 周期。
start_pos
[in] 第一个复制的元素索引。
count
[in] 已复制元素的数量。
rates_mask
[in] 来自ENUM_COPY_RATES枚举中的标识组合。
array1, array2,...
[out] 用于从MqlRates结构接收时间序列的相应类型的数组。传递到函数的数组顺序必须与MqlRates结构中字段的顺序相匹配。
返回值
已复制元素的数量或-1(如果发生错误)。
注意
如果请求数据的整个区间超出服务器上可用的数据,函数返回-1。如果请求数据超出TERMINAL_MAXBARS(图表上最大柱形图数),该函数也返回 -1。
从指标请求数据时,如果请求的时间序列尚未构建或应从服务器下载,则该函数会立即返回 -1。但是,这将启动数据下载/自身构建。
当从EA交易或脚本请求数据时,如果程序端在本地没有合适的数据,则启动从服务器下载,或者如果可以从本地历史构建数据,但数据尚未准备好,则开始构建必要的时间序列。该函数返回超时到期时准备就绪的数据量,但是历史下载继续,该函数在下一次类似请求期间返回更多数据。
CopySeries和CopyRates之间的区别
CopySeries函数允许在一次调用期间仅将必要的时间序列获取到不同的指定数组中,同时所有的时间序列数据将被同步。这意味着结果数组中特定索引N处的所有值将属于指定交易品种/时间周期对上的同一柱形图。因此,程序员无需通过柱形图开仓时间来确保所有接收到的时间序列同步。
与将完整时间序列集作为MqlRates数组返回的CopyRates不同,CopySeries函数允许程序员仅将所需的时间序列获取为单独的数组。这可以通过指定标识组合来选择时间序列的类型来完成。传递到函数的数组顺序必须与MqlRates结构中字段的顺序相匹配:
struct MqlRates
|
因此,如果您需要获取当前交易品种/时间周期的最近100柱形图的time,close和real_volume时间序列的值,您应该使用以下调用:
datetime time[];
|
注意数组“time、close、 volume”顺序 ― 必须与 MqlRates结构中字段的顺序相匹配。忽略rates_mask中值的顺序。掩码可以如下所示:
COPY_RATES_VOLUME_REAL|COPY_RATES_TIME|COPY_RATES_CLOSE |
例如:
//--- 输入参数
|
另见