CalendarValueLast

Retourne le tableau des valeurs de tous les évènements, avec la possibilité de trier par pays et/devise depuis le statut de la base de données du calendrier avec un change_id spécifié.

int  CalendarValueLast(
   ulong&               change_id,             // identifiant de la valeur de l'évènement 
   MqlCalendarValue&    values[],              // tableau des descriptions des valeurs 
   const string         country_code=NULL,     // nom du code du pays (ISO 3166-1 alpha-2)
   const string         currency=NULL          // nom du code de la devise du pays
   );

Paramètres

change_id

[in][out]  Identifiant du changement.

values[]

[out]  Tableau d'éléments de type MqlCalendarValue pour retourner les valeurs des évènements. Voir l'exemple de gestion des événements du calendrier.

country_code=NULL

[in]  Nom du code du pays (ISO 3166-1 alpha-2)

currency=NULL

[in]  Nom du code de la devise du pays.

Valeur de Retour

Nombre de valeurs d'évènements retournées. Pour obtenir des informations sur une erreur, appelez la fonction GetLastError(). Erreurs possibles :

  • 4001 — ERR_INTERNAL_ERROR  (erreur générale d'exécution),
  • 4004 — ERR_NOT_ENOUGH_MEMORY (pas assez de mémoire pour exécuter une requête),
  • 5401 — ERR_CALENDAR_TIMEOUT (limite de temps de traitement de la requête atteinte),
  • 5400 — ERR_CALENDAR_MORE_DATA (la taille du tableau est insuffisante pour recevoir les descriptions de toutes les valeurs, toutes les descriptions ne seront pas retournées).

Note

Toutes les fonctions permettant de travailler avec le calendrier économique utilisent l’heure du serveur de trading(TimeTradeServer). Cela signifie que l'heure dans la structure MqlCalendarValue et l'heure donnée dans les fonctions CalendarValueHistoryByEvent/CalendarValueHistory sont définies dans le fuseau horaire du serveur de trading, et non pas selon l'heure locale de l'utilisateur.

Si le tableau events[] de taille fixe passé à la fonction n'est pas assez grand, l'erreur ERR_CALENDAR_MORE_DATA (5400) est générée.

Si change_id = 0 est passé à la fonction, la fonction retourne toujours 0 et la valeur de la base de données du calendrier courant est retournée dans change_id.

Pour les filtres country_code et currency , les valeurs NULL et "" sont équivalentes et signifie l'absence de filtre.

Pour country_code, le champ code de la structure MqlCalendarCountry, par exemple "US", "RU" ou "EU", doit être utilisé.

Pour currency, le champ currency de la structure MqlCalendarCountry, par exemple "USD", "RUB" ou "EUR", doit être utilisé.

Les filtres sont ajoutés les uns aux autres, c'est à dire que le 'ET' logique est utilisé pour ne sélectionner que les valeurs des évènements remplissant les 2 conditions (pays et devise).

La fonction retourne le tableau des nouvelles spécifiées et un nouveau change_id qui peut être utilisé pour les appels ultérieurs à la fonction pour recevoir les nouvelles valeurs des évènements. Il est donc possible de mettre à jour les valeurs pour une nouvelle spécifiée en appelant cette fonction avec le dernier change_id connu.

La structure MqlCalendarValue fournit des méthodes pour vérifier et définir les valeurs des champs actual_value, forecast_value, prev_value et revised_prev_value. Si aucune valeur n'est spécifiée, le champ stocke LONG_MIN (-9223372036854775808).

Veuillez noter que les valeurs stockées dans ces champs sont multipliées par un million. Cela signifie que lorsque vous recevez des valeurs dans MqlCalendarValue à l'aide des fonctions CalendarValueById, CalendarValueHistoryByEvent, CalendarValueHistory, CalendarValueLastByEvent et CalendarValueLast, vous devez vérifier si les valeurs des champs sont égales à LONG_MIN ; si une valeur est spécifiée dans un champ, vous devez diviser la valeur par 1 000 000 afin d'obtenir la valeur. Une autre méthode pour obtenir les valeurs consiste à vérifier et à obtenir des valeurs en utilisant les fonctions de la structure MqlCalendarValue.

L'échantillon EA écoutant les événements du calendrier économique :

#property description "Exemple d'utilisation de la fonction CalendarValueLast"
#property description " pour développer le listener des évènements du calendrier économique."
#property description "Pour cela, récupère l'identifiant du changement courant"
#property description " de la base de données du Calendrier. Utilise ensuite cet identifiant pour ne récupérer"
#property description " que les nouveaux évènements via le timer"
//+------------------------------------------------------------------+
//| Fonction d'initialisation de l'expert                            |
//+------------------------------------------------------------------+
int OnInit()
  {
//--- crée le timer
   EventSetTimer(60);
//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Fonction de désinitialisation de l'expert                        |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
//--- détruit le timer
   EventKillTimer();
  }
//+------------------------------------------------------------------+
//| Fonction tick de l'expert                                        |
//+------------------------------------------------------------------+
void OnTick()
  {
//---
 
  }
//+------------------------------------------------------------------+
//| Fonction Timer                                                   |
//+------------------------------------------------------------------+
void OnTimer()
  {
//--- Identifiant de changement de la base de données du Calendrier
   static ulong calendar_change_id=0;
//--- attribut de 1er lancement
   static bool first=true;
//--- tableau de valeurs des évènements
   MqlCalendarValue values[];
//--- effecture l'initialisation - récupère le calendar_change_id courant
   if(first)
     {
      //--- récupère l'identifiant de changement de la base de données du Calendrier
      if(CalendarValueLast(calendar_change_id,values)>0)
        {
         //--- ce bloc de code ne peut pas être exécuté pendant le 1er lancement, mais nous pouvons quand même l'ajouter
         PrintFormat("%s: Identifiant reçu courant de la base de données du Calendrier : change_id=%d",
                     __FUNCTION__,calendar_change_id);
         //--- définit le flag et sort avant le prochain évènement du timer
         first=false;
         return;
        }
      else
        {
         //--- les données ne sont pas reçus (normal au 1er lancement), vérifie s'il y a une erreur
         int error_code=GetLastError();
         if(error_code==0)
           {
            PrintFormat("%s: Identifiant courant reçu de la base de données du Calendrier: change_id=%d",
                        __FUNCTION__,calendar_change_id);
            //--- définit le flag et sort avant le prochain évènement du timer
            first=false;
            //--- nous avons maintenant la valeur de calendar_change_id
            return;
           }
         else
           {
            //--- c'est vraiment une erreur
            PrintFormat("%s: Echec de l'obtention des évènements dans CalendarValueLast. Code d'erreur : %d",
                        __FUNCTION__,error_code);
            //--- opération terminée en erreur, réinitialisation lors du prochain appel du timer
            return;
           }
        }
     }
 
//--- nous avons la dernière valeur connue de l'identifiant du changement du calendrier (change_id)
   ulong old_change_id=calendar_change_id;
//--- vérifie s'il y a de nouveaux évènements dans le Calendrier
   if(CalendarValueLast(calendar_change_id,values)>0)
     {
      PrintFormat("%s: Nouveaux évènements reçus du Calendrier: %d",
                  __FUNCTION__,ArraySize(values));
      //--- affiche les données du tableau 'values' dans le Journal 
      ArrayPrint(values);
      //--- affiche les valeurs des identifiants précédents et des nouveaux dans le Journal
      PrintFormat("%s: change_id précédent=%d, nouveau change_id=%d",
                  __FUNCTION__,old_change_id,calendar_change_id);
      //--- affiche les nouveaux évènements dans le Journal
      ArrayPrint(values);
      /* 
     écrivez ici votre code pour gérer la survenue d'évènements
      */
     }
//---     
  }
/*
  Exemple d'utilisation du listener :
  OnTimer: Identifiant courant reçu de la base de données du Calendrier: change_id=33281792
  OnTimer: Nouveaux évènements reçus du Calendrier: 1
       [id] [id_évènement]          [date_heure]      [période][révision] [valeur_actuelle][valeur_prec][val_prec_révisée] [valeur_prévue] [type_impact] [réservé]
   [0] 91040   76020013 2019.03.20 15:30:00 1970.01.01 00:00:00          0       -5077000     -1913000 -9223372036854775808         -4077000             2          0
  OnTimer: change_id précédent=33281792, nouveau change_id=33282048
       [id] [id_évènement]          [date_heure]      [période][révision] [valeur_actuelle][valeur_prec][val_prec_révisée] [valeur_prévue] [type_impact] [réservé]
   [0] 91040   76020013 2019.03.20 15:30:00 1970.01.01 00:00:00          0       -5077000     -1913000 -9223372036854775808         -4077000             2          0
  OnTimer: Nouveaux évènements reçus du Calendrier: 1
       [id] [id_évènement]          [date_heure]      [période][révision]       [valeur_actuelle][valeur_prec][val_prec_révisée] [valeur_prévue] [type_impact] [réservé]
   [0] 91041   76020013 2019.03.27 15:30:00 1970.01.01 00:00:00          0 -9223372036854775808     -5077000 -9223372036854775808         -7292000             0          0
  OnTimer: change_id précédent=33282048, nouveau change_id=33282560
       [id] [id_évènement]          [date_heure]      [période][révision]       [valeur_actuelle][valeur_prec][val_prec_révisée] [valeur_prévue] [type_impact] [réservé]
   [0] 91041   76020013 2019.03.27 15:30:00 1970.01.01 00:00:00          0 -9223372036854775808     -5077000 -9223372036854775808         -7292000             0          0
 
*/  

Voir aussi

CalendarValueLast, CalendarValueHistory, CalendarValueHistoryByEvent, CalendarValueById