CalendarValueLast

Abrufen des Arrays der Werte für alle Ereignisse mit der Möglichkeit, nach Land und/oder Währung ab dem Status der Kalenderdatenbank mit der angegebenen change_id zu sortieren.

int  CalendarValueLast(
   ulong&               change_id,             // Änderungs-ID der Kalenderdatenbank
   MqlCalendarValue&    values[],              // Array der Wertbeschreibungen
   const string         country_code=NULL,     // Code-Name des Landes (ISO 3166-1 alpha-2)
   const string         currency=NULL          // Währungs-Code des Landes 
   );

Parameter

change_id

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

values[]

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

country_code=NULL

[in]  Code-Name des Landes (ISO 3166-1 alpha-2)

currency=NULL

[in]  Währungs-Code des Landes.

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

Alle Funktionen, die mit dem Wirtschaftskalender arbeiten, nutzen die Zeit des Handelsservers (TimeTradeServer). Das bedeutet, dass die Zeit in der Struktur MqlCalendarValue und die Zeitangaben der Funktionen CalendarValueHistoryByEvent/CalendarValueHistory in der Zeitzone des Handelsservers eingestellt sind und nicht in der lokalen Zeitzone des Nutzers.

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 change_id der Kalenderdatenbank diesem Parameter zugewiesen; und die Funktion gibt 0 zurück.

Zu dem Länder-Code country_code und der Währung : NULL und "" sind äquivalent und bedeuten, es wird nichts heraus gefiltert.

Für country_code, dem Feld des Codes in der Struktur MqlCalendarCountry, sollten zum Beispiel "US", "RU" oder "EU" verwendet werden.

Für currency, dem Feld der Währungen in der Struktur MqlCalendarCountry, sollten zum Beispiel "USD", "RUB" oder "EUR" verwendet werden.

Die Filter werden über ein logisches 'UND' verbunden und werden verwendet, um nur die Werte auszuwählen, für die zugleich beide Bedingungen (Land und Währung) zutreffen.

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.

Die Struktur von MqlCalendarValue bietet Methoden zum Prüfen und Setzen von Werten der Felder actual_value, forecast_value, prev_value und revised_prev_value. Wenn kein Wert angegeben wird, speichert das Feld LONG_MIN (-9223372036854775808).

Bitte beachten Sie, dass die in diesem Feld gespeicherten Werte mit einer Million multipliziert werden. Dies bedeutet, dass, wenn Sie Werte von MqlCalendarValue mithilfe der Funktionen CalendarValueById, CalendarValueHistoryByEvent, CalendarValueHistory, CalendarValueLastByEvent und CalendarValueLast abrufen, sollten Sie überprüfen, ob die Feldwerte gleich LONG_MIN sind; wenn in einem Feld ein Wert angegeben ist, sollten Sie den Wert durch 1.000.000 dividieren, um den Wert zu erhalten. Eine andere Methode zum Abrufen der Werte besteht darin, die Werte mit den Funktionen der Struktur MqlCalendarValue zu überprüfen und abzurufen.

Hier das Beispiel eines EAs, der auf Ereignisse des Wirtschaftskalenders wartet:

#property description "Die beispielsweise Verwendung der Funktion CalendarValueLast"
#property description " für die Entwicklung eines EAs, der auf die Ereignisse des Wirtschaftskalenders wartet."
#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;
//--- Array der Ereigniswerte
   MqlCalendarValue values[];
//--- die Initialisierung - Abrufen der aktuellen calendar_change_id
   if(first)
     {
      //--- Abrufen der Änderungs-ID der Kalenderdatenbank   
      if(CalendarValueLast(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 beim Abrufen des Ereignisses in CalendarValueLast. Fehlernummer: %d",
                        __FUNCTION__,error_code);
            //--- Aufgabe mit einem Fehler beendet, Reinitialisieren 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, ob es neue Kalenderereignisse gibt
   if(CalendarValueLast(calendar_change_id,values)>0)
     {
      PrintFormat("%s: Erhaltene neue Kalenderereignisse: %d",
                  __FUNCTION__,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);
      //--- Anzeige der neuen Ereignisse im Journal
      ArrayPrint(values);
      /* 
     Schreiben Sie hier Ihren Code, was beim Erscheinen von Ereignissen geschehen soll
      */
     }
//---     
  }
/*
  Beispiel für das Warten:
  OnTimer: Erhalten wurde die aktuelle ID der Kalenderdatenbank: change_id=33281792
  OnTimer: Erhalten wurden neue Ereignisse vom Kalender: 1
        [id] [event_id]              [time]            [period] [revision] [actual_value] [prev_value] [revised_prev_value] [forecast_value] [impact_type] [reserved]
   [0] 91040   76020013 2019.03.20 15:30:00 1970.01.01 00:00:00          0       -5077000     -1913000 -9223372036854775808         -4077000             2          0
  OnTimer: Vorheriges change_id=33281792, neues change_id=33282048
        [id] [event_id]              [time]            [period] [revision] [actual_value] [prev_value] [revised_prev_value] [forecast_value] [impact_type] [reserved]
   [0] 91040   76020013 2019.03.20 15:30:00 1970.01.01 00:00:00          0       -5077000     -1913000 -9223372036854775808         -4077000             2          0
  OnTimer: Erhalten wurden neue Ereignisse vom Kalender: 1
        [id] [event_id]              [time]            [period] [revision]       [actual_value] [prev_value] [revised_prev_value] [forecast_value] [impact_type] [reserved]
   [0] 91041   76020013 2019.03.27 15:30:00 1970.01.01 00:00:00          0 -9223372036854775808     -5077000 -9223372036854775808         -7292000             0          0
  OnTimer: Vorheriges change_id=33282048, neues change_id=33282560
        [id] [event_id]              [time]            [period] [revision]       [actual_value] [prev_value] [revised_prev_value] [forecast_value] [impact_type] [reserved]
   [0] 91041   76020013 2019.03.27 15:30:00 1970.01.01 00:00:00          0 -9223372036854775808     -5077000 -9223372036854775808         -7292000             0          0
 
*/  

Siehe auch

CalendarValueLast, CalendarValueHistory, CalendarValueHistoryByEvent, CalendarValueById