CopyOpen
CopyOpen
该函数将指定数量的历史数据,包括所选货币对在特定时间框架内的每个交易日的开盘价,复制到 open_array 数组中。需要注意的是,元素的排序是从现在到过去,即起始位置为0表示当前交易日。

当复制未知数量的数据时,建议使用动态数组作为目标数组,因为如果请求的数据量少于(或多于)目标数组的长度,函数会尝试重新分配内存,以确保请求的数据能够完全容纳。
如果您知道需要复制的数据量,最好将其存储到静态分配的缓冲区中,以避免过度分配内存。
无论目标数组的属性是什么——无论是 as_series=true 还是 as_series=false——数据都会被复制,使得最旧的元素位于分配给数组的物理内存的起始位置。该函数调用有3种方式。
通过起始位置和所需元素数量调用
int CopyOpen(
string symbol_name, // symbol name
ENUM_TIMEFRAMES timeframe, // period
int start_pos, // start position
int count, // data count to copy
double open_array[] // target array to copy open prices
);通过起始日期和所需元素数量调用
int CopyOpen(
string symbol_name, // symbol name
ENUM_TIMEFRAMES timeframe, // period
datetime start_time, // start date and time
int count, // data count to copy
double open_array[] // target array for bar open prices
);通过所需时间区间的起始和结束日期调用
int CopyOpen(
string symbol_name, // symbol name
ENUM_TIMEFRAMES timeframe, // period
datetime start_time, // start date and time
datetime stop_time, // stop date and time
double open_array[] // target array for bar open values
);参数
- symbol_name
[输入] 货币名称。
- timeframe
[输入] 时间框架。
- start_pos
[输入] 第一个要复制的元素的起始位置。
- count
[输入] 要复制的数据数量。
- start_time
[输入] 第一个要复制的元素的开始时间。
- stop_time
[输入] 最后一个要复制的元素的开始时间。
- open_array[]
[输出] 双精度类型的数组。
返回值
如果发生错误,则返回数组中元素的数量,否则返回-1。
注意
如果请求的数据范围完全不在服务器上的可用数据范围内,函数将返回-1。如果请求的数据超过TERMINAL_MAXBARS(图表上最多显示的交易日数量),函数也将返回-1。
如果请求的时间序列尚未构建或需要从服务器下载,函数将立即返回-1。
当通过起始日期和所需元素数量请求数据时,只返回日期早于或等于指定日期的数据。这意味着,任何交易日开盘时间的值(成交量、价差、指标缓冲区的值、开盘价、最高价、最低价、收盘价或开盘时间)始终小于或等于指定值。
当在指定的日期范围内请求数据时,只返回该区间内的数据。该区间以秒为单位计算。这意味着,任何交易日开盘时间的值(成交量、价差、指标缓冲区的值、开盘价、最高价、最低价、收盘价或开盘时间)始终在请求的区间内。
因此,如果当前日期是星期六,尝试复制周时间框架的数据,指定start_time=Last_Tuesday和stop_time=Last_Friday时,函数将返回0,因为周时间框架的开盘时间始终是星期日,而一周的一个交易日并不在指定的区间内。
如果您需要返回与当前未完成交易日对应的数值,可以使用第一种调用方式,指定start_pos=0和count=1。