Nachschlagewerk MQL5WirtschaftskalenderCalendarValueLastByEvent 

CalendarValueLastByEvent

Abrufen des Arrays der Ereigniswerte nach seiner ID seit dem Status der Kalenderdatenbank nach einer angegebenen change_id.

int  CalendarValueLastByEvent(
   ulong                event_id,      // Ereignis-ID
   ulong&               change_id,     // Änderungs-ID der Kalenderdatenbank
   MqlCalendarValue&    values[]       // Array der Wertbeschreibungen 
   );

Parameter

event_id

[in]  Ereignis-ID.

change_id

[in][out]  Änderungs-ID der Kalenderdatenbank.

values[]

[out]   Variable vom Typ MqlCalendarValue für die Übernahme der Ereigniswerte.

Rückgabewert

Anzahl der erhaltenen Ereigniswerte. Um Informationen über einen Fehler zu erhalten, rufen Sie die Funktion GetLastError() auf. Mögliche Fehler:

  • 4001 - ERR_INTERNAL_ERROR  (allgemeiner Laufzeitfehler),
  • 4004 – ERR_NOT_ENOUGH_MEMORY (nicht genügend Speicherplatz für die Ausführung der Anforderung),
  • 5401 - ERR_CALENDAR_TIMEOUT (Zeitlimit für Anfragen überschritten),
  • 5400 - ERR_CALENDAR_MORE_DATA (Array ist zu klein, um die Beschreibungen aller Werte zu übernehmen, es wurden nur diejenigen übernommen, die eingetragen werden konnten).

Hinweis

Wenn der Array events[] mit einer unveränderlichen Größe der Funktion übergeben wurde und die Größe für alle Ereignisse zu klein ist, wird der Fehler ERR_CALENDAR_MORE_DATA (5400) ausgeworfen.

Wenn change_id = 0 der Funktion übergeben wird, wird der Variablen das aktuelle change_id der Kalenderdatenbank diesem Parameter zugewiesen; und die Funktion gibt 0 (Anzahl der gefundenen Nachrichten) zurück.

Die Funktion gibt das Array der verlangten Nachrichten und ein neues change_id zurück, das für nachfolgende Aufrufe der Funktion verwendet werden, um neuen Werte dieser Nachricht abzufragen. Damit ist es möglich die Werte bestimmter Nachrichten zu aktualisieren, in dem einfach diese Funktion mit der letztbekannten change_id aufgerufen wird.

Wenn ein Ereigniswert keines der unten angeführten Felder aufweist

struct MqlCalendarValue
  {
   ...
   long              actual_value;              // aktueller Ereigniswert
   long              prev_value;                // vorheriger Ereigniswert
   long              revised_prev_value;        // revidierter, vorheriger Ereigniswert
   long              forecast_value;            // prognostizierter Ereigniswert
   ...
  };

dann wir der Wert von INT64_MIN (-9223372036854775808) für das fehlende Feld zurückgegeben.

Ein Beispiel-EA, der auf die Pressemeldung des US-Arbeitsmarkts (Nonfarm Payrolls) wartet:

#property description "Beispielsweise Verwendung der Funktion CalendarValueLastByEvent"
#property description ", mit der auf die Pressemeldung des US-Arbeitsmarkts (Nonfarm Payrolls) gewartet wird.
#property description "Dafür holt er sich die aktuelle Änderungs-ID"
#property description " der Kalenderdatenbank. Dann wird mit dieser ID"
#property description " und der Verwendung des Timers nur auf neue Ereignisse gewartet."
//+------------------------------------------------------------------+
//| Expert Initialisierungsfunktion |
//+------------------------------------------------------------------+
int OnInit()
  {
//--- Timer erstellen
   EventSetTimer(60);
//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Deinitialisierungsfunktion des Experten                          |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
//--- Timer löschen
   EventKillTimer();
  }
//+------------------------------------------------------------------+
//| Tick-Funktion des Experten                                       |
//+------------------------------------------------------------------+
void OnTick()
  {
//---
 
  }
