经济日历。问题,讨论。

 

我想了解MQL5的经济日历 是如何运作的,但有些事情进展得不是很迅速。我花了昨天的大部分时间和今天的开始,但我仍然不明白为什么CalendarValueHistory没有返回所有的事件。或者,也许我把它们混淆了,这些事件有点...

昨天,我在日历上写的xx:45得到4个事件。我把事件的时间写成 "xx",因为收到的时间与表中的时间不一样。但至少可以理解,这是因为指定的时间与获得数据的终端或服务器的时间之间存在差异。但现在我只得到了3个:45分钟的事件,我不明白为什么。

还有一个问题要问开发者:为什么在数组中第一个日期2019.07.25 00:00和接下来的行是按升序排序的。请看结果列表。

2019.07.24 10:12:22.297 !00 (EURUSD,H1)        [id] [event_id]              [time]            [period] [revision]       [actual_value]         [prev_value] [revised_prev_value]     [forecast_value] [impact_type] [reserved]
2019.07.24 10:12:22.297 !00 (EURUSD,H1) [ 0]  96782   76020005 2019.07.25 00:00:00 1970.01.01 00:00:00          0 -9223372036854775808 -9223372036854775808 -9223372036854775808 -9223372036854775808             0          0
2019.07.24 10:12:22.297 !00 (EURUSD,H1) [ 1]  96840   76030003 2019.07.24 11:00:00 2019.07.01 00:00:00          0 -9223372036854775808             88500000 -9223372036854775808             91600000             0          0
2019.07.24 10:12:22.297 !00 (EURUSD,H1) [ 2] 100501  484020006 2019.07.24 11:00:00 2019.07.01 00:00:00          0 -9223372036854775808                10000 -9223372036854775808               110000             0          0
2019.07.24 10:12:22.297 !00 (EURUSD,H1) [ 3] 100502  484020007 2019.07.24 11:00:00 2019.07.01 00:00:00          0 -9223372036854775808               160000 -9223372036854775808               130000             0          0
// Пропущено, удалено вручную.
2019.07.24 10:12:22.297 !00 (EURUSD,H1) [59]  93627  410010001 2019.07.25 21:00:00 2019.07.01 00:00:00          0 -9223372036854775808             97500000 -9223372036854775808             97000000             0          0
2019.07.24 10:12:22.297 !00 (EURUSD,H1) [60]  87322  392030006 2019.07.25 23:30:00 2019.07.01 00:00:00          0 -9223372036854775808               900000 -9223372036854775808               900000             0          0
2019.07.24 10:12:22.297 !00 (EURUSD,H1) [61]  87323  392030004 2019.07.25 23:30:00 2019.07.01 00:00:00          0 -9223372036854775808              1100000 -9223372036854775808              1100000             0          0
2019.07.24 10:12:22.297 !00 (EURUSD,H1) [62]  87324  392030005 2019.07.25 23:30:00 2019.07.01 00:00:00          0 -9223372036854775808               800000 -9223372036854775808               800000             0          0
 

有些问题已经落下了。时间已经整理好了。事实证明这很简单。时间是格林尼治标准时间,而该网站是用GMT+3表示的,因此我所有的误解加起来。

这是第一个结果:接收的事件描述,图片中的第一行


2019.07.24 11:29:03.972 !00 (EURUSD,H1) время и дата события - 2019.07.24 13:45:00
2019.07.24 11:29:03.972 !00 (EURUSD,H1) идентификатор события - 840500001
2019.07.24 11:29:03.972 !00 (EURUSD,H1) тип события из перечисления ENUM_CALENDAR_EVENT_TYPE - CALENDAR_TYPE_INDICATOR
2019.07.24 11:29:03.972 !00 (EURUSD,H1) сектор, к которому относится событие - CALENDAR_SECTOR_BUSINESS
2019.07.24 11:29:03.972 !00 (EURUSD,H1) частота (периодичность) события - CALENDAR_FREQUENCY_MONTH
2019.07.24 11:29:03.972 !00 (EURUSD,H1) режим времени события - CALENDAR_TIMEMODE_DATETIME
2019.07.24 11:29:03.972 !00 (EURUSD,H1) идентификатор страны - 840
2019.07.24 11:29:03.972 !00 (EURUSD,H1) текстовое имя страны (в текущей кодировке терминала) - Соединенные Штаты
2019.07.24 11:29:03.972 !00 (EURUSD,H1) единица измерения значения экономического индикатора - CALENDAR_UNIT_NONE
2019.07.24 11:29:03.972 !00 (EURUSD,H1) важность события - CALENDAR_IMPORTANCE_MODERATE
2019.07.24 11:29:03.972 !00 (EURUSD,H1) множитель значения экономического индикатора - CALENDAR_MULTIPLIER_NONE
2019.07.24 11:29:03.972 !00 (EURUSD,H1) количество знаков после запятой - 1
2019.07.24 11:29:03.972 !00 (EURUSD,H1) URL источника, где публикуется событие - https://www.markiteconomics.com
2019.07.24 11:29:03.972 !00 (EURUSD,H1) код события - markit-manufacturing-pmi
2019.07.24 11:29:03.972 !00 (EURUSD,H1) текстовое имя события на языке терминала (в текущей кодировке терминала) - Индекс менеджеров по закупкам в производственном секторе от Markit
 

