Struktur des Wirtschaftskalenders

Dieser Abschnitt beschreibt die Funktionen für das Arbeiten mit dem Wirtschaftskalender, die direkt auf der MetaTrader-Plattform verfügbar sind. Der Wirtschaftskalender ist eine vorgefertigte Enzyklopädie mit Beschreibungen makroökonomischer Indikatoren, deren Veröffentlichungsterminen und Wichtigkeitsmerkmalen. Relevante Werte makroökonomischer Indikatoren werden direkt zum Zeitpunkt der Veröffentlichung an die MetaTrader-Plattform gesendet und in einem Chart als Tags angezeigt, mit denen Sie die erforderlichen Indikatoren nach Ländern, Währungen und Bedeutung visuell verfolgen können.

Die Funktionen des Wirtschaftskalenders ermöglichen die automatische Analyse eingehender Ereignisse nach benutzerdefinierten Wichtigkeitskriterien aus der Perspektive der benötigten Länder/Währungspaare.

Länderbeschreibungen werden von der Struktur MqlCalendarCountry gesetzt. Sie wird in den Funktionen CalendarCountryById() und CalendarCountries() verwendet.

struct MqlCalendarCountry
  {
   ulong                               id;                    // Länder-ID (ISO 3166-1)
   string                              name;                  // Ländername in Textform (in der aktuellen Kodierung des Terminals)
   string                              code;                  // Länder-Code (ISO 3166-1 alpha-2)
   string                              currency;              // Währungs-Code des Landes
   string                              currency_symbol;       // Symbol der Landeswährung
   string                              url_name;              // URL-Landesname, wie er auf der Website von mql5.com verwendet wird
  };

 

Ereignisbeschreibungen werden mit der Struktur MqlCalendarEvent dargestellt. Sie wird in den Funktionen CalendarEventById(), CalendarEventByCountry() und CalendarEventByCurrency() verwendet.

struct MqlCalendarEvent
  {
   ulong                               id;                    // Ereignis-ID
   ENUM_CALENDAR_EVENT_TYPE            type;                  // Ereignis-Typ entsprechend der Enumeration ENUM_CALENDAR_EVENT_TYPE
   ENUM_CALENDAR_EVENT_SECTOR          sector;                // der Sektor des Ereignisses
   ENUM_CALENDAR_EVENT_FREQUENCY       frequency;             // Häufigkeit des Ereignisses
   ENUM_CALENDAR_EVENT_TIMEMODE        time_mode;             // Zeitmodus eines Ereignisses
   ulong                               country_id;            // Länder-ID
   ENUM_CALENDAR_EVENT_UNIT            unit;                  // Maßeinheit des Wertes eines Ereignisses
   ENUM_CALENDAR_EVENT_IMPORTANCE      importance;            // Wichtigkeit des Ereignisses
   ENUM_CALENDAR_EVENT_MULTIPLIER      multiplier;            // Multiplikator des Wertes des Wirtschaftsindikators
   uint                                digits;                // Anzahl der Dezimalstellen
   string                              source_url;            // URL der Quelle, wo das Ereignis veröffentlicht wird
   string                              event_code;            // Ereignis-Code
   string                              name;                  // Textname des Ereignisses in der Terminalsprache (in der aktuellen Kodierung des Terminals)
  };

 

Ereigniswerte werden mit der Struktur MqlCalendarValue dargestellt. Sie wird in den Funktionen CalendarValueById(), CalendarValueHistoryByEvent(), CalendarValueHistory(), CalendarValueLastByEvent() und CalendarValueLast() verwendet

