CopyRates

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

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

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

bool  CopyRates(

   string           symbol,       // 品名

   ENUM_TIMEFRAMES  period,       // 周期

   ulong            rates_mask,   // 指定所请求序列的标志组合

   ulong            start,        // 复制初始柱线的起始索引

   ulong            count         // 要复制的数量

   );

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

bool  CopyRates(

   string           symbol,       // 品名

   ENUM_TIMEFRAMES  period,       // 周期

   ulong            rates_mask,   // 指定所请求序列的标志组合

   datetime         from,         // 起始日期

   ulong            count         // 要复制的数量

   );

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

bool  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 开盘价、最高价、最低价、收盘价、和时间序列

示例:

//+------------------------------------------------------------------+

//| 脚本程序 start 函数                                                |

//+------------------------------------------------------------------+

void OnStart()

 {

//--- 获取报价至矩阵

  matrix matrix_rates;

  if(matrix_rates.CopyRates(Symbol(), PERIOD_CURRENT, COPY_RATES_OHLCT, 1, 10))

    Print("matrix rates: \n", matrix_rates);

  else

    Print("matrix_rates.CopyRates failed. Error ", GetLastError());

//--- 检查

  MqlRates mql_rates[];

  if(CopyRates(Symbol(), PERIOD_CURRENT, 1, 10, mql_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_CURRENT, COPY_RATES_OHLC, 1, 15))

    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_CURRENT, COPY_RATES_CLOSE, 1, 15))

    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]

   [0] 2022.09.06 04:00:00 0.99686 0.99708 0.99611 0.99641          4463        0             0

   [1] 2022.09.06 05:00:00 0.99638 0.99643 0.99491 0.99588          4519        0             0

   [2] 2022.09.06 06:00:00 0.99588 0.99591 0.99426 0.99441          3060        0             0

   [3] 2022.09.06 07:00:00 0.99441 0.99550 0.99441 0.99464          3867        0             0

   [4] 2022.09.06 08:00:00 0.99464 0.99652 0.99448 0.99594          5280        0             0

   [5] 2022.09.06 09:00:00 0.99594 0.99795 0.99494 0.99697          7227        0             0

   [6] 2022.09.06 10:00:00 0.99698 0.99865 0.99645 0.99758         10130        0             0

   [7] 2022.09.06 11:00:00 0.99758 0.99764 0.99472 0.99581          7012        0             0

   [8] 2022.09.06 12:00:00 0.99581 0.99604 0.99360 0.99528          6166        0             0

   [9] 2022.09.06 13:00:00 0.99528 0.99570 0.99220 0.99259          6950        0             0

   vector_rates.CopyRates COPY_RATES_OHLC failed. Error 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