Wirtschaftskalender. Fragen, Diskussionen.

 

Ich möchte verstehen, wie der MQL5-Wirtschaftskalender funktioniert, aber irgendetwas bewegt sich nicht sehr schnell. Ich habe den größten Teil des gestrigen Tages und den Anfang des heutigen Tages damit verbracht, aber ich verstehe immer noch nicht, warum CalendarValueHistory nicht alle Ereignisse zurückgibt. Oder vielleicht verwechsle ich sie, diese Ereignisse, ein wenig...

Gestern habe ich um xx:45 Uhr, wie im Kalender angegeben, 4 Ereignisse erhalten. Ich schreibe die Ereignisstunden als "xx", weil die empfangene Zeit nicht mit der in der Tabelle übereinstimmt. Aber zumindest könnte man verstehen, dass dies an der Differenz zwischen der angegebenen Zeit und der Zeit des Terminals oder Servers liegt, von dem die Daten bezogen wurden. Aber jetzt habe ich nur 3 Veranstaltungen mit :45 Minuten und ich kann nicht verstehen, warum.

Und Frage an die Entwickler: Warum sind im Array das erste Datum 2019.07.25 00:00 und die nächsten Zeilen aufsteigend sortiert. Siehe die resultierende Liste.

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
 

Einige Fragen sind weggefallen. Die Uhrzeit wurde festgelegt. Es stellte sich heraus, dass es ganz einfach war. Die Uhrzeit ist GMT, und die Website wurde mit GMT+3 dargestellt, so dass sich alle meine Missverständnisse summierten.

Hier ist das erste Ergebnis: Empfangene Ereignisbeschreibung, erste Zeile im Bild


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
 

Frage an die Entwickler:

Warum funktioniert dieser Code aus der Dokumentation, mit kleinen Änderungen

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

zeigt, dass die Größe des Werte-Arrays Null ist, gibt aber trotzdem alles im Kalender aus. Das heißt, alle Ereignisse werden empfangen.

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

Wo, was hat keine Zeit zu arbeiten?

 
In der Formatzeile ist %s überflüssig
 
Renat Fatkhullin:
In der Formatzeichenkette ist %s überflüssig

Ja, ich danke Ihnen. Das habe ich bereits geklärt. Ich habe beim Fixieren des Beispiels aus der Dokumentation einen Fehler gemacht.

 

@Renat Fatkhullin Renat, können wir hoffen, dass es eines Tages eine Funktion wie TimeGMTOffset() geben wird, die nur die Serverzeit und nicht die Ortszeit berücksichtigt? Denn die wirtschaftlichen Kalenderfunktionen verwenden die GMT-Zeit und die Ortszeit stimmt oft nicht mit der Serverzeit überein. Wenn ich also Nachrichtenzeit bekomme, muss ich sie in Terminalzeit umwandeln. Ich verstehe, dass es Probleme geben kann, wenn man diese Funktion am Wochenende aufruft, aber sie kann eine Art Fehler erkennen, dass diese Funktion zu dieser Zeit nicht verfügbar ist, oder was auch immer.

Bisher habe ich das so gemacht: in OnInit() wird die Zeitdifferenz berechnet und in eine globale Variable geschrieben. Aber ich mag es nicht wirklich. Meiner Meinung nach wäre es besser, die integrierte Funktion aufzurufen und die Nachrichtenzeit an die Serverzeit anzupassen. Vor allem das Terminal hat wahrscheinlich auch an Wochenenden Serverzeit zur Verfügung.

 
Alexey Viktorov:

@Renat Fatkhullin Renat, können wir hoffen, dass es eines Tages eine Funktion wie TimeGMTOffset() geben wird, die nur die Serverzeit und nicht die Ortszeit berücksichtigt? Denn die wirtschaftlichen Kalenderfunktionen verwenden die GMT-Zeit und die Ortszeit stimmt oft nicht mit der Serverzeit überein. Wenn ich also Nachrichtenzeit bekomme, muss ich sie in Terminalzeit umwandeln. Ich verstehe, dass es Probleme geben kann, wenn man diese Funktion an Wochenenden aufruft, aber es ist möglich, eine Art Fehler festzustellen, dass diese Funktion im Moment nicht verfügbar ist oder etwas anderes.

Bisher habe ich das getan: in OnInit() wird die Zeitdifferenz berechnet und in die globale Variable geschrieben. Aber ich mag es nicht wirklich. Meiner Meinung nach wäre es besser, die integrierte Funktion aufzurufen und die Nachrichtenzeit an die Serverzeit anzupassen. Vor allem das Terminal hat wahrscheinlich auch an Wochenenden Serverzeit zur Verfügung.

Natürlich ist sie verfügbar, sie wurde bereits angefordert.

 
Vitaly Muzichenko:

Natürlich ist sie verfügbar, das wurde bereits beantragt.

Vitaly, jeder Antrag muss begründet werden. Ich hoffe, ich habe genügend Argumente für die Notwendigkeit einer solchen Funktion geliefert. Jetzt hängt es von der Arbeitsbelastung der Programmierer des Unternehmens ab und davon, wie die Argumente verstanden und akzeptiert werden. Ich hoffe es.

 

Welche Informationen können aus dem Kalender entnommen werden: (Werte, die von der Software verwendet werden und für den Menschen wenig aussagekräftig sind, werden hier nicht aufgeführt)

  • Name des Landes
  • Währung der Länder
  • Art der Veranstaltung

Veranstaltung (Kundgebung, Rede, etc.)

Indikator

Urlaub


  • Sektor, zu dem das Ereignis gehört

Markt, Börse

Bruttoinlandsprodukt (BIP)

Arbeitsmarkt

Preise

Geld

Handel

Regierung

Business

Verbrauch

Gehäuse

Steuern

Feiertage


  • Textname des Ereignisses in der Sprache des Terminals (in der aktuellen Kodierung des Terminals)
  • Uhrzeit und Datum der Veranstaltung
  • Berichtszeitraum des Ereignisses
  • aktueller Wert des Parameters
  • vorheriger Wert des Parameters
  • korrigierter früherer Wert des Indikators
  • prognostizierter Wert eines Indikators
  • mögliche Auswirkungen auf den Wechselkurs

Keine Auswirkungen angezeigt

Positive Auswirkungen

Negative Auswirkungen


Leider habe ich außer dem Verbot, Positionen vor der Veröffentlichung von Nachrichten zu eröffnen, keine anderen Lösungen gefunden. Ich möchte herausfinden, welche von ihnen verwendet werden können und wie man auf sie reagiert.

So wie ich es verstehe, sind die hervorgehobenen Werte sehr wichtig für die Entscheidung, wie man auf die Nachrichten reagiert, aber ich verstehe nicht, wie. Ich lade zur Diskussion ein.

 
Alexey Viktorov:

Welche Informationen können aus dem Kalender entnommen werden: (Werte, die vom Programm verwendet werden und für den Menschen wenig aussagekräftig sind, werden hier nicht aufgeführt)

  • Name des Landes
  • Währung der Länder
  • Art der Veranstaltung

Veranstaltung (Kundgebung, Rede, etc.)

Indikator

Urlaub


  • Sektor, zu dem das Ereignis gehört

Markt, Börse

Bruttoinlandsprodukt (BIP)

Arbeitsmarkt

Preise

Geld

Handel

Regierung

Business

Verbrauch

Gehäuse

Steuern

Feiertage


  • Textname des Ereignisses in der Sprache des Terminals (in der aktuellen Kodierung des Terminals)
  • Uhrzeit und Datum der Veranstaltung
  • Berichtszeitraum des Ereignisses
  • aktueller Wert des Parameters
  • vorheriger Wert des Parameters
  • korrigierter früherer Wert des Indikators
  • prognostizierter Wert eines Indikators
  • mögliche Auswirkungen auf den Wechselkurs

Keine Auswirkungen angezeigt

Positive Auswirkungen

Negative Auswirkungen


Leider habe ich außer dem Verbot, Positionen vor der Veröffentlichung von Nachrichten zu eröffnen, keine anderen Lösungen gefunden. Ich möchte herausfinden, welche von ihnen verwendet werden können und wie man auf sie reagiert.

So wie ich es verstehe, sind die hervorgehobenen Werte sehr wichtig, um zu entscheiden, wie man auf die Nachrichten reagiert, aber ich verstehe nicht, wie. Ich lade zur Diskussion ein.

Hier ist meine Variante des Nachrichtenindikators. Das Terminal informiert über den Zeitpunkt der Veröffentlichung von Nachrichten nach Währungen, wobei auch der Grad der Wichtigkeit ausgewählt werden kann. Die Information wird als vertikale Linie auf dem Preisdiagramm angezeigt. Im Unterfenster sehen Sie das Histogramm der letzten Datenwerte in chronologischer Reihenfolge, bezogen auf die Prognose der als wichtig eingestuften Nachricht. Je nach Art der Nachricht (Zinssätze, Arbeitslosenquote, Verbraucherpreisindex, BIP usw.) können die Werte in chronologischer Reihenfolge dargestellt werden. Das erhaltene Diagramm sollte zeitlich und skalentechnisch mit dem Preisdiagramm synchronisiert sein, wenn der Zeitrahmen gewechselt wird. Außerdem bin ich an der Geschwindigkeit interessiert, mit der ich aktuelle Daten erhalte.

 
Vladimir Kononenko:

Hier ist meine Version des Nachrichtenindikators. Das Terminal wird mit den Zeitpunkten der Veröffentlichung von Nachrichten für die von Ihnen gewählten Währungen gefüttert, der Grad der Wichtigkeit ist ebenfalls wählbar. Die Information wird mit einer vertikalen Linie auf dem Preisdiagramm angezeigt. Im Unterfenster zeichnen wir, in chronologischer Reihenfolge, ein Histogramm der letzten Datenwerte der Nachrichten, die der Klasse "wichtig" zugeordnet sind. Das erhaltene Diagramm sollte zeitlich mit dem Preisdiagramm synchronisiert werden, wenn Sie die TF wechseln. Auch die Geschwindigkeit, mit der aktuelle Daten abgerufen werden, ist von Interesse.

Sie meinen Histogramme für die gesamte Tiefe der auf dem Diagramm verfügbaren Historie?

Sie liefert jedoch keine Informationen für Echtzeitanwendungen. Oder habe ich das völlig falsch verstanden? Nun, die Prognose und der aktuelle Wert wurden ermittelt, wir haben das Histogramm eingestellt, und dann? Nur manuell eine Entscheidung treffen?

Ich habe die Geschwindigkeit der Datenaktualisierung im Kalender nicht überprüft, und die Geschwindigkeit des Empfangs fertiger Daten sollte gemessen werden, aber ich habe keinen solchen Wunsch, weil die Geschwindigkeit recht hoch ist.