Calendrier économique. Questions, discussions.

 

Je veux comprendre comment fonctionne le calendrier économique de MQL5, mais quelque chose ne va pas très vite. J'ai passé la majeure partie de la journée d'hier et le début de celle d'aujourd'hui, mais je ne comprends toujours pas pourquoi CalendarValueHistory ne renvoie pas tous les événements. Ou peut-être que je les confonds un peu, ces événements...

Hier, je recevais 4 événements à xx:45 comme indiqué dans le calendrier. J'écris les heures de l'événement comme "xx" parce que l'heure reçue n'est pas la même que celle du tableau. Mais on peut au moins comprendre que cela est dû à la différence entre l'heure du terminal et l'heure du terminal ou du serveur d'où les données ont été reçues. Mais maintenant je n'ai que 3 événements avec le temps :45 et je ne peux pas comprendre pourquoi.

Et question aux développeurs : Pourquoi dans le tableau la première date 2019.07.25 00:00 et les lignes suivantes sont triées par ordre croissant. Voir la liste qui en résulte.

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
 

Certaines questions sont tombées. L'heure a été fixée. Il s'est avéré que c'était simple. L'heure est GMT, et le site était représenté par GMT+3, d'où l'addition de tous mes malentendus.

Voici le premier résultat : description de l'événement reçu, première ligne dans l'image


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
 

Question pour les développeurs :

Pourquoi ce code issu de la documentation, avec des modifications mineures

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()); 
     } 
//---
}

montre que la taille du tableau de valeurs est nulle, mais imprime néanmoins tout ce qui se trouve dans le calendrier. C'est-à-dire que tous les événements sont reçus.

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

Où, qu'est-ce qui n'a pas le temps de travailler ?

 
Dans la ligne de format %s est superflu
 
Renat Fatkhullin:
Dans la chaîne de format %s est redondant

Oui, merci. J'ai déjà réglé ce problème. Je me suis trompé en fixant l'exemple de la documentation.

 

@Renat Fatkhullin Renat, peut-on espérer qu'un jour une fonction comme TimeGMTOffset() sera faite, uniquement par l'heure du serveur et non par l'heure locale ? En effet, les fonctions du calendrier économique utilisent l'heure GMT et l'heure locale ne coïncide souvent pas avec l'heure du serveur. Donc, quand j'ai l'heure des nouvelles, je dois la traduire en heure terminale. Je comprends qu'il peut y avoir des problèmes lorsqu'on appelle cette fonction le week-end, mais on peut détecter une sorte d'erreur, que cette fonction n'est pas disponible à ce moment-là, ou autre.

Jusqu'à présent, j'ai fait comme ceci : dans OnInit() la différence de temps est calculée et écrite dans une variable globale. Mais je n'aime pas vraiment ça. À mon avis, il serait préférable d'appeler la fonction intégrée et d'ajuster l'heure des nouvelles à l'heure du serveur. En particulier, le terminal a probablement du temps de serveur disponible les week-ends également.

 
Alexey Viktorov:

@Renat Fatkhullin Renat, peut-on espérer qu'un jour une fonction comme TimeGMTOffset() sera faite, uniquement par l'heure du serveur et non par l'heure locale ? En effet, les fonctions du calendrier économique utilisent l'heure GMT et l'heure locale ne coïncide souvent pas avec l'heure du serveur. Donc, quand j'ai l'heure des nouvelles, je dois la traduire en heure terminale. Je comprends qu'il peut y avoir des problèmes lorsqu'on appelle cette fonction le week-end, mais il est possible de déterminer une sorte d'erreur, que cette fonction n'est pas disponible en ce moment ou autre chose.

Jusqu'à présent, j'ai fait ce qui suit : dans OnInit() la différence de temps est calculée et écrite dans la variable globale. Mais je n'aime pas vraiment ça. À mon avis, il serait préférable d'appeler la fonction intégrée et d'ajuster l'heure des nouvelles à l'heure du serveur. En particulier, le terminal a probablement du temps de serveur disponible les week-ends également.

Bien sûr qu'il est disponible, cela a déjà été demandé.

 
Vitaly Muzichenko:

Bien sûr qu'il est disponible, cela a déjà été demandé.

Vitaly, toute demande doit être justifiée. J'espère avoir fourni suffisamment d'arguments pour justifier la nécessité d'une telle fonction. Maintenant, cela dépend de la charge de travail des programmeurs de l'entreprise et de la manière dont les arguments sont compris et acceptés. Je l'espère.

 