struct MqlCalendarValue
  {
   ulong                               id;                    // Werte-ID
   ulong                               event_id;              // Ereignis-ID
   datetime                            time;                  // Datum und Zeit des Ereignisses
   datetime                            period;                // Ereignisberichtszeitraum
   int                                 revision;              // Revision des veröffentlichten Indikators in Bezug auf den Berichtszeitraum
   long                                actual_value;          // aktueller Wert in ppm oder LONG_MIN, wenn der Wert nicht gesetzt wurde
   long                                prev_value;            // vorheriger Wert in ppm oder LONG_MIN, wenn der Wert nicht gesetzt wurde
   long                                revised_prev_value;    // revidierter vorheriger Wert in ppm oder LONG_MIN, wenn der Wert nicht gesetzt wurde
   long                                forecast_value;        // prognostizierter Wert in ppm oder LONG_MIN, wenn der Wert nicht gesetzt wurdet
   ENUM_CALENDAR_EVENT_IMPACT          impact_type;           // mögliche Auswirkung auf die Währungskurse
  //--- Funktionen zur Prüfung der Werte
   bool                         HasActualValue(voidconst;   // Rückgabe von true, wenn der Wert gesetzt wurde
   bool                         HasPreviousValue(voidconst; // Rückgabe von true, wenn der vorherige Wert gesetzt wurde
   bool                         HasRevisedValue(voidconst;  // Rückgabe von true, wenn der revidierte, vorherige Wert gesetzt wurde
   bool                         HasForecastValue(voidconst; // Rückgabe von true, wenn der prognostizierte Wert gesetzt wurde
  //--- Funktionen zur Rückgabe der Werte
   double                       GetActualValue(voidconst;   // Rückgabe des aktuellen Wertes oder nan, wenn er nicht gesetzt wurde
   double                       GetPreviousValue(voidconst; // Rückgabe des vorherigen Wertes oder nan, wenn er nicht gesetzt wurde
   double                       GetRevisedValue(voidconst;  // Rückgabe des revidierten vorherigen Wertes oder nan, wenn er nicht gesetzt wurde
   double                       GetForecastValue(voidconst; // Rückgabe des prognostizierten Wertes oder nan, wenn er nicht gesetzt wurde
  };

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.

Ein Beispiel für den Umgang mit Kalenderereignissen:

//--- Erstellen einer Struktur zum Speichern von Kalenderereignissen mit reellen Werten anstelle von ganzen Zahlen
struct AdjustedCalendarValue
  {
   ulong                               id;                    // Werte-ID
   ulong                               event_id;              // Ereignis-ID
   datetime                            time;                  // Datum und Zeit des Ereignisses
   datetime                            period;                // Ereignisberichtszeitraum
   int                                 revision;              // Revision des veröffentlichten Indikators in Bezug auf den Berichtszeitraum
   double                              actual_value;          // aktueller Wert
   double                              prev_value;            // vorheriger Wert
   double                              revised_prev_value;    // revidierter, vorheriger Wert
   double                              forecast_value;        // prognostizierter Wert value
   ENUM_CALENDAR_EVENT_IMPACT          impact_type;           // mögliche Auswirkung auf die Währungskurse
  };
//+------------------------------------------------------------------+
//| Skript Programm Start Funktion                                   |
//+------------------------------------------------------------------+
void OnStart()
  {
//---
//--- Länder-Code der EU (ISO 3166-1 Alpha-2)
   string EU_code="EU";
//--- Abrufen aller Ereigniswerte der EU
   MqlCalendarValue values[];
//--- Festlegen der Zeitgrenzen des Intervalls für die Ereignisse
   datetime date_from=D'01.01.2021';  // Abfrage aller Ereignisse von 2021
   datetime date_to=0;                // 0 bedeutet alle bekannten Ereignisse, einschließlich derer, die noch nicht eingetreten sind
//--- Abfrage der Ereignishistorie der EU seit 2021
   if(!CalendarValueHistory(valuesdate_fromdate_toEU_code))
     {
      PrintFormat("Fehler! Es konnten keine Ereignisse für country_code=%sEU_code abgerufen werden.");
      PrintFormat("Fehlernummer: %d"GetLastError());
      return;
     }
   else
      PrintFormat("Erhaltene Ereigniswerte für country_code=%s: %d",
                  EU_codeArraySize(values));
//--- die Größe des Arrays für die Ausgabe an das Journal zu reduzieren
   if(ArraySize(values)>5)
      ArrayResize(values5);
//--- Ausgabe von Ereigniswerten in das Journal, wie sie sind, ohne Prüfung oder Umwandlung in tatsächliche Werte
   Print("Ausgabe der Kalenderwerte wie sie sind");
   ArrayPrint(values);
 
//--- Überprüfung der Feldwerte und Konvertierung in tatsächliche Werte
//--- Option 1 zum Prüfen und Abrufen der Werte
   AdjustedCalendarValue values_adjusted_1[];
   int total=ArraySize(values);
   ArrayResize(values_adjusted_1total);
//--- Kopieren der Werte mit Kontrollen und Anpassungen
   for(int i=0i<totali++)
     {
      values_adjusted_1[i].id=values[i].id;
      values_adjusted_1[i].event_id=values[i].event_id;
      values_adjusted_1[i].time=values[i].time;
      values_adjusted_1[i].period=values[i].period;
      values_adjusted_1[i].revision=values[i].revision;
      values_adjusted_1[i].impact_type=values[i].impact_type;
      //--- Werte prüfen und durch 1.000.000 dividieren
      if(values[i].actual_value==LONG_MIN)
         values_adjusted_1[i].actual_value=double("nan");
      else
         values_adjusted_1[i].actual_value=values[i].actual_value/1000000.;
 
      if(values[i].prev_value==LONG_MIN)
         values_adjusted_1[i].prev_value=double("nan");
      else
         values_adjusted_1[i].prev_value=values[i].prev_value/1000000.;
 
      if(values[i].revised_prev_value==LONG_MIN)
         values_adjusted_1[i].revised_prev_value=double("nan");
      else
         values_adjusted_1[i].revised_prev_value=values[i].revised_prev_value/1000000.;
 
      if(values[i].forecast_value==LONG_MIN)
         values_adjusted_1[i].forecast_value=double("nan");
      else
         values_adjusted_1[i].forecast_value=values[i].forecast_value/1000000.;
     }
   Print("Die erste Methode zum Prüfen und Abrufen der Kalenderwerte");
   ArrayPrint(values_adjusted_1);
 
//--- Option 2 zum Prüfen und Abrufen der Werte
   AdjustedCalendarValue values_adjusted_2[];
   ArrayResize(values_adjusted_2total);
//--- Kopieren der Werte mit Kontrollen und Anpassungen
   for(int i=0i<totali++)
     {
      values_adjusted_2[i].id=values[i].id;
      values_adjusted_2[i].event_id=values[i].event_id;
      values_adjusted_2[i].time=values[i].time;
      values_adjusted_2[i].period=values[i].period;
      values_adjusted_2[i].revision=values[i].revision;
      values_adjusted_2[i].impact_type=values[i].impact_type;
      //--- Prüfen und Abrufen der Werte
      if(values[i].HasActualValue())
         values_adjusted_2[i].actual_value=values[i].GetActualValue();
      else
         values_adjusted_2[i].actual_value=double("nan");
 
      if(values[i].HasPreviousValue())
         values_adjusted_2[i].prev_value=values[i].GetPreviousValue();
      else
         values_adjusted_2[i].prev_value=double("nan");
 
      if(values[i].HasRevisedValue())
         values_adjusted_2[i].revised_prev_value=values[i].GetRevisedValue();
      else
         values_adjusted_2[i].revised_prev_value=double("nan");
 
      if(values[i].HasForecastValue())
         values_adjusted_2[i].forecast_value=values[i].GetForecastValue();
      else
         values_adjusted_2[i].forecast_value=double("nan");
     }
   Print("Die zweite Methode zum Prüfen und Abrufen der Kalenderwerte");
   ArrayPrint(values_adjusted_2);
 
//--- Option 3 zur Ermittlung der Werte - ohne Prüfungen
   AdjustedCalendarValue values_adjusted_3[];
   ArrayResize(values_adjusted_3total);
//--- Kopieren der Werte mit Kontrollen und Anpassungen
   for(int i=0i<totali++)
     {
      values_adjusted_3[i].id=values[i].id;
      values_adjusted_3[i].event_id=values[i].event_id;
      values_adjusted_3[i].time=values[i].time;
      values_adjusted_3[i].period=values[i].period;
      values_adjusted_3[i].revision=values[i].revision;
      values_adjusted_3[i].impact_type=values[i].impact_type;
      //--- Abrufen der Werte ohne Prüfung
      values_adjusted_3[i].actual_value=values[i].GetActualValue();
      values_adjusted_3[i].prev_value=values[i].GetPreviousValue();
      values_adjusted_3[i].revised_prev_value=values[i].GetRevisedValue();
      values_adjusted_3[i].forecast_value=values[i].GetForecastValue();
     }
   Print("Die dritte Methode zum Abrufen der Kalenderwerte - ohne Prüfung");
   ArrayPrint(values_adjusted_3);
  }
/*
   Wir haben die Ereigniswerte für country_code=EU erhalten:1051
  Ausgabe der Kalenderwerte wie sie sind
         [id] [event_id]              [time]            [period] [revision]       [actual_value]         [prev_value] [revised_prev_value]     [forecast_value] [impact_type] [reserved]
   [0144520  999500001 2021.01.04 12:00:00 2020.12.01 00:00:00          3             55200000             55500000 -9223372036854775808             55500000             2        ...
   [1144338  999520001 2021.01.04 23:30:00 2020.12.29 00:00:00          0            143100000            143900000 -9223372036854775808 -9223372036854775808             0        ...
   [2147462  999010020 2021.01.04 23:45:00 1970.01.01 00:00:00          0 -9223372036854775808 -9223372036854775808 -9223372036854775808 -9223372036854775808             0        ...
   [3111618  999010018 2021.01.05 12:00:00 2020.11.01 00:00:00          0             11000000             10500000 -9223372036854775808             11000000             0        ...
   [4111619  999010019 2021.01.05 12:00:00 2020.11.01 00:00:00          0              3100000              3100000              3200000              3100000             0        ...
  Die erste Methode zum Prüfen und Abrufen von Kalenderwerten
         [id] [event_id]              [time]            [period] [revision] [actual_value] [prev_value] [revised_prev_value] [forecast_value] [impact_type]
   [0144520  999500001 2021.01.04 12:00:00 2020.12.01 00:00:00          3       55.20000     55.50000                  nan         55.50000             2
   [1144338  999520001 2021.01.04 23:30:00 2020.12.29 00:00:00          0      143.10000    143.90000                  nan              nan             0
   [2147462  999010020 2021.01.04 23:45:00 1970.01.01 00:00:00          0            nan          nan                  nan              nan             0
   [3111618  999010018 2021.01.05 12:00:00 2020.11.01 00:00:00          0       11.00000     10.50000                  nan         11.00000             0
   [4111619  999010019 2021.01.05 12:00:00 2020.11.01 00:00:00          0        3.10000      3.10000              3.20000          3.10000             0
  Die zweite Methode zum Prüfen und Abrufen von Kalenderwerten
         [id] [event_id]              [time]            [period] [revision] [actual_value] [prev_value] [revised_prev_value] [forecast_value] [impact_type]
   [0144520  999500001 2021.01.04 12:00:00 2020.12.01 00:00:00          3       55.20000     55.50000                  nan         55.50000             2
   [1144338  999520001 2021.01.04 23:30:00 2020.12.29 00:00:00          0      143.10000    143.90000                  nan              nan             0
   [2147462  999010020 2021.01.04 23:45:00 1970.01.01 00:00:00          0            nan          nan                  nan              nan             0
   [3111618  999010018 2021.01.05 12:00:00 2020.11.01 00:00:00          0       11.00000     10.50000                  nan         11.00000             0
   [4111619  999010019 2021.01.05 12:00:00 2020.11.01 00:00:00          0        3.10000      3.10000              3.20000          3.10000             0
  Die dritte Methode zum Abrufen von Kalenderwerten - ohne Prüfung
         [id] [event_id]              [time]            [period] [revision] [actual_value] [prev_value] [revised_prev_value] [forecast_value] [impact_type]
   [0144520  999500001 2021.01.04 12:00:00 2020.12.01 00:00:00          3       55.20000     55.50000                  nan         55.50000             2
   [1144338  999520001 2021.01.04 23:30:00 2020.12.29 00:00:00          0      143.10000    143.90000                  nan              nan             0
   [2147462  999010020 2021.01.04 23:45:00 1970.01.01 00:00:00          0            nan          nan                  nan              nan             0
   [3111618  999010018 2021.01.05 12:00:00 2020.11.01 00:00:00          0       11.00000     10.50000                  nan         11.00000             0
   [4111619  999010019 2021.01.05 12:00:00 2020.11.01 00:00:00          0        3.10000      3.10000              3.20000          3.10000             0
*/

 

Die Häufigkeit eines Ereignisses wird in der Struktur MqlCalendarEvent dargestellt. Im Folgenden aufgelistete Werte sind möglichENUM_CALENDAR_EVENT_FREQUENCY

ID

Beschreibung

CALENDAR_FREQUENCY_NONE

Veröffentlichungshäufigkeit ist nicht angegeben

CALENDAR_FREQUENCY_WEEK

Veröffentlichung einmal im Monat

CALENDAR_FREQUENCY_MONTH

Veröffentlichung einmal im Monat

CALENDAR_FREQUENCY_QUARTER

Veröffentlichung einmal im Quartal

CALENDAR_FREQUENCY_YEAR

Veröffentlichung einmal im Jahr

CALENDAR_FREQUENCY_DAY

Veröffentlichung einmal am Tag

 

Ereignis-Typ wird mit der Struktur MqlCalendarEvent dargestellt. Im Folgenden aufgelistete Werte sind möglichENUM_CALENDAR_EVENT_TYPE

ID

Beschreibung

CALENDAR_TYPE_EVENT

Ereignis (Sitzung, Rede etc.)

CALENDAR_TYPE_INDICATOR

Indikator

CALENDAR_TYPE_HOLIDAY

Feiertag

 

Der wirtschaftliche Sektor eines Ereignisses wird in der Struktur MqlCalendarEvent dargestellt. Im Folgenden aufgelistete Werte sind möglichENUM_CALENDAR_EVENT_SECTOR

ID

Beschreibung

CALENDAR_SECTOR_NONE

Ein Sektor wurde nicht angegeben

CALENDAR_SECTOR_MARKET

Markt, Börse

CALENDAR_SECTOR_GDP

Bruttoinlandsprodukt (BIP)

CALENDAR_SECTOR_JOBS

Arbeitsmarkt

CALENDAR_SECTOR_PRICES

Preise

CALENDAR_SECTOR_MONEY

Geld

CALENDAR_SECTOR_TRADE

Handel

CALENDAR_SECTOR_GOVERNMENT

Regierung

CALENDAR_SECTOR_BUSINESS

Geschäft

CALENDAR_SECTOR_CONSUMER

Konsum

CALENDAR_SECTOR_HOUSING

Bau

CALENDAR_SECTOR_TAXES

Steuern

CALENDAR_SECTOR_HOLIDAYS

Feiertage

 

Die Wichtigkeit des Ereignisses wird in der Struktur MqlCalendarEvent dargestellt. Im Folgenden aufgelistete Werte sind möglichENUM_CALENDAR_EVENT_IMPORTANCE

ID

Beschreibung

CALENDAR_IMPORTANCE_NONE

Wichtigkeit wurde nicht bestimmt

CALENDAR_IMPORTANCE_LOW

Geringe Wichtigkeit

CALENDAR_IMPORTANCE_MODERATE

Mittlere Wichtigkeit

CALENDAR_IMPORTANCE_HIGH

Hohe Wichtigkeit

 

Maßeinheit für die Anzeige der Ereigniswerte wird in der Struktur MqlCalendarEvent dargestellt. Im Folgenden aufgelistete Werte sind möglichENUM_CALENDAR_EVENT_UNIT

ID

Beschreibung

CALENDAR_UNIT_NONE

Maßeinheit wurde nicht angegeben

CALENDAR_UNIT_PERCENT

Prozentsatz

CALENDAR_UNIT_CURRENCY

Nationale Währung

CALENDAR_UNIT_HOUR

Stunden

CALENDAR_UNIT_JOB

Jobs

CALENDAR_UNIT_RIG

Förderanlagen

CALENDAR_UNIT_USD

USD

CALENDAR_UNIT_PEOPLE

Menschen

CALENDAR_UNIT_MORTGAGE

Hypothekarkredite

CALENDAR_UNIT_VOTE

Stimmen

CALENDAR_UNIT_BARREL

Barrels

CALENDAR_UNIT_CUBICFEET

Kubikfuß

CALENDAR_UNIT_POSITION

Nichtkommerzielle Nettoposition

CALENDAR_UNIT_BUILDING

Immobilen

 

In einigen Fällen benötigen wirtschaftliche Werte einen Multiplikator, die mit der Struktur MqlCalendarEvent dargestellt werden. Im Folgenden aufgelistete Multiplikatoren sind möglichENUM_CALENDAR_EVENT_MULTIPLIER

ID

Beschreibung

CALENDAR_MULTIPLIER_NONE

Ein Multiplikator wurde nicht bestimmt

CALENDAR_MULTIPLIER_THOUSANDS

Tausend

CALENDAR_MULTIPLIER_MILLIONS

Million

CALENDAR_MULTIPLIER_BILLIONS

Milliarde

CALENDAR_MULTIPLIER_TRILLIONS

Billion

 

Die mögliche Auswirkung auf die Währungskurse wird in der Struktur MqlCalendarValue dargestellt. Im Folgenden aufgelistete Werte sind möglichENUM_CALENDAR_EVENT_IMPACT

ID

Beschreibung

CALENDAR_IMPACT_NA

Wichtigkeit ist nicht bestimmt

CALENDAR_IMPACT_POSITIVE

Positive Wirkung

CALENDAR_IMPACT_NEGATIVE

Negative Wirkung

 

Der Zeitpunkt eines Ereignisses wird in der Struktur MqlCalendarEvent dargestellt. Im Folgenden aufgelistete Werte sind möglichENUM_CALENDAR_EVENT_TIMEMODE

ID

Beschreibung

CALENDAR_TIMEMODE_DATETIME

Die Quelle veröffentlicht eine genaue Uhrzeit eines Ereignisses

CALENDAR_TIMEMODE_DATE

Das Ereignis dauert den ganzen Tag

CALENDAR_TIMEMODE_NOTIME

Die Quelle veröffentlicht keine Zeit für ein Ereignis

CALENDAR_TIMEMODE_TENTATIVE

Die Quelle veröffentlicht einen Tag statt eines genauen Zeitpunktes für ein Ereignis Die Zeit wird beim Eintreten des Ereignisses angegeben.

 

Siehe auch

Wirtschaftskalender