English Русский 中文 Español 日本語 Português
Die Anzeige eines Nachrichtenkalenders

Die Anzeige eines Nachrichtenkalenders

MetaTrader 4Beispiele | 9 Februar 2016, 08:37
774 0
Slobodov Gleb
Slobodov Gleb

Einführung


Dieser Artikel enthält eine Anleitung dazu, wie man einen einfachen und praktischen Indikator erstellt, der in einem Arbeitsbereich die wichtigsten ökonomischen Ereignisse von externen Internetquellen anzeigt. . Die Funktionsweise des Indikators stellt sich wie folgt dar:



Hier ist eine Liste der Anforderungen für den Indikator :
  • Der Indikator sollte unabhängig (d.h. ohne die Hilfe des Nutzers) eine benötigte Datei des Veranstaltungskalenders für die laufende Woche herunterladen.
  • Der Indikator sollte alle Ereignisse und Veranstaltungen (sowohl in der Vergangenheit als auch in der Zukunft) aus dieser Datei in Form von vertikalen Linien mit den Schlagzeilen der einzelnen Nachrichten anzeigen.
  • Der Indikator sollte die Aktualisierung eines Ereignisses oder einer Veranstaltung auf die externe Ressource zurückverfolgen.
Nachdem wir also die Aufgabe spezifiziert haben, können wir jetzt einige der technischen Details analysieren.


Technischer Teil


Lassen Sie uns die Website http://www.dailyfx.com/calendar/ als externe Ressource verwenden. Diese Ressource ist besonders praktisch, weil sie uns in die Lage versetzt, eine Kalenderdatei mit der Dateiendung .csv herunterzuladen – und wir können somit die Schwierigkeiten, welche die Arbeit mit html-Dateien mit sich bringt, vermeiden. Hier ist ein Link zu den Nachrichten für die laufende Woche: http://www.dailyfx.com/calendar/Dailyfx_Global_Economic_Calendar.csv.

Jetzt wollen wir uns einmal den Prozess des Herunterladens der Datei aus dem Internet genauer anschauen. Dies kann man durch die Benutzung eines wohlbekannten Programms erledigen, und zwar GetRight. Dieses Programm können Sie unter diesem Link herunterladen: http://www.getright.com/get.html oder alternativ auch aus der Liste von Anhängen zu diesem Artikel.

Nachdem Sie das Programm heruntergeladen und installiert haben, sollten Sie GetRight so einstellen, dass man damit die Dateien in ein zu diesem Zwecke zu erstellendes Verzeichnis herunterladen kann. Hierbei handelt es sich um den folgenden Ordner in Ihrem Handelsterminal:\files\html\. Um dies zu tun, drücken Sie F8 und ändern Sie den Eintrag in dem Feld wie unten beschrieben:




Das Erstellen des Indikators


Jetzt, da wir einige vorbereitende Fragen beantwortet haben, können wir mit der Erstellung des Indikators beginnen.


extern string HtmlAdress = "http://www.dailyfx.com/calendar/Dailyfx_Global_Economic_Calendar.csv";
extern string GetrightAdress = "c:\progra~1\getright\getright.exe";
 
#include <Time.mqh>
#import "kernel32.dll"
int WinExec(string NameEx, int dwFlags);

Es gibt lediglich zwei externe Variablen: Die Adresse der externen Ressource (tatsächlich müssen Sie diesen Parameter überhaupt nicht verändern), und die Adresse des Programms GetRight (falls Sie das Programm in ein anderes Verzeichnis heruntergeladen haben sollten, so empfehle ich Ihnen, den ursprünglichen Wert in Indikator zu ändern, damit nicht der Wert der Variable jedes Mal beim Start des Indikators verändert wird). Um die Datei GetRight.exe auszuführen, müssen wir auf die Funktion WinExec zurückgreifen, die wir aus der Kernel32.dll-Bibliothek importieren können. Die Bibliothek Time.mqh enthält Funktionen zur Arbeit mit GMT.


void DownloadCalendar()
{
 Print("Downloading "+HtmlAdress+" to experts\files\html\Calendar.csv");
 WinExec(GetrightAdress+" /URL:"+HtmlAdress+" /FILE:Calendar.csv /W /O",0);
}