//+------------------------------------------------------------------+
//| Timer Funktion                                                   |
//+------------------------------------------------------------------+
void OnTimer()
  {
//--- Änderungs-ID der Kalenderdatenbank
   static ulong calendar_change_id=0;
//--- Attribute beim ersten Start
   static bool first=true;
//--- Ereignis-ID  
   static ulong event_id=0;
//--- Ereignisname  
   static string event_name=NULL;
//--- Array der Ereigniswerte
   MqlCalendarValue values[];
//--- die Initialisierung - Abrufen der aktuellen calendar_change_id
   if(first)
     {
      MqlCalendarEvent events[];
      //--- Länder-Code für die USA (ISO 3166-1 Alpha-2) 
      string USA_code="US";
      //--- Abrufen der Ereignisse für die USA    
      int events_count=CalendarEventByCountry(USA_code,events);
      //--- Position des gesuchten Ereignisses im Array 'events'
      int event_pos=-1;
      //--- Anzeige der Ereignisse für die USA im Journal
      if(events_count>0)
        {
         PrintFormat("%s: USA -Ereignisse: %d",__FUNCTION__,events_count);
         for(int i=0;i<events_count;i++)
           {
            string event_name_low=events[i].name;
            //--- Ändern des Ereignisnamens in Kleinbuchstaben            
            if(!StringToLower(event_name_low))
              {
               PrintFormat("StringToLower() erzeugte den Fehler %d",GetLastError());
               //--- Funktion vorzeitig beendet
               return;
              }
            //--- Suche nach dem Ereignis "Nonfarm Payrolls"            
            if(StringFind(event_name_low,"nonfarm payrolls")!=-1)
              {
               //--- Ereignis gefunden, sichern der ID
               event_id=events[i].id;
               //--- Schreiben des Ereignisnamens von "Nonfarm Payrolls" 
               event_name=events[i].name;
               //--- Sichern der Position des Ereignisses im Array 'events[]'               
               event_pos=i;
               //--- Vergessen Sie nicht, dass der Kalender mehrere Ereignisse mit "nonfarm payrolls" in ihrem Namen hat.
               PrintFormat("Event \"Nonfarm Payrolls\" found: event_id=%d  event_name=%s",event_id,event_name);
               //--- Anzeigen aller Ereignisse durch das Auskommentieren von 'break' für ein besseres Verständnis des Beispiels
               break;
              }
           }
         //--- Reduzieren der Liste durch das Löschen aller Ereignisse nach "Nonfarm Payrolls"
         ArrayRemove(events,event_pos+1);
         //--- Es bleiben 9 Ereignisse vor "Nonfarm Payrolls" für eine leichtere Analyse         
         ArrayRemove(events,0,event_pos-9);
         ArrayPrint(events);
        }
      else
        {
         PrintFormat("%s: CalendarEventByCountry(%s) lieferte 0 Ereignisse, Fehlernummer=%d",
                     USA_code,__FUNCTION__,GetLastError());
         //--- Aufgabe mit einem Fehler beendet, neuer Versuch beim nächsten Aufruf des Timers         
         return;
        }
 
      //--- Abrufen der Änderungs-ID der Kalenderdatenbank für das angegebene Ereignis   
      if(CalendarValueLastByEvent(event_id,calendar_change_id,values)>0)
        {
         //--- dieser Teil des Codes wird nicht beim Erststart ausgeführt, aber er sei trotzdem hinzugefügt
         PrintFormat("%s: Abrufen der aktuellen Änderungs-ID der Kalenderdatenbank: change_id=%d",
                     __FUNCTION__,calendar_change_id);
         //--- Setzen des Flags und vor dem nächsten Ereignis des Timers zurückkehren
         first=false;
         return;
        }
      else
        {
         //--- es wurden keine Daten geliefert (das ist beim Erststart normal), ergo auf einen Fehler prüfen
         int error_code=GetLastError();
         if(error_code==0)
           {
            PrintFormat("%s: Abrufen der aktuellen Änderungs-ID der Kalenderdatenbank: change_id=%d",
                        __FUNCTION__,calendar_change_id);
            //--- Setzen des Flags und vor dem nächsten Ereignis des Timers zurückkehren
            first=false;
            //--- jetzt haben wir den Wert für calendar_change_id
            return;
           }
         else
           {
            //--- und das ist jetzt tatsächlich ein Fehler            
            PrintFormat("%s: Fehler bei Erhalt der Werte für event_id=%d",__FUNCTION__,event_id);
            PrintFormat("Fehlernummer: %d",error_code);
            //--- Aufgabe mit einem Fehler beendet, neuer Versuch beim nächsten Aufruf des Timers         
            return;
           }
        }
     }
 
//--- wir haben den letztbekannten Wert der Änderungs-ID der Kalenderdatenbank (change_id)
   ulong old_change_id=calendar_change_id;
//--- Prüfen auf einen neuen Ereigniswert für "Nonfarm Payrolls"
   if(CalendarValueLastByEvent(event_id,calendar_change_id,values)>0)
     {
      PrintFormat("%s: Erhalten neue Ereignisse für \"%s\": %d",
                  __FUNCTION__,event_name,ArraySize(values));
      //--- Anzeigen der Daten des Arrays 'values' im Journal 
      ArrayPrint(values);
      //--- Anzeigen der Werte der vorherigen und neuen Änderungs-IDs im Journal
      PrintFormat("%s: Vorheriges change_id=%d, neues change_id=%d",
                  __FUNCTION__,old_change_id,calendar_change_id);
/* 
      Schreiben Sie hier Ihren Code, was beim Erscheinen von "Nonfarm Payrolls" geschehen soll
      */
     }
//---     
  }