给开发者的问题。

为什么文档中的这段代码,在稍作修改后,会有这样的效果?

void OnStart()
{
   MqlCalendarValue values[]; 

//--- запросим историю событий от текущего времени до конца сегодняшнего дня.
   if(CalendarValueHistory(values,TimeCurrent(),iTime(_Symbol, PERIOD_D1, 0)+PeriodSeconds(PERIOD_D1))) 
     { 
      PrintFormat("Получены значения событий по country_code=%s: %d", ArraySize(values)); 
//--- выведем значения событий в Журнал 
      ArrayPrint(values);
      
     } 
   else 
     { 
      PrintFormat("Ошибка! Не удалось получить события по стране country_code=%s"); 
      PrintFormat("Код ошибки: %d",GetLastError()); 
     } 
//---
}

显示值数组的大小 为零,但还是打印出了日历中的所有内容。也就是说,所有的事件都被接收。

2019.07.24 15:20:33.131 !00 (EURUSD,H1) Получены значения событий по country_code=(non-string passed): 0
2019.07.24 15:20:33.131 !00 (EURUSD,H1)      [id] [event_id]              [time]            [period] [revision]       [actual_value] [prev_value] [revised_prev_value]     [forecast_value] [impact_type] [reserved]
2019.07.24 15:20:33.131 !00 (EURUSD,H1) [0] 97265   76020013 2019.07.24 15:30:00 1970.01.01 00:00:00          0 -9223372036854775808     -1227000 -9223372036854775808             -2405000             0          0
2019.07.24 15:20:33.131 !00 (EURUSD,H1) [1] 87842  840220012 2019.07.24 17:00:00 1970.01.01 00:00:00          0 -9223372036854775808      1791000 -9223372036854775808 -9223372036854775808             0          0
2019.07.24 15:20:33.131 !00 (EURUSD,H1) [2] 93625  410010011 2019.07.24 23:00:00 2019.04.01 00:00:00          1 -9223372036854775808      -400000 -9223372036854775808               400000             0          0
2019.07.24 15:20:33.131 !00 (EURUSD,H1) [3] 93626  410010012 2019.07.24 23:00:00 2019.04.01 00:00:00          1 -9223372036854775808      1700000 -9223372036854775808              2900000             0          0
2019.07.24 15:20:33.131 !00 (EURUSD,H1) [4] 87394  392060016 2019.07.24 23:50:00 2019.06.01 00:00:00          0 -9223372036854775808       800000 -9223372036854775808                    0             0          0
2019.07.24 15:20:33.131 !00 (EURUSD,H1) [5] 97012  392070003 2019.07.24 23:50:00 2019.07.20 00:00:00          0 -9223372036854775808    950000000 -9223372036854775808 -9223372036854775808             0          0
2019.07.24 15:20:33.131 !00 (EURUSD,H1) [6] 97013  392070004 2019.07.24 23:50:00 2019.07.20 00:00:00          0 -9223372036854775808    -93100000 -9223372036854775808 -9223372036854775808             0          0

在什么地方,什么地方没有时间工作?

 
格式行中 的%s是多余的
 
Renat Fatkhullin:
格式字符串%s是多余的

是的,谢谢你。我已经把这个问题解决了。我在修改文档中的例子时弄错了。

 

@Renat Fatkhullin Renat,我们能不能希望有一天能做一个类似TimeGMTOffset()的函数,只按服务器时间而不是按本地时间?因为经济日历功能使用的是GMT时间,而当地时间往往与服务器时间不一致。因此,当我得到新闻时间时,我需要将其转化为终端时间。我理解在周末调用这个函数时可能会有问题,但它可以检测到某种错误,即这个函数在这个时候不可用,或者其他什么。

到目前为止,我是这样做的:在OnInit()中计算时间差并写入全局变量。但我不太喜欢它。在我看来,最好是调用内置函数,将新闻时间调整为服务器时间。特别是终端可能在周末也有服务器的时间。

 
Alexey Viktorov:

@Renat Fatkhullin Renat,我们能不能希望有一天能做一个类似TimeGMTOffset()的函数,只按服务器时间而不是按本地时间?因为经济日历功能使用的是GMT时间,而当地时间往往与服务器时间不一致。因此,当我得到新闻时间时,我需要将其转化为终端时间。我理解在周末调用这个函数时可能会有问题,但有可能确定某种错误,即这个函数目前不可用或其他原因。

到目前为止,我是这样做的:在OnInit()中计算出时间差并写入全局变量。但我不太喜欢它。在我看来,最好是调用内置函数,将新闻时间调整为服务器时间。特别是终端可能在周末也有服务器的时间

当然可以,这已经被要求了。

 
Vitaly Muzichenko:

当然是可以的,这一点已经被要求了。

维塔利,任何要求都需要有正当理由。我希望我已经为这种功能的必要性提供了足够的论据。现在,这取决于公司程序员的工作量以及如何理解和接受这些论点。我希望如此。

 

从日历中可以收集到哪些信息:(软件使用的、对人类来说信息量不大的数值不在此列。)

  • 国家名称
  • 国家的货币
  • 事件类型

事件(集会、演讲等)。

指标

假日


  • 该事件所属的部门

市场,证券交易所

国内 生产总值(GDP)

劳动力市场

价格

奖金

贸易

政府

商业

消费量

住房

税收

假期


  • 终端语言中事件的文本名称(在终端的当前编码中)。
  • 活动的时间和日期
  • 事件的报告期
  • 参数的当前值
  • 参数的前值
  • 修订后的指标前值
  • 指标的预测值
  • 对货币汇率的潜在影响

未显示影响

积极的影响

负面的影响


不幸的是,除了禁止在新闻发布前开仓外,我还没有找到其他解决办法。我想找出其中哪些可以使用,以及如何应对它们。

按照我的理解,在决定如何对新闻做出反应时,突出的价值观非常重要,但我不明白怎么做。我邀请大家讨论。

 
Alexey Viktorov:

可以从日历中获得哪些信息:(程序使用的、对人类来说信息量不大的数值不在此列。)

  • 国家名称
  • 国家的货币
  • 事件类型

事件(集会、演讲等)。

指标

假日


  • 该事件所属的部门

市场,证券交易所

国内 生产总值(GDP)

劳动力市场

价格

奖金

贸易

政府

商业

消费量

住房

税收

假期


  • 终端语言中的事件文本名称(在终端的当前编码中)。
  • 活动的时间和日期
  • 事件的报告期
  • 参数的当前值
  • 参数的前值
  • 修订后的指标前值
  • 指标的预测值
  • 对货币汇率的潜在影响

未显示影响

积极的影响

负面的影响


不幸的是,除了禁止在新闻发布前开仓外,我还没有找到其他解决办法。我想找出其中哪些可以使用,以及如何对其作出反应。

按照我的理解,突出的价值观对于决定如何对新闻作出反应非常重要,但我不明白如何决定。我邀请大家讨论。

这里是我的新闻指标的变体。该终端按货币提供新闻发布时间的信息,还可选择重要程度。该信息在价格图表上显示为一条垂直线。在子窗口中,你可以看到最新数据值的柱状图,按时间顺序排列,相对于新闻的预测,它已被归类为重要。根据新闻的类型(利率、失业率、消费者价格指数、国内生产总值等),这些数值可以按时间顺序绘制出来。 在切换时间框架时,获得的图表在时间和规模上应与价格图表同步。 此外,我还对获得实际数据的速度感兴趣。

 
Vladimir Kononenko:

这里是我的新闻指标版本。它向终端提供你所选择的货币的新闻发布时间,其重要程度也是可以选择的。该信息在价格图表上以垂直线显示。在子窗口中,我们按照时间顺序,画出新闻的最新数据值的直方图,这些数据被归入重要级别。在切换TF时,获得的图表应与价格图表同步。获得实际数据的速度也是值得关注的。

你是指图表上可用的全部历史深度的柱状图吗?

但它并没有为实时应用提供任何信息。或者说我根本就没有明白什么?那么,预测值和当前值已经得到了,我们已经设置了直方图,然后呢?只能手动做出决定?

我没有检查过日历中更新数据的速度,应该测量接收准备好的数据的速度,但我没有这种愿望,因为速度相当高。