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