Wie Sie sehen können, gestaltet sich die Programmfunktion des Herunterladens der Datei von der externen Ressource dank der Verwendung des Programms GetRight denkbar einfach. Der Parameter /W bedeutet, dass dieser Prozess nicht in das Programm zurückgeführt werden wird, solange das Herunterladen der Datei nicht erfolgreich abgeschlossen wurde. Der Parameter /O bedeutet, dass im Falle, dass es eine Datei mit demselben Namen im Zielverzeichnis geben sollte, diese Datei überschrieben werden wird. Beachten Sie hierbei, dass die Kalender-Datei in das Verzeichnis \files\html\ heruntergeladen werden wird, falls Sie die Einstellungen von GetRight vorschriftsgemäß geändert haben sollten. Und hier sind noch zwei zusätzliche Funktionen :


datetime PerviousMonday(datetime d)
{
 datetime res = d - (TimeDayOfWeek(d)-1)*24*60*60;
 return(res);
}
datetime ToDate(string stDate,string stTime)  
{
 string WeekDay = StringSubstr(stDate,0,3);
 int WeekPlus = 0;
 if (WeekDay=="Mon") WeekPlus=0;
 if (WeekDay=="Tue") WeekPlus=1;
 if (WeekDay=="Wed") WeekPlus=2;
 if (WeekDay=="Thu") WeekPlus=3;
 if (WeekDay=="Fri") WeekPlus=4;
 if (WeekDay=="Sat") WeekPlus=5;
 if (WeekDay=="Sun") WeekPlus=-1;
 datetime Res = PerviousMonday(GetTimeGMT())+WeekPlus*24*60*60;
 datetime Tm = StrToTime(stTime);
 Res=Res+TimeHour(Tm )*60*60+TimeMinute(Tm )*60+TimeSeconds(Tm )
 -TimeHour(Res)*60*60-TimeMinute(Res)*60-TimeSeconds(Res);  
 if (StringFind(stTime,"PM")>=0)  
 Res+=12*60*60;
 Res=Res-GetShiftGMT();
 return (Res);
}

Die Funktion PerviousMonday() gibt das Startdatum der aktuellen Woche aus. Die Funktion ToDate() transferiert das Datum und die Zeit aus dem Kalenderformat in Daten-Zeit.

void GrabNews()  
{
 int file = FileOpen("\Html\Calendar.csv",FILE_READ|FILE_CSV,',');
 if (file==-1||FileSize(file)==0)
 return;
 int i=0;
 while (!FileIsEnding(file))
 {
 string stDate="";
 while (!FileIsEnding(file)&&stDate=="")
 stDate = FileReadString(file);
 string stTime = FileReadString(file);
 string stTimeZone = FileReadString(file);
 string stCurrency = FileReadString(file);
 string stDescription = FileReadString(file);
 string stImportance = FileReadString(file);
 string stActual = FileReadString(file);
 string stForecast = FileReadString(file);
 string stPrevious = FileReadString(file);
 datetime Date = ToDate(stDate,stTime);
 color c=Green;
 if (stImportance=="Low") c = Yellow;
 if (stImportance=="Medium") c = Orange;
 if (stImportance=="High") c = Red;
 ObjectCreate("CalendarText"+i, OBJ_TEXT, 0, Date, Close[0]);
 ObjectSet("CalendarText"+i, OBJPROP_COLOR, c);  
 ObjectSetText("CalendarText"+i, stDate + " : "+ stDescription, 8);  
 ObjectSet("CalendarText"+i, OBJPROP_ANGLE, 90);  
 ObjectCreate("CalendarLine"+i, OBJ_VLINE, 0, Date, Close[0]);
 ObjectSet("CalendarLine"+i, OBJPROP_COLOR, c);  
 ObjectSet("CalendarLine"+i, OBJPROP_STYLE, STYLE_DOT);  
 ObjectSet("CalendarLine"+i, OBJPROP_BACK, true);  
 ObjectSetText("CalendarLine"+i, stDescription, 8);  
 i++;
 }
 Max = i;
 if (file!=-1)
 FileClose(file);
}


Der Hauptprozess GrabNews() öffnet die heruntergeladene Datei\Html\Calendar.csv, liest alle Veranstaltung- und Ereignisparameter aus, und erstellt zwei Objekte für jede neue Nachricht: Eine vertikale Linie und einen Text. Der Veranstaltungskalender wird automatisch alle 15 Minuten aktualisiert :

