
Entwicklung eines Toolkit zur Analyse von Preisaktionen (Teil 2): Ein Script für analytische Kommentare
Einführung
Um die Preisaktionsanalyse zu vereinfachen und die Markteinschätzung zu beschleunigen, habe ich ein robustes Tool entwickelt, das auf dem Konzept des Chartprojektors basiert. Dieses Tool bietet eine effiziente Zusammenfassung der wichtigsten Marktwerte, indem es Händlern erlaubt, ein einziges Skript auszuführen, ohne im Chart zu navigieren. Es zeigt die wichtigsten Kennzahlen an, darunter die Eröffnungs- und Schlusskurse des Vortags, wichtige Unterstützungs- und Widerstandsniveaus, die Höchst- und Tiefstwerte des Vortags sowie das Handelsvolumen. Zusätzlich wird eine vertikale Tabelle direkt auf dem Chart angezeigt, um eine einfache Referenz zu ermöglichen.
Das Tool zeichnet automatisch wichtige Unterstützungs- und Widerstandslinien und gibt Ihnen visuelle Anhaltspunkte für die Analyse. Darüber hinaus bietet er hilfreiche Kommentare zu den Marktbedingungen und potenziellen Bewegungen, die Ihren Handelsentscheidungen einen wertvollen Kontext verleihen.
Wir werden mit den folgenden Unterthemen fortfahren:
- Warum sollte man sich auf dieses Tool konzentrieren?
- Überblick über das neue Tool
- Das MQL5-Skript
- Die Code-Entwicklung
- Tests
- Schlussfolgerung
Warum sollte man sich auf dieses Instrument konzentrieren?
Nachdem ich untersucht habe, wie sich bestimmte Marktinformationen auf die Vorhersage der Marktrichtung auswirken, habe ich ein Tool entwickelt, das schnell die wichtigsten Markteinblicke liefert. Das bedeutet, dass Sie keine historischen Daten durchsuchen oder komplizierte Berechnungen durchführen müssen. Dieses Tool zeichnet sich dadurch aus, dass es Informationen in Sekundenschnelle bereitstellen kann.
Sie zeigt die Eröffnungs- und Schlusskurse des Vortages und hebt die wichtigsten Widerstands- und Unterstützungsniveaus hervor. Am wichtigsten ist vielleicht, dass es sowohl das aktuelle Volumen als auch das Volumen des Vortages berechnet. Das Verständnis des Volumens ist entscheidend, da es die Marktbeteiligung widerspiegelt. Wenn das heutige Volumen deutlich höher ist als das gestrige, deutet dies darauf hin, dass sich mehr Händler engagieren, was zu stärkeren Kursbewegungen führen und den vorherrschenden Preistrend verstärken kann, unabhängig davon, ob er sich aufwärts (bullish) oder abwärts (bearish) bewegt. Durch die Kombination all dieser Informationen werden Erkenntnisse über die erwartete Kursrichtung gewonnen.
Einige der wichtigsten Merkmale sind in der nachstehenden Tabelle aufgeführt.
Vorteile | Beschreibung |
---|---|
Identifizierung von Schlüsselebenen | Die Kenntnis der Höchst- und Tiefstkurse des Vortages kann Händlern helfen, wichtige psychologische Niveaus zu ermitteln, bei denen der Kauf- oder Verkaufsdruck zunehmen könnte. |
Volumen Einblicke | Die Analyse des Volumens hilft den Händlern, das Marktinteresse abzuschätzen. Ein hohes Volumen auf einem bestimmten Kursniveau deutet oft auf eine starke Überzeugung der Händler hin und ist somit eine wichtige Referenz für zukünftige Geschäfte. |
Trendbestätigung | Die Eröffnungs- und Schlusskurse geben Aufschluss über die Marktstimmung. Ein höherer Schlusskurs im Vergleich zum Eröffnungskurs deutet auf eine Aufwärtsstimmung hin, während das Gegenteil auf eine Abwärtsstimmung hindeutet. |
Chart-Hinweise | Das Skript fügt horizontale Linien für Unterstützung und Widerstand in das Chart ein und liefert so visuelle Anhaltspunkte, die die Analyse des Händlers verbessern können. Diese visuelle Unterstützung erleichtert das Verständnis der Marktniveaus und der Preisdynamik. |
Klare Kommunikation | Die Verwendung eines Kommentarfeldes auf dem Chart hilft, kritische Analysen kurz und bündig zu kommunizieren, was zu einer schnellen Entscheidungsfindung beitragen kann. |
Lernwerkzeug | Anfängern kann das Skript als Lehrmittel dienen, um zu verstehen, wie man historische Kursdaten, das Volumen und die Implikationen für zukünftige Kursbewegungen liest und interpretiert. |
Effizienz und Zeitersparnis | Das Tool automatisiert die Berechnung und Abfrage von Schlüsselindikatoren und spart so Zeit. So können sich die Händler auf die Ausführung ihrer Handelspläne konzentrieren, anstatt Daten zu sammeln. |
Überblick über das Skript
Das MQL5-Skript, das wir uns ansehen werden, hilft Ihnen, automatisch wichtige Metriken des vorangegangenen Handelstages zu sammeln. Dies erleichtert die Analyse, sodass Sie mehr Zeit auf die Strategie und weniger auf die Datensammlung verwenden können. Das Skript geht folgendermaßen vor.
1. Berechnung und Anzeige der wichtigsten technischen Niveaus durch direkten Abruf der Daten des vorherigen Handelstages auf der Handelsplattform.
Abb. 1. Wesentliche Ebenen
Abbildung 1 zeigt die wichtigsten Informationen über den Markt, einschließlich der Eröffnungs- und Schlusskurse des Vortags, der wichtigsten Widerstands- und Unterstützungsniveaus und der Reaktion des Marktes auf diese Niveaus.
2. Hinweise zum Chart zum sofortigen Überblick.
Abb. 2. Quick Chart Referenz
In Abbildung 2 sehen Sie, wie der unmittelbare Überblick im MetaTrader 5-Chart dargestellt werden.
Schauen wir uns das Skript genauer an, um zu verstehen, wie es funktioniert.
Das MQL5-Skript
Das Skript wurde entwickelt, um die Marktentwicklung des Vortages zu analysieren und den Händlern die wichtigsten Analysen zu präsentieren. Es ist besonders nützlich für Daytrader und technische Analysten, die sich auf das Verständnis der jüngsten Kursbewegungen und Volumentrends verlassen, um fundierte Handelsentscheidungen zu treffen. Nachfolgend finden Sie das vollständige Skript, das Sie auf Ihrer MetaTrader 5-Plattform implementieren können:
//+------------------------------------------------------------------+ //| ACS.mq5 | //| Copyright 2024, MetaQuotes Software Corp. | //| http://www.mql5.com | //+------------------------------------------------------------------+ #property copyright "2024, MetaQuotes Software Corp." #property link "https://www.mql5.com/en/users/lynnchris" #property description "Script that displays previous day metrics on the current chart and predicts market direction." #property version "1.0" #include <Trade\Trade.mqh> //+------------------------------------------------------------------+ //| Input parameters | //+------------------------------------------------------------------+ input color TableTextColor = clrBlue; // Text color for the table input int TableXOffset = 10; // X offset for the table input int TableYOffset = 50; // Y offset for the table input color SupportColor = clrGreen; // Color for the support line input color ResistanceColor = clrRed; // Color for the resistance line //+------------------------------------------------------------------+ //| Global variables | //+------------------------------------------------------------------+ double prevDayHigh, prevDayLow, prevDayOpen, prevDayClose, prevDayVolume; double currentDayVolume; double keySupport, keyResistance; // Initialized but will be calculated //+------------------------------------------------------------------+ //| Main function | //+------------------------------------------------------------------+ void OnStart() { //--- Get previous day's data int prevDayIndex = iBarShift(NULL, PERIOD_D1, iTime(NULL, PERIOD_D1, 1)); if(prevDayIndex == -1) { Print("Error retrieving previous day's data."); return; } prevDayHigh = iHigh(NULL, PERIOD_D1, prevDayIndex); prevDayLow = iLow(NULL, PERIOD_D1, prevDayIndex); prevDayOpen = iOpen(NULL, PERIOD_D1, prevDayIndex); prevDayClose = iClose(NULL, PERIOD_D1, prevDayIndex); prevDayVolume = iVolume(NULL, PERIOD_D1, prevDayIndex); //--- Get today's volume currentDayVolume = iVolume(NULL, PERIOD_D1, 0); // Current day's volume //--- Calculate key support and resistance keySupport = prevDayLow; // Support level can be set to the previous day's low keyResistance = prevDayHigh; // Resistance level can be set to the previous day's high //--- Manage existing lines (if any) //ObjectDelete("SupportLine"); //ObjectDelete("ResistanceLine"); //--- Create support line if(!ObjectCreate(0, "SupportLine", OBJ_HLINE, 0, 0, keySupport)) { Print("Failed to create SupportLine"); } ObjectSetInteger(0, "SupportLine", OBJPROP_COLOR, SupportColor); ObjectSetInteger(0, "SupportLine", OBJPROP_WIDTH, 2); // Set the width of the line //--- Create resistance line if(!ObjectCreate(0, "ResistanceLine", OBJ_HLINE, 0, 0, keyResistance)) { Print("Failed to create ResistanceLine"); } ObjectSetInteger(0, "ResistanceLine", OBJPROP_COLOR, ResistanceColor); ObjectSetInteger(0, "ResistanceLine", OBJPROP_WIDTH, 2); // Set the width of the line //--- Determine the day's nature (Bullish or Bearish) string marketNature; if(prevDayClose > prevDayOpen) { marketNature = "Bullish"; } else if(prevDayClose < prevDayOpen) { marketNature = "Bearish"; } else { marketNature = "Neutral"; } //--- Compare volumes and determine market sentiment string volumeCommentary; if(currentDayVolume > prevDayVolume) { volumeCommentary = "Current day volume is higher than previous day volume. Bullish sentiment may continue."; } else if(currentDayVolume < prevDayVolume) { volumeCommentary = "Current day volume is lower than previous day volume. Bearish sentiment may follow."; } else { volumeCommentary = "Current day volume is equal to previous day volume. Market sentiment remains uncertain."; } //--- Generate market movement commentary string marketCommentary; if(marketNature == "Bullish") { marketCommentary = "The market closed higher yesterday, indicating bullish sentiment. Look for potential continuation patterns."; } else if(marketNature == "Bearish") { marketCommentary = "The market closed lower yesterday, indicating bearish sentiment. Consider taking positions that align with this trend."; } else { marketCommentary = "The market showed neutrality with little change. Watch for potential breakout opportunities."; } //--- Display the information in a table-like format on the chart string textOutput = "Previous Day Analytics:\n"; textOutput += "Open: " + DoubleToString(prevDayOpen, 5) + "\n"; textOutput += "Close: " + DoubleToString(prevDayClose, 5) + "\n"; textOutput += "High: " + DoubleToString(prevDayHigh, 5) + "\n"; textOutput += "Low: " + DoubleToString(prevDayLow, 5) + "\n"; textOutput += "Volume (Prev Day): " + DoubleToString(prevDayVolume, 0) + "\n"; textOutput += "Volume (Current Day): " + DoubleToString(currentDayVolume, 0) + "\n"; textOutput += "Support: " + DoubleToString(keySupport, 5) + "\n"; textOutput += "Resistance: " + DoubleToString(keyResistance, 5) + "\n"; textOutput += "\nMarket Nature: " + marketNature + "\n"; textOutput += volumeCommentary + "\n"; textOutput += marketCommentary; // Draw the text output on the chart Comment(textOutput); } //+------------------------------------------------------------------+ //+------------------------------------------------------------------+
Die Code-Entwicklung
Wir entwickeln unseren Code mit dem MetaEditor. In diesem Fall entscheiden wir uns für die Erstellung eines Skripts. Nachfolgend werden wir die einzelnen Schritte zur Erreichung dieses Ziels erläutern.
1. Eigenschaften
Diese Eigenschaften helfen Ihnen, Ihre Arbeit angemessen zu würdigen und wichtige Informationen über den Autor oder die Quelle des Skripts mitzuteilen. Sie geben auch die Version des Skripts an, was nützlich ist, um die Aktualisierungen zu verfolgen und sicherzustellen, dass die Nutzer über alle Änderungen informiert sind.
#property copyright "2024, MetaQuotes Software Corp" #property link "https://www.mql5.com/en/users/lynnchris" #property version "1.0"
2. Einbinden der erforderlichen Bibliotheken
Diese Zeile bindet die Bibliothek Trade.mqh ein.
Trade: Dieser Begriff bezieht sich wahrscheinlich auf die verschiedenen Funktionen, Klassen oder Objekte, die für die Verwaltung von Handelsgeschäften vorgesehen sind. Diese Elemente erleichtern die Ausführung von Geschäften, die Überprüfung des Handelsstatus und die Abwicklung damit verbundener Aufgaben innerhalb Ihrer Handelsalgorithmen.
.mqh: Diese Dateierweiterung wird für MetaQuotes Header-Dateien verwendet. In MetaTrader dienen .mqh-Dateien dazu, wiederverwendbaren Code zu speichern, einschließlich Funktionen, Klassen oder Bibliotheken. Dieser Code kann leicht in andere MQL-Programme integriert werden, was Effizienz und Modularität fördert.
#include <Trade\Trade.mqh>
3. Eingabeparameter:
Ein Eingabeparameter ist eine in einem MQL5-Programm definierte Variable, die der Nutzer im Strategietester oder in den Eingabeeinstellungen eines EAs anpassen kann, ohne den zugrunde liegenden Code zu ändern.
Das Skript erlaubt auch die Eingabe von Parametern durch den Nutzer, sodass die Händler ihre Analyse flexibel an ihre Präferenzen anpassen können. Das bedeutet, dass sie bestimmte Symbole oder Farben für Unterstützungs- und Widerstandslinien auswählen können, wodurch das Tool persönlicher und leichter zu lesen ist.
input color TableTextColor = clrBlue; // Text color for the table input int TableXOffset = 10; // X offset for the table input int TableYOffset = 50; // Y offset for the table input color SupportColor = clrGreen; // Color for the support line input color ResistanceColor = clrRed; // Color for the resistance line
Als Nächstes befassen wir uns mit globalen Variablen. Diese globalen Variablen speichern Informationen über die Kursentwicklung des Vortages und das Volumen des aktuellen Tages. Die Variablen keySupport und keyResistance werden später im Code initialisiert.
double prevDayHigh, prevDayLow, prevDayOpen, prevDayClose, prevDayVolume; double currentDayVolume; double keySupport, keyResistance; // Initialized but will be calculated
4. Hauptfunktionen:
Dies ist die Hauptfunktion, mit der die Ausführung des Skripts beginnt. Alles, was in dieser Funktion steht, wird ausgeführt, wenn das Skript ausgeführt wird. Skripte sind Einzelausführungsprogramme, die bestimmte Aufgaben in der MetaTrader 5-Umgebung ausführen, wie z. B. das Platzieren eines Handels, das Ändern von Aufträgen oder das Erzeugen von Signalen.
void OnStart()
Zunächst rufen wir die Daten des vorangegangenen Handelstages ab, einschließlich Kursniveau und Volumen. In diesem Schritt wird der Index des letzten abgeschlossenen Tagesbalkens ermittelt, der für die Analyse des jüngsten Marktverhaltens und für fundierte Handelsentscheidungen unerlässlich ist.
int prevDayIndex = iBarShift(NULL, PERIOD_D1, iTime(NULL, PERIOD_D1, 1));
Sie prüft, ob der Index des Vortages erfolgreich abgerufen wurde. Wenn nicht, wird eine Fehlermeldung ausgegeben und die Funktion beendet.
if (prevDayIndex == -1) { Print("Error retrieving previous day's data."); return; }
Als Nächstes werden die Daten des Vortages abgerufen:
prevDayHigh = iHigh(NULL, PERIOD_D1, prevDayIndex); prevDayLow = iLow(NULL, PERIOD_D1, prevDayIndex); prevDayOpen = iOpen(NULL, PERIOD_D1, prevDayIndex); prevDayClose = iClose(NULL, PERIOD_D1, prevDayIndex); prevDayVolume = iVolume(NULL, PERIOD_D1, prevDayIndex);
Das Volumen des aktuellen Tages abrufen
Damit wird das Volumen des aktuellen Tages abgerufen.
currentDayVolume = iVolume(NULL, PERIOD_D1, 0); // Current day's volume
Berechnung von Unterstützungs- und Widerstandsniveaus
Als Unterstützung gilt das Tief des Vortages, als Widerstand das Hoch des Vortages.
keySupport = prevDayLow; // Support level can be set to the previous day's low keyResistance = prevDayHigh; // Resistance level can be set to the previous day's high
Unterstützungs- und Widerstandslinien erstellen
Damit wird versucht, eine horizontale Linie zu erzeugen, die eine Unterstützung darstellt. Schlägt es fehl, wird eine Fehlermeldung ausgegeben. Das gleiche Verfahren gilt für die Widerstandslinie.
if (!ObjectCreate(0, "SupportLine", OBJ_HLINE, 0, 0, keySupport)) { Print("Failed to create SupportLine"); }
Bestimmung der Natur des Marktes
Im nächsten Abschnitt wird anhand der Eröffnungs- und Schlusskurse des Vortages ermittelt, ob der Markt stieg, fiell oder sich seitwärts bewegte:
if (prevDayClose > prevDayOpen) { marketNature = "Bullish"; } else if (prevDayClose < prevDayOpen) { marketNature = "Bearish"; } else { marketNature = "Neutral"; }
Kommentar
Mit der Funktion Comment() können ein beschreibendet Text direkt im Trading-Chart angezeigt werden. Hier können wichtige Informationen wie aktuelle Werte, Handelssignale oder Statusmeldungen angezeigt werden.
Hier ein Kommentar zum aktuellen Volumen im Vergleich zum Vortag:
if (currentDayVolume > prevDayVolume) { volumeCommentary = "Current day volume is higher..."; } else if (currentDayVolume < prevDayVolume) { volumeCommentary = "Current day volume is lower..."; } else { volumeCommentary = "Current day volume is equal..."; }
Das Skript verwendet die Kommentarfunktion, um eine sauber formatierte Nachricht in das Chart zu schreiben, die die Eröffnungs-, Höchst-, Tiefst- und Schlusskurse des Vortages sowie das Volumen des Vortages und des aktuellen Tages anzeigt. Dies dient den Händlern als unmittelbarer Bezugspunkt.
if (marketNature == "Bullish") { marketCommentary = "The market closed higher yesterday..."; } else if (marketNature == "Bearish") { marketCommentary = "The market closed lower yesterday..."; } else { marketCommentary = "The market showed neutrality..."; }
Tabelle anzeigen
Schließlich wird eine Textnachricht mit allen gesammelten Daten erstellt und im Chart angezeigt:
string textOutput = "Previous Day Analytics:\n"; textOutput += "Open: " + DoubleToString(prevDayOpen, 5) + "\n"; ... textOutput += marketCommentary; // Draw the text output on the chart Comment(textOutput);
Tests
Nachfolgend finden Sie die Schritte zur erfolgreichen Implementierung des Skripts.
1: Öffnen Sie MetaTrader 5 und navigieren Sie zum MetaEditor.
2: Erstellen Sie im MetaEditor ein neues Skript, indem Sie Neu > Skript wählen.
3: Kopieren Sie das bereitgestellte Skript und fügen Sie es in den Editor ein.
4: Kompilieren Sie das Skript mit der Schaltfläche Kompilieren. Stellen Sie sicher, dass keine Fehler vorhanden sind.
5: Kehren Sie zu Ihrer MetaTrader-Plattform zurück, suchen Sie das Skript im Navigator-Panel unter „Skripte“ und ziehen Sie es auf den gewünschten Chart. Nachdem das Skript auf das Chart gezogen worden ist, wird folgendes Ergebnis sichtbar:
Abb. 3. Werkzeug Test Ergebnis 1
6: Legen Sie (falls gewünscht) in dem daraufhin angezeigten Dialogfeld alle nutzerdefinierten Eingabeparameter fest. Unten sehen Sie ein GIF-Bild, das zeigt, wie ich einige Parameter im MetaTrader 5 geändert habe.
Abb. 4. Parameter einstellen
Nach der Ausführung des Skripts wurden die folgenden Ergebnisse erzielt. Ich stelle drei verschiedene GIFs der verschiedenen Paare zur Verfügung, mit denen ich das Skript getestet habe. Das erste GIF zeigt ein Währungspaar, USD/SEK, das die unten dargestellten Ergebnisse liefert.
Abb. 5. Test Ergebnis 2
In der obigen Abbildung 5 stellt das Instrument die erforderlichen Informationen effektiv dar. Es zeigt eine erwartete, steigende Marktstimmung (bullish) an. Der Markt verzeichnete zunächst eine leichte Abwärtsbewegung, doch im Laufe des Tages setzte ein starker Aufwärtsimpuls ein.
Zweitens haben wir auch den Crash 900 Index analysiert.
Abb. 6. Test Ergebnis 3
Auch beim Crash 900 Index (Abb. 6) waren die Informationen klar und deutlich und zeigten eine rückläufige Stimmung, die sich schnell und ohne Umkehrung entwickelte.
Schließlich analysierten wir das USDCNH-Paar, wie unten beschrieben.
Abb. 7. Test Ergebnis 4
In der obigen Abbildung 7 zeigte das Instrument eine außergewöhnlich gute Leistung und signalisierte eine Aufwärtsbewegung des Marktes. Der Markt reagierte entsprechend und respektierte sowohl die Widerstände als auch die Unterstützungsniveaus.
Darüber hinaus zeigt Abbildung 3 (Boom 300 Index) einige bemerkenswerte Ergebnisse während des Testprozesses des Tools. Sie zeigt übersichtlich die Anfangs- und Endkurse des Vortages an und bietet so wertvolle Einblicke in die Marktanalyse und das Marktverhalten. Die Daten deuten auch auf einen Abwärtstrend hin, wie die Navigation des Instruments zeigt.
Schlussfolgerung
Nachdem ich das Tool erfolgreich entwickelt und getestet habe, kann ich mit Zuversicht sagen, dass das analytische Kommentarinstrument robust ist. Seine Fähigkeit, frühere Marktbewegungen schnell zu analysieren, Unterstützungs- und Widerstandsniveaus zu ermitteln, Handelsvolumina zu berechnen und auf der Grundlage der gesammelten Informationen Einblicke in erwartete künftige Kursbewegungen zu geben, ist beeindruckend.
Die Informationen werden übersichtlich dargestellt, was die Nutzerfreundlichkeit erhöht. Ich ermutige die Händler, ihre eigenen Handelsstrategien mit diesem Tool zu verbinden, um ihre Ergebnisse und Entscheidungsprozesse zu verbessern. Außerdem habe ich festgestellt, dass das Instrument im Laufe des Tages optimal funktioniert, da es die aktuellen Zeitvolumina berechnet, die für eine genaue Analyse erforderlich sein können.
Datum | Name des Werkzeugs | Beschreibung | Version | Aktualisierungen | Hinweis |
---|---|---|---|---|---|
01/10/24 | Chart Projector | Skript zur Überlagerung der Kursentwicklung des Vortages mit Geistereffekt. | 1.0 | Erste Veröffentlichung | Erstes Werkzeug in „Lynnchris Toolchest“ |
18/11/24 | Analytischer Kommentar | Er liefert Informationen zum Vortag in Tabellenform und nimmt die zukünftige Marktentwicklung vorweg. | 1.0 | Erste Veröffentlichung | Zweites Werkzeug in „Lynnchris Toolchest“ |
Übersetzt aus dem Englischen von MetaQuotes Ltd.
Originalartikel: https://www.mql5.com/en/articles/15927





- 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.