/*
  Ergebnis:
   OnTimer: USA Ereignisse: 202
  Event "Nonfarm Payrolls" found: event_id=840030016  event_name=Nonfarm Payrolls
            [id] [type] [sector] [frequency] [time_mode] [country_id] [unit] [importance] [multiplier] [digits]          [source_url]                             [event_code]                   [name] [reserved]
   [0] 840030007      1        4           2           0          840      1            1            0        1 "https://www.bls.gov" "consumer-price-index-yy"                "CPI y/y"                         0
   [1] 840030008      1        4           2           0          840      1            1            0        1 "https://www.bls.gov" "consumer-price-index-ex-food-energy-yy" "Core CPI y/y"                    0
   [2] 840030009      1        4           2           0          840      0            1            0        3 "https://www.bls.gov" "consumer-price-index-nsa"               "CPI n.s.a."                      0
   [3] 840030010      1        4           2           0          840      0            1            0        3 "https://www.bls.gov" "consumer-price-index-ex-food-energy"    "Core CPI"                        0
   [4] 840030011      1        4           2           0          840      1            1            0        1 "https://www.bls.gov" "import-price-index-mm"                  "Import Price Index m/m"          0
   [5] 840030012      1        4           2           0          840      1            1            0        1 "https://www.bls.gov" "import-price-index-yy"                  "Import Price Index y/y"          0
   [6] 840030013      1        4           2           0          840      1            1            0        1 "https://www.bls.gov" "export-price-index-mm"                  "Export Price Index m/m"          0
   [7] 840030014      1        4           2           0          840      1            1            0        1 "https://www.bls.gov" "export-price-index-yy"                  "Export Price Index y/y"          0
   [8] 840030015      1        3           2           0          840      1            2            0        1 "https://www.bls.gov" "unemployment-rate"                      "Unemployment Rate"               0
   [9] 840030016      1        3           2           0          840      4            3            1        0 "https://www.bls.gov" "nonfarm-payrolls"                       "Nonfarm Payrolls"                0
   OnTimer: Erhalten wurde die aktuelle ID der Kalenderdatenbank: change_id=33986560
 
*/  

Siehe auch

CalendarValueLast, CalendarValueHistory, CalendarValueHistoryByEvent, CalendarValueById