int start()
  {
   int    counted_bars=IndicatorCounted();
//----
   if (TimeCurrent()>LastTimeDownloading+15*60)
     {
       DeleteObjects();
       DownloadCalendar();
       LastTimeDownloading = TimeCurrent();
       
       int file=-1;
       while (file==-1)
         file = FileOpen("\Html\Calendar.csv",FILE_READ|FILE_CSV,',');
       FileClose(file);
 
       GrabNews();
     }
//----
   return(0);
  }

Fazit


Der Artikel hat Ihnen erklärt, wie man einen Veranstaltungskalender von einer externen Ressource in einem Arbeitsbereich anzeigen lassen kann, und zwar in Form von vertikalen Linien. Der Indikator wurde mit voller Absicht ohne irgendwelche zusätzlichen Parameter geschrieben, wie etwa dem Filtern von Nachrichten gemäß ihrer Relevanz oder der Korrespondenz eines Ereignisses und des Symbols des aktuellen Fensters.

PS: Ich möchte Sie hiermit auf einen Fehler in der Kalender-Funktion aufmerksam machen: http://www.dailyfx.com/calendar/. Bitte beachten Sie, dass manchmal Veranstaltungen in der .csv-Datei von der Adresse http://www.dailyfx.com/calendar/Dailyfx_Global_Economic_Calendar.csv nicht identisch sind mit der Seite http://www.dailyfx.com/calendar/. Dies kann bei Nachrichten der Fall sein, die zwischen 0:00 Uhr und 1:00 Uhr (GMT) veröffentlicht werden. In der.csv-Datei sind solche Nachrichten dann so angegeben, als ob sie erst 12 Stunden später herausgekommen wären.

Beachten Sie bitte ebenfalls, dass der Indikator eine externe dll (kernell32.dll) verwendet – vergessen Sie also nicht, den korrespondierenden Parameter in den Indikatoreinstellungen zu aktivieren.

Die Datei CalendarArticle.mq4 sollte im Ordner \experts\indicators abgespeichert werden. Time.mq4 sollte im Ordner expers\library abgespeichert werden, und die Datei Time.mqh im Ordner experts\include.

Übersetzt aus dem Russischen von MetaQuotes Ltd.
Originalartikel: https://www.mql5.com/ru/articles/1502

Beigefügte Dateien |
getright_setup.zip (4763.33 KB)
Time.mq4 (2.03 KB)
Time.mqh (0.73 KB)
Äquivolumen-Chart-Erstellung: Eine Neubetrachtung Äquivolumen-Chart-Erstellung: Eine Neubetrachtung
Dieser Artikel beschreibt eine Methode zur Erstellung von Charts, bei der jeder einzelne Balken aus einer gleichen Anzahl von Ticks besteht.
Der Indikator Taichi - Eine simple Methode zur Formalisierung der Werte von Ichimoku Kinko Hyo. Der Indikator Taichi - Eine simple Methode zur Formalisierung der Werte von Ichimoku Kinko Hyo.
Finden Sie, dass es schwierig ist, Ichimoku-Signale zu interpretieren? Dieser Artikel stellt einige Prinzipien vor, mit deren Hilfe man bestimmte Werte und Signal von Ichimoku Kinko Hyo standardisieren kann. Zur Visualisierung ihrer Benutzung hat sich der Autor für das Währungspaar EURUSD entschieden, was allein seinen eigenen Präferenzen geschuldet ist. Natürlich kann dieser Indikator in Verbindung mit jedem beliebigen Währungspaar eingesetzt werden.
Wettmodelle als Mittel zur Entwicklung von "Marktintuition" Wettmodelle als Mittel zur Entwicklung von "Marktintuition"
Dieser Artikel befasst sich mit der Theorie der „Marktintuition“ und möglichen Wegen, diese weiterzuentwickeln. Die Methode, welche in diesem Artikel beschrieben wird, basiert auf Modellen von Finanzwetten, und zwar in der Form eines simplen Spiels.
Der Objekt-Ansatz in MQL Der Objekt-Ansatz in MQL
Dieser Artikel wird in erster Linie für alle Programmierer von Interesse sein – sowohl Neueinsteiger als auch Profis, die mit der MQL-Umgebung arbeiten. Darüber hinaus wäre es sinnvoll, wenn dieser Artikel von den Entwicklern und Planern der MQL-Umgebung gelesen werden würde, weil hierin nämlich einige Fragen thematisiert werden, die vielleicht in die künftigen Implementierungen von MetaTrader und MQL miteinbezogen werden könnten.