Alarm und Benachrichtigung für Externe Indikatoren
Einleitung
Die Praxis zeigt, dass die Entwickler von Indikatoren nicht immer die Möglichkeit der Anzeige von Alarmmeldungen oder Benachrichtigungen in einen Indikator-Code eingebaut haben, was zu einer vermehrten Anfrage geführt hat, die Möglichkeit einer solchen Anzeige von Signalen einem Indikator hinzuzufügen.
MQL4 Möglichkeiten für die Anzeige von Informationen der Indikatoren
Die Möglichkeiten der MQL4 Programmiersprache beinhalten nicht die erweiterte Nutzung von Indikatorpuffern, zum Beispiel deren Erweiterung durch das Hinzufügen eines Benachrichtigung oder durch die Anzeige eines Alarms, was ein Vorteil hinsichtlich der einfacheren Kreierung eines Programmcodes sein könnte. Auf der anderen Seite ermöglicht MQL4 das Lesen der Position von Objekten und den Erhalt ihrer vollständigen Eigenschaften.
In diesem Artikel möchte ich die Methode zum Erhalten von Daten durch ein Signal eines Indikators zeigen, der an einen Chart angehängt ist, sowie auch dessen Benachrichtigung, Alarmmeldung oder die Kreierung einer globalen Variablen für die weitere Verwendung zu Informationszwecken, zum Beispiel für die Weitergabe an einen Expert Advisor.
Alle Markierungen auf einem Chart verwenden Wingdings und Pfeil-Codes. Deshalb ist es nicht schwierig, Informationen über eine eingezeichnete Markierung auf einem Chart zu erhalten. Übrigens, wenn der Autor eines Indikators eine durchaus informative Beschreibung des OBJ_ARROW Objekts hinzufügt, kann ein Benutzer leicht ein Signal identifizieren. Ein Beispiel dafür ist die Beschreibung von Markierungen, die durch den Macher von klassischen japanischen Candlestick-Charts vorgegeben sind. Bei der Standard-Ausführung seines Indikators, muss ein Benutzer nur den Mauszeiger über die Markierung bewegen, um eine Pop-up-Hilfe mit einem entsprechenden Text zu erhalten.
Standard-Anzeige eines Signals
In MQL4 können Sie einige eingebaute Optionen für eine informativere Art und Weise der Datenpräsentation verwenden.
Unter den Sprachbefehlen, gibt die Funktion
double ObjectGet (string name, int prop_id)
den Wert einer bestimmten Objekteigenschaft retour. Um Fehlerdaten zu erhalten, rufen Sie die GetLastError() Funktion ab.
Sehen Sie auch unter ObjectSet().
Parameter:
Name - Objektname.
prop_id - Identifizierer von Objekteigenschaften. Kann jeder Wert von der List der Objekteigenschaften sein.
Identifizierer von Objekteigenschaften werden in den Funktionen ObjectGet() und ObjectSet() verwendet. Kann irgendeiner der unten angeführten Werte sein:
Konstante | Wert | Typ | Beschreibung |
---|---|---|---|
OBJPROP_TIME1 | 0 | datetime | Erhält/legt die erste Koordinate des Zeitpunkts fest |
OBJPROP_PRICE1 | 1 | double | Erhält/legt die erste Koordinate des Kurses fest |
OBJPROP_TIME2 | 2 | datetime | Erhält/legt die zweite Koordinate des Zeitpunkts fest |
OBJPROP_PRICE2 | 3 | double | Erhält/legt die zweite Koordinate des Kurses fest |
OBJPROP_TIME3 | 4 | datetime | Erhält/legt die dritte Koordinate des Zeitpunkts fest |
OBJPROP_PRICE3 | 5 | double | Erhält/legt die dritte Koordinate des Kurses fest |
OBJPROP_COLOR | 6 | color | Erhält/legt die Farbe eines Objekts fest |
OBJPROP_STYLE | 7 | int | Erhält/legt die Linienart eines Objekts fest |
OBJPROP_WIDTH | 8 | int | Erhält/legt die Linienbreite eines Objekts fest |
OBJPROP_BACK | 9 | bool | Erhält/legt die Hintergrunddarstellung eines Objekts fest |
OBJPROP_RAY | 10 | bool | Erhält/legt die Strahleneigenschaften für Objekte des Typs OBJ_TREND und dergleichen fest |
OBJPROP_ELLIPSE | 11 | bool | Erhält/legt die Anzeige der vollständigen Ellipse OBJ_FIBOARC fest |
OBJPROP_SCALE | 12 | double | Erhält/legt den Wert einer Objektskalierung fest |
OBJPROP_ANGLE | 13 | double | Erhält/legt den Winkel in Grad für OBJ_TRENDBYANGLE fest |
OBJPROP_ARROWCODE | 14 | int | Erhält/legt den Pfeil-Code von OBJ_ARROW fest. Kann eines der Wingdings Symbole oder einer der vorgegebenen Pfeil-Codes sein |
OBJPROP_TIMEFRAMES | 15 | int | Erhält/legt die Darstellung in verschiedenen Zeiträumen fest. Kann eine bzw. kann eine Kombination aus mehreren Konstanten der Objektsichtbarkeit sein |
OBJPROP_DEVIATION | 16 | double | Erhält/legt den Abweichungswert für OBJ_STDDEVCHANNEL fest |
OBJPROP_FONTSIZE | 100 | int | Erhält/legt die Schriftgröße für OBJ_TEXT und OBJ_LABEL fest |
OBJPROP_CORNER | 101 | int | Erhält/legt die Nummer des Bindungswinkels für OBJ_LABEL fest. Können Werte von 0-3 sein |
OBJPROP_XDISTANCE | 102 | int | Erhält/legt die Distanz der X Koordinate in Pixel relativ zum Bindungswinkel für OBJ_LABEL fest |
OBJPROP_YDISTANCE | 103 | int | Erhält/legt die Distanz der Y Koordinate in Pixel relativ zum Bindungswinkel für OBJ_LABEL fest |
OBJPROP_FIBOLEVELS | 200 | int | Erhält/legt die Anzahl der Niveaus des Fibonacci Objekts fest. Kann von 1 bis 32 sein |
OBJPROP_LEVELCOLOR | 201 | color | Erhält/legt die Linienfarbe der Objektebene fest |
OBJPROP_LEVELSTYLE | 202 | int | Erhält/legt die Linienart der Objektebene fest |
OBJPROP_LEVELWIDTH | 203 | int | Erhält/legt die Linienbreite der Objektebene fest |
OBJPROP_FIRSTLEVEL+n | 210+n | int | Erhält/legt die Nummer der Objektebene fest, wobei n der Index der installierten/erhaltenen Ebene ist. Kann von 0 bis 31 sein |
Lassen Sie uns deshalb den Parameter OBJPROP_ARROWCODE verwenden, um ein notwendiges Objekt zu finden und wir werden die Liste aller Objekte erhalten. Lassen Sie uns danach die notwendigen Objekte auswählen und die Informationen über sie in der gewünschten Form anzeigen.
Lassen Sie uns dann einen Code zum Erhalten von Informationen über die Namen der Candlesticks für den Indikator “Japan” kreieren. Wir bekommen den folgenden Code:
int obj_total=ObjectsTotal(); // Define the total number of objects on a chart for(int i=0;i<obj_total;i++) // Loop of going through all objects with the purpose of finding necessary ones { if (ObjectGet(ObjectName(i),OBJPROP_ARROWCODE) // reading the codeZuerst sollten wir definieren, wie wir mit Wingdings umgehen und entsprechend die Parameter im Programmcode einstellen. In diesem Beispiel werden wir den Teil der Wingdings Tabelle behandeln, der mit 100 beginnt.
Die Variable ExtBars wird zur Definierung der Anzahl der letzten Balken zum Finden gezeichneter Objekte in einem Chart verwendet.
if (ObjectGet(ObjectName(i),OBJPROP_ARROWCODE)>100&& ObjectGet(ObjectName(i),OBJPROP_TIME1)>Time[ExtBars])
Jetzt wollen wir Alarme und (oder) Benachrichtigungen zeigen.
if (ExtAlert==true){ Alert(Symbol(),Period()," ", TimeYear(ObjectGet(ObjectName(i),OBJPROP_TIME1)),".", TimeDay(ObjectGet(ObjectName(i),OBJPROP_TIME1)),".", TimeMonth(ObjectGet(ObjectName(i),OBJPROP_TIME1)),"; ", TimeHour(ObjectGet(ObjectName(i),OBJPROP_TIME1)),":", TimeMinute(ObjectGet(ObjectName(i),OBJPROP_TIME1))," ", ObjectName(i));} if (ExtComment==true){ Comment("\n","\n","\n", Symbol(),Period()," ", TimeYear(ObjectGet(ObjectName(i),OBJPROP_TIME1)),".", TimeDay(ObjectGet(ObjectName(i),OBJPROP_TIME1)),".", TimeMonth(ObjectGet(ObjectName(i),OBJPROP_TIME1)),"; ", TimeHour(ObjectGet(ObjectName(i),OBJPROP_TIME1)),":", TimeMinute(ObjectGet(ObjectName(i),OBJPROP_TIME1))," ", ObjectName(i));}
In der Befehlszeile wird
("\n","\n","\n",für die Anzeige von Informationen auf der dritten Linie der Anzeige verwendet.
Bei Bedarf können Sie das Senden der Informationen an globale Variable inkludieren, um sie in einem Expert Advisor zu verwenden. Da dadurch eine mögliche Verletzung des Urheberrechts hinsichtlich des Autors des Indikators beseitigt wird, erhalten wir die Möglichkeit, die Informationen für eigene Zwecke zu verwenden und müssen nicht den jeweiligen Autor bitten, seinen Code zu ändern.
Mit der beschriebenen Vorgehensweise erhalten wir folgendes Ergebnis:
Der Indikator zeigt nun externe Informationen
In der analogen Art und Weise funktioniert der Code mit dem Indikator ExCandles2. Dies ist der zweite Indikator, der in MQL4 veröffentlicht wurde; er wurde zusammen mit dem veröffentlichten Code getestet.
Fazit
Hier ist der Quellcode des Indikators für die Anzeige von Informationen über erscheinende Signale von Indikatoren:
//+------------------------------------------------------------------+ //| AlertSignal.mq4 | //| Copyright © 2009, WWW.FIBOOK.RU | //| http://fibook.ru | //+------------------------------------------------------------------+ #property copyright "Copyright © 2009, FIBOOK.RU" #property link "http://fibook.ru" #property indicator_chart_window extern int ExtBars=10; // Number of last bars for calculation extern int ExtArrow=100; // Code number in the "wingdings" table for the count start extern bool ExtAlert=true; // Switch of Alerts displaying extern bool ExtComment=true; // Switch of Comments displaying //+------------------------------------------------------------------+ //| Custom indicator initialization function | //+------------------------------------------------------------------+ int init() { //---- indicators //---- return(0); } //+------------------------------------------------------------------+ //| Custom indicator deinitialization function | //+------------------------------------------------------------------+ int deinit() { //---- //---- return(0); } //+------------------------------------------------------------------+ //| Custom indicator iteration function | //+------------------------------------------------------------------+ int start() { if (per == Time[0]) return; // Correct once per a period per = Time[0]; int cod=0; //---- int obj_total=ObjectsTotal(); for(int i=0;i<obj_total;i++) { if (ObjectGet(ObjectName(i),OBJPROP_ARROWCODE)>ExtArrow&& ObjectGet(ObjectName(i),OBJPROP_TIME1)>Time[ExtBars]) { if (ExtAlert==true){ Alert(Symbol(),Period()," ", TimeYear(ObjectGet(ObjectName(i),OBJPROP_TIME1)),".", TimeDay(ObjectGet(ObjectName(i),OBJPROP_TIME1)),".", TimeMonth(ObjectGet(ObjectName(i),OBJPROP_TIME1)),"; ", TimeHour(ObjectGet(ObjectName(i),OBJPROP_TIME1)),":", TimeMinute(ObjectGet(ObjectName(i),OBJPROP_TIME1))," ", ObjectName(i));} if (ExtComment==true){ Comment("\n","\n","\n", Symbol(),Period()," ", TimeYear(ObjectGet(ObjectName(i),OBJPROP_TIME1)),".", TimeDay(ObjectGet(ObjectName(i),OBJPROP_TIME1)),".", TimeMonth(ObjectGet(ObjectName(i),OBJPROP_TIME1)),"; ", TimeHour(ObjectGet(ObjectName(i),OBJPROP_TIME1)),":", TimeMinute(ObjectGet(ObjectName(i),OBJPROP_TIME1))," ", ObjectName(i));} } } //---- return(0); } //+------------------------------------------------------------------+
Übersetzt aus dem Russischen von MetaQuotes Ltd.
Originalartikel: https://www.mql5.com/ru/articles/1568
- Freie Handelsapplikationen
- Über 8.000 Signale zum Kopieren
- Wirtschaftsnachrichten für die Lage an den Finanzmärkte
Sie stimmen der Website-Richtlinie und den Nutzungsbedingungen zu.