Quelles sont les informations qui peuvent être glanées dans le calendrier : (Les valeurs qui sont utilisées par le logiciel et qui sont de peu d'information pour les humains ne sont pas listées ici)

  • Nom du pays
  • Monnaie des pays
  • type d'événement

Événement (rassemblement, discours, etc.)

Indicateur

Vacances


  • Secteur auquel appartient l'événement

Marché, bourse

Produit intérieur brut (PIB)

Marché du travail

Prix

Argent

Commerce

Gouvernement

Entreprise

Consommation

Logement

Taxes

Vacances


  • nom textuel de l'événement dans la langue du terminal (dans l'encodage actuel du terminal)
  • l'heure et la date de l'événement
  • période de référence de l'événement
  • valeur actuelle du paramètre
  • valeur précédente du paramètre
  • valeur précédente révisée de l'indicateur
  • valeur prévue de l'indicateur
  • impact potentiel sur le taux de change

Aucun impact indiqué

Impact positif

Impact négatif


Malheureusement, à part l'interdiction d'ouvrir des positions avant les communiqués de presse, je n'ai pas trouvé d'autres solutions. Je veux savoir lesquels d'entre eux peuvent être utilisés et comment y réagir.

D'après ce que je comprends, les valeurs mises en avant sont très importantes pour décider comment réagir à la nouvelle, mais je ne comprends pas comment. J'invite à la discussion.

 
Alexey Viktorov:

Quelles informations peuvent être obtenues à partir du calendrier : (Les valeurs qui sont utilisées par le programme et qui sont de peu d'information pour les humains ne sont pas listées ici)

  • Nom du pays
  • Monnaie des pays
  • type d'événement

Événement (rassemblement, discours, etc.)

Indicateur

Vacances


  • Secteur auquel appartient l'événement

Marché, bourse

Produit intérieur brut (PIB)

Marché du travail

Prix

Argent

Commerce

Gouvernement

Entreprise

Consommation

Logement

Taxes

Vacances


  • nom textuel de l'événement dans la langue du terminal (dans l'encodage actuel du terminal)
  • l'heure et la date de l'événement
  • période de référence de l'événement
  • valeur actuelle du paramètre
  • valeur précédente du paramètre
  • valeur précédente révisée de l'indicateur
  • valeur prévisionnelle d'un indicateur
  • impact potentiel sur le taux de change

Aucun impact indiqué

Impact positif

Impact négatif


Malheureusement, à part l'interdiction d'ouvrir des positions avant les communiqués de presse, je n'ai pas trouvé d'autres solutions. Je veux savoir lesquels d'entre eux peuvent être utilisés et comment y réagir.

Si je comprends bien, les valeurs mises en avant sont très importantes pour décider comment réagir à la nouvelle, mais je ne comprends pas comment. J'invite à la discussion.

Voici ma variante de l'indicateur de nouvelles. Le terminal fournit des informations sur l'heure de publication des nouvelles par devises, le degré d'importance est également sélectionné. L'info est représentée par une ligne verticale sur le graphique des prix. Dans la sous-fenêtre, vous pouvez voir l'histogramme des dernières valeurs de données, par ordre chronologique, par rapport à la prévision de la nouvelle, qui a été classée comme importante. Selon le type de nouvelles (taux d'intérêt, taux de chômage, indice des prix à la consommation, PIB, etc.), les valeurs peuvent être tracées par ordre chronologique. Le graphique obtenu doit être synchronisé en temps et en échelle avec le graphique des prix lorsque l'on change de cadre temporel. Je suis également intéressé par la vitesse d'obtention des données réelles.

 
Vladimir Kononenko:

Voici ma version de l'indicateur de nouvelles. Il alimente le terminal avec les heures de publication des nouvelles pour les devises de votre choix, le degré d'importance est également sélectionnable. L'information est affichée par une ligne verticale sur le graphique des prix. Dans la sous-fenêtre, nous dessinons, dans l'ordre chronologique, un histogramme des dernières valeurs de données des nouvelles, qui sont attribuées à la classe-important. Le graphique obtenu doit être synchronisé dans le temps avec le graphique des prix lors du changement de TF. La rapidité d'obtention des données réelles est également intéressante.

Voulez-vous dire des histogrammes pour toute la profondeur de l'historique disponible sur le graphique ?

Mais il ne donne aucune information pour une application en temps réel. Ou ai-je complètement mal compris ? Bon, on a obtenu la prévision et la valeur actuelle, on a mis en place l'histogramme, et puis ? Prendre une décision uniquement manuellement ?

Je n'ai pas vérifié la vitesse de mise à jour des données dans le calendrier, et la vitesse de réception des données prêtes devrait être mesurée, mais je n'en ai pas envie, car la vitesse est assez élevée.

Raison: