CalendarValueHistory
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(数组大小不足以接收所有值的描述,只可以接收那些适合的值)。
- 执行ArrayResize()失败的错误
注意
所有用于经济日历的函数都使用交易服务器时间(TimeTradeServer)。这意味着MqlCalendarValue结构中的时间和CalendarValueHistoryByEvent/CalendarValueHistory函数中输入的时间都在交易服务器时区中设置,而不是在用户本地时间设置。
如果固定长度的events[]数组被传递到函数且没有足够空间保存整个结果,则会激活ERR_CALENDAR_MORE_DATA (5400)错误。
如果datetime_to没有设置(或设置为0),那么返回在“日历”数据库中从指定datetime_from日期开始的所有事件值(包括未来事件的值)。
对于country_code和currency 过滤器,NULL和"“值是相同的,表示没有过滤器。
对于country_code,MqlCalendarCountry结构的code字段,例如应使用 “US”、“RU"或"EU”。
对于currency,MqlCalendarCountry结构的currency字段,例如应使用"USD”、“RUB"或"EUR”。
过滤器是通过连接使用的,即合理’AND’仅用于选择同时满足两个条件(国家和货币)的事件值。
MqlCalendarValue结构提供了检查和设置actual_value、forecast_value、prev_value和revised_prev_value字段值的方法。如果没有指定任何值,则该字段存储LONG_MIN (-9223372036854775808)。
请注意,存储在这些字段中的值要乘以100万。这表示当您使用函数CalendarValueById、CalendarValueHistoryByEvent、CalendarValueHistory、CalendarValueLastByEvent、CalendarValueLast接收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
*/另见
CalendarCountries, CalendarEventByCountry, CalendarValueHistoryByEvent, CalendarEventById, CalendarValueById