CopyRates

获取 MqlRates 结构的历史序列,按指定品种-周期,按指定数量,并存储到矩阵或向量当中。 元素顺序倒计时,从现在到过去,这意味着起始位置等于 0 表示当前柱线。

复制数据,以便将最久远的元素放置在矩阵/向量的开头。 有三个函数选项。

依据初始位置和所需元素的数量进行访问

bool  matrix::CopyRates(
   string           symbol,       // 品名
   ENUM_TIMEFRAMES  period,       // 周期
   ulong            rates_mask,   // 指定所请求序列的标志组合
   ulong            start,        // 复制初始柱线的起始索引
   ulong            count         // 要复制的数量
   );

按初始日期和所需元素的数量进行访问

bool  matrix::CopyRates(
   string           symbol,       // 品名
   ENUM_TIMEFRAMES  period,       // 周期
   ulong            rates_mask,   // 指定所请求序列的标志组合
   datetime         from,         // 起始日期
   ulong            count         // 要复制的数量
   );

按所需时间间隔的初始日期和最终日期进行访问

bool  matrix::CopyRates(
   string           symbol,       // 品名
   ENUM_TIMEFRAMES  period,       // 周期
   ulong            rates_mask,   // 指定所请求序列的标志组合
   datetime         from,         // 起始日期
   datetime         to            // 结束日期
   );

向量方法

依据初始位置和所需元素的数量进行访问

bool  vector::CopyRates(
   string           symbol,       // 品名
   ENUM_TIMEFRAMES  period,       // 周期
   ulong            rates_mask,   // 指定所请求序列的标志组合
   ulong            start,        // 复制初始柱线的起始索引
   ulong            count         // 要复制的数量
   );

按初始日期和所需元素的数量进行访问

bool  vector::CopyRates(
   string           symbol,       // 品名
   ENUM_TIMEFRAMES  period,       // 周期
   ulong            rates_mask,   // 指定所请求序列的标志组合
   datetime         from,         // 起始日期
   ulong            count         // 要复制的数量
   );

按所需时间间隔的初始日期和最终日期进行访问

bool  vector::CopyRates(
   string           symbol,       // 品名
   ENUM_TIMEFRAMES  period,       // 周期
   ulong            rates_mask,   // 指定所请求序列的标志组合
   datetime         from,         // 起始日期
   datetime         to            // 结束日期
   );

参数

symbol

[输入]  品种。

period

[输入]  周期。

rates_mask

[输入]  指定所请求序列类型的标志的 ENUM_COPY_RATES 枚举组合。 当复制到向量时,只能指定来自 ENUM_COPY_RATES 枚举中的一个值,否则会发生错误。

start

[输入]  第一个复制的元素索引。

count

[输入]  复制的元素数量。

from

[输入]  对应于第一个元素的柱线时间。

to

[输入]  对应于最后一个元素的柱线时间。

返回值

如果成功则返回 true,否则返回 false(如果出现错误)

注意

如果所请求数据的区间完全超出服务器上的可用数据,则该函数返回 false。 如果数据超出 TERMINAL_MAXBARS 之外(图表上的最大柱数),则该函数也会返回 false

当请求数据来自 EA 或脚本时,如果终端在本地没有相应的数据,则启动从服务器下载,或者如果可以从本地历史构建数据但尚未准备好,则开始构建必要的时间序列。 该函数按时间返回准备好的直至期满的数据量,然而历史记录下载将继续,并且在下一个类似请求期间,该函数会返回更多数据。

按开始日期和所需项目数量请求数据时,仅返回日期小于(之前)或等于指定日期的数据。 设置间隔时要考虑多一秒。 换句话说,返回值的任何柱线的开盘日期(交易量、点差、开盘价、最高价、最低价、收盘价或时间)始终等于或小于指定的日期。

当请求给定日期范围内的数据时,仅返回请求间隔内的数据。 设置间隔时要考虑多一秒。 换句话说,返回的任何柱线的开盘时间(交易量、点差、指标缓冲区值、开盘价、最高价、最低价、收盘价或时间)始终位于请求的区间内。

例如,如果当日是一周中的星期六,则当尝试设置 start_time=Last_Tuesdaystop_time=Last_Friday 复制周线时间帧数据时,函数会返回 0,因为周线时间帧的开盘时间始终落在星期日,故没有一个周线柱线落在指定范围内。

如果您需要获取对应于当前未完成柱线的数值,那么您可以采用第一种调用形式指示 start_pos=0 和 count=1。

ENUM_COPY_RATES

ENUM_COPY_RATES 枚举包含指定要传递给矩阵或数组的数据类型的标志。 标志组合允许在一个请求中从历史记录中获取多个序列。 矩阵中行的顺序将与 ENUM_COPY_RATES 枚举中值的顺序相对应。 换言之,含有最高价数据的行在矩阵中将始终高于含有最低价数据的行。

ID

说明

COPY_RATES_OPEN

1

开盘价序列

COPY_RATES_HIGH

2

最高价序列

COPY_RATES_LOW

4

最低价序列

COPY_RATES_CLOSE

8

收盘价序列

COPY_RATES_TIME

16

时间序列(柱线开盘时间)

 

获取向量和矩阵(vectord 和 matrixf)的浮点型的时间会导致 ~100 秒的缺失,因为浮点精度受到严重限制,并且大于1<<24 的整数无法在浮点数中准确表示。

COPY_RATES_VOLUME_TICK

32

跳价的成交量

COPY_RATES_VOLUME_REAL

64

交易成交量

COPY_RATES_SPREAD

128

点差

组合

 

 

COPY_RATES_OHLC

15

开盘价、最高价、最低价、和收盘价序列

COPY_RATES_OHLCT

31

开盘价、最高价、最低价、收盘价、和时间序列

数据排列

 

 

COPY_RATES_VERTICAL

32768

序列沿垂直轴复制到矩阵中。接收到的序列值将在矩阵中垂直排列,即最早的数据将位于第一行,而最新的数据将位于矩阵的最后一行。

 

使用默认复制时,序列会沿水平轴添加到矩阵中。

 

该标识仅在复制到矩阵时适用。

示例:

//+------------------------------------------------------------------+
//| 脚本程序 start 函数                                                |
//+------------------------------------------------------------------+
void OnStart()
 {
//--- 获取报价至矩阵
  matrix matrix_rates;
  if(matrix_rates.CopyRates(Symbol(), PERIOD_CURRENTCOPY_RATES_OHLCT110))
    Print("matrix rates: \n"matrix_rates);
  else
    Print("matrix_rates.CopyRates failed. Error "GetLastError());
//--- 检查
  MqlRates mql_rates[];
  if(CopyRates(Symbol(), PERIOD_CURRENT110mql_rates)>0)
   {
    Print("mql_rates array:");
    ArrayPrint(mql_rates);
   }
  else
    Print("CopyRates(Symbol(), PERIOD_CURRENT,1, 10, mql_rates). Error "GetLastError());
//--- 获取报价至向量 = 无效调用
  vector vector_rates;
  if(vector_rates.CopyRates(Symbol(), PERIOD_CURRENTCOPY_RATES_OHLC115))
    Print("vector_rates COPY_RATES_OHLC: \n"vector_rates);
  else
    Print("vector_rates.CopyRates COPY_RATES_OHLC failed. Error "GetLastError());
//--- 获取收盘价至向量
  if(vector_rates.CopyRates(Symbol(), PERIOD_CURRENTCOPY_RATES_CLOSE115))
    Print("vector_rates COPY_RATES_CLOSE: \n"vector_rates);
  else
    Print("vector_rates.CopyRates failed. Error "GetLastError());
 };
/*
   matrix rates:
   [[0.99686,0.99638,0.99588,0.99441,0.99464,0.99594,0.99698,0.99758,0.99581,0.9952800000000001]
    [0.99708,0.99643,0.99591,0.9955000000000001,0.99652,0.99795,0.99865,0.99764,0.99604,0.9957]
    [0.9961100000000001,0.99491,0.99426,0.99441,0.99448,0.99494,0.9964499999999999,0.99472,0.9936,0.9922]
    [0.99641,0.99588,0.99441,0.99464,0.99594,0.99697,0.99758,0.99581,0.9952800000000001,0.99259]
    [1662436800,1662440400,1662444000,1662447600,1662451200,1662454800,1662458400,1662462000,1662465600,1662469200]]
   mql_rates array:
                    [time]  [open]  [high]   [low] [close] [tick_volume] [spread] [real_volume]
   [02022.09.06 04:00:00 0.99686 0.99708 0.99611 0.99641          4463        0             0
   [12022.09.06 05:00:00 0.99638 0.99643 0.99491 0.99588          4519        0             0
   [22022.09.06 06:00:00 0.99588 0.99591 0.99426 0.99441          3060        0             0
   [32022.09.06 07:00:00 0.99441 0.99550 0.99441 0.99464          3867        0             0
   [42022.09.06 08:00:00 0.99464 0.99652 0.99448 0.99594          5280        0             0
   [52022.09.06 09:00:00 0.99594 0.99795 0.99494 0.99697          7227        0             0
   [62022.09.06 10:00:00 0.99698 0.99865 0.99645 0.99758         10130        0             0
   [72022.09.06 11:00:00 0.99758 0.99764 0.99472 0.99581          7012        0             0
   [82022.09.06 12:00:00 0.99581 0.99604 0.99360 0.99528          6166        0             0
   [92022.09.06 13:00:00 0.99528 0.99570 0.99220 0.99259          6950        0             0
   vector_rates.CopyRates COPY_RATES_OHLC failedError 4003
   vector_rates COPY_RATES_CLOSE:
   [0.9931,0.99293,0.99417,0.99504,0.9968399999999999,0.99641,0.99588,0.99441,0.99464,0.99594,0.99697,0.99758,0.99581,0.9952800000000001,0.99259]
*/

参见

访问时间序列和指标CopyRates