CalendarValueHistory

通过根据国家和/或货币进行排序的能力,获得指定时期的所有事件值数组。

bool  CalendarValueHistory(

   MqlCalendarValue&  values[],              // 值描述数组

   datetime           datetime_from,         // 时间范围的左边框

   datetime           datetime_to=0          //时间范围的右边框

   const string       country_code=NULL,     // 国家代码名称(ISO 3166-1 alpha-2)

   const string       currency=NULL          // 国家货币代码名称 

   );

参数

values[]

[out] MqlCalendarValue类型数组,用于接收事件值。

datetime_from

[in]  时间范围事件的初始日期通过指定ID选择,而datetime_from < datetime_to

datetime_to=0

[in]  时间范围事件的结束日期通过指定ID选择。如果datetime_to 没有设置(或设置为0),那么返回在“日历”数据库中从指定datetime_from日期开始的所有事件值(包括未来事件的值)。

country_code=NULL

[in]  国家代码名称(ISO 3166-1 alpha-2)

currency=NULL

[in]  国家货币代码名称。

返回值

如果成功返回true,否则返回false。若要获得有关错误的信息,请调用GetLastError()函数。可能错误:

  • 4001 – ERR_INTERNAL_ERROR(一般运行时错误)。
  • 4004 – ERR_NOT_ENOUGH_MEMORY(内存不足,无法执行请求)。
  • 5401 – ERR_CALENDAR_TIMEOUT(超过请求时限)。
  • 5400 – ERR_CALENDAR_MORE_DATA(数组大小不足以接收所有值的描述,只可以接收那些适合的值)。

注意

所有用于经济日历的函数都使用交易服务器时间(TimeTradeServer)。这意味着MqlCalendarValue结构中的时间和CalendarValueHistoryByEvent/CalendarValueHistory函数中输入的时间都在交易服务器时区中设置,而不是在用户本地时间设置。

如果固定长度的events[]数组被传递到函数且没有足够空间保存整个结果,则会激活ERR_CALENDAR_MORE_DATA (5400)错误。

如果datetime_to没有设置(或设置为0),那么返回在“日历”数据库中从指定datetime_from日期开始的所有事件值(包括未来事件的值)。

对于country_codecurrency 过滤器,NULL和""值是相同的,表示没有过滤器。

对于country_codeMqlCalendarCountry结构的code字段,例如应使用 "US"、"RU"或"EU"。

对于currencyMqlCalendarCountry结构的currency字段,例如应使用"USD"、"RUB"或"EUR"。

过滤器是通过连接使用的,即合理'AND'仅用于选择同时满足两个条件(国家和货币)的事件值。

MqlCalendarValue结构提供了检查和设置actual_value、forecast_value、prev_value和revised_prev_value字段值的方法。如果没有指定任何值,则该字段存储LONG_MIN (-9223372036854775808)。

请注意,存储在这些字段中的值要乘以100万。这表示当您使用函数CalendarValueByIdCalendarValueHistoryByEventCalendarValueHistoryCalendarValueLastByEventCalendarValueLast接收MqlCalendarValue中的值时,您应该检查该字段值是否等于LONG_MIN;如果在字段中指定一个值,那么您应该将该值除以1,000,000以获得该值。另一种获取该值的方法是使用MqlCalendarValue结构的函数检查和获取值。

例如:

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

//| 脚本程序起始函数                                                     |

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

void OnStart()

  {

//--- 欧盟国家代码(ISO 3166-1 Alpha-2)

   string EU_code="EU";

//--- 获得所有欧盟事件值

   MqlCalendarValue values[];

//--- 设置事件发生间隔的边界

   datetime date_from=D'01.01.2018';  // 获取2018年的所有事件

   datetime date_to=0;                // 0 指所有已知事件,包括尚未发生的事件 

//--- 请求2018年以来的欧盟事件历史

   if(CalendarValueHistory(values,date_from,date_to,EU_code))

     {

      PrintFormat("Received event values for country_code=%s: %d",

                  EU_code,ArraySize(values));

      //--- 减少输出到“日志”的数组大小

      ArrayResize(values,10);

//--- 在“日志”中显示事件值

      ArrayPrint(values);

     }

   else

     {

      PrintFormat("Error! Failed to receive events for country_code=%s",EU_code);

      PrintFormat("Error code: %d",GetLastError());

     }

//---

  }

/*

  结果:

  已接收的country_code=EU事件值:1384

        [id] [event_id]           [time]               [period] [revision]   [actual_value] [prev_value] [revised_prev_value] [forecast_value] [impact_type] [reserved]

   [0] 54215  999500001 2018.01.02 09:00:00 2017.12.01 00:00:00          3       60600000     60600000 -9223372036854775808         60500000             1          0

   [1] 54221  999500002 2018.01.04 09:00:00 2017.12.01 00:00:00          3       56600000     56500000 -9223372036854775808         56000000             1          0

   [2] 54222  999500003 2018.01.04 09:00:00 2017.12.01 00:00:00          3       58100000     58000000 -9223372036854775808         58400000             2          0

   [3] 45123  999030005 2018.01.05 10:00:00 2017.11.01 00:00:00          0         600000       400000 -9223372036854775808           100000             1          0

   [4] 45124  999030006 2018.01.05 10:00:00 2017.11.01 00:00:00          0        2800000      2500000 -9223372036854775808          1500000             1          0

   [5] 45125  999030012 2018.01.05 10:00:00 2017.12.01 00:00:00          1         900000       900000 -9223372036854775808          1000000             2          0

   [6] 45126  999030013 2018.01.05 10:00:00 2017.12.01 00:00:00          1        1400000      1500000 -9223372036854775808          1500000             2          0

   [7] 54953  999520001 2018.01.05 20:30:00 2018.01.02 00:00:00          0      127900000     92100000 -9223372036854775808         76400000             0          0

   [8] 22230  999040003 2018.01.08 10:00:00 2017.12.01 00:00:00          0        9100000      8200000              8100000          7600000             1          0

   [9] 22231  999040004 2018.01.08 10:00:00 2017.12.01 00:00:00          0       18400000     16300000             16400000         16800000             1          0

*/ 

另见

CalendarCountriesCalendarEventByCountryCalendarValueHistoryByEventCalendarEventById, CalendarValueById