
Entwicklung eines Toolkit zur Analyse von Preisaktionen (Teil 5): Volatilitätsnavigator EA
Einführung
Um die Komplexität des Handels zu beherrschen, reicht es nicht aus, mögliche Marktrichtungen zu erkennen, sondern es ist auch eine präzise Ausführung erforderlich. Viele Händler erleiden Rückschläge nicht aufgrund einer schlechten Handelsausführung, sondern aufgrund von Ungenauigkeiten bei ihren Einstiegspunkten, Stop-Loss-Platzierungen oder Gewinnzielen.
Um diese Herausforderung zu meistern, habe ich ein neues Tool namens Volatility Navigator entwickelt, das die Programmiersprache MQL5 verwendet und speziell auf die Optimierung dieser kritischen Aspekte des Handels ausgerichtet ist. Im Gegensatz zu meinen früheren Tools, die sich in erster Linie auf die Vorhersage von Markttrends konzentrierten, ermittelt Volatility Navigator unabhängig optimale Einstiegspunkte, Stop-Loss-Niveaus und Take-Profit-Ziele.
Durch die Einbeziehung fortschrittlicher technischer Indikatoren in unsere Preisaktionsanalyse wollen wir das Handelserlebnis verbessern und die Strategieformulierung optimieren.
Bitte beachten Sie die folgenden Abschnitte.
- Einführung
- Technische Indikatoren
- Überblick über die Struktur des EA
- Die Hauptlogik des EA
- Implementierung von Warnungen und Benachrichtigungen
- Tests
- Schlussfolgerung
Technische Indikatoren
Technische Indikatoren lassen sich in verschiedene Kategorien einteilen, darunter Trendindikatoren, Momentum-Indikatoren, Volatilitätsindikatoren und Volumenindikatoren, die jeweils unterschiedlichen Zwecken bei der Finanzmarktanalyse dienen. Einige weit verbreitete Beispiele sind der gleitende Durchschnitt, der Relative Strength Index (RSI), die Bollinger Bänder und der Moving Average Convergence Divergence (MACD).
Schauen wir uns die drei Indikatoren genauer an, die wir neben der Preisaktion verwenden werden, um unsere Ziele zu erreichen: Bollinger Bänder, der Relative Strength Index (RSI) und die Average True Range (ATR).
- Bollinger Bänder
Bollinger Bänder wurden von John Bollinger in den frühen 1980er Jahren als technisches Analyseinstrument entwickelt, um Händlern zu helfen, Markttrends und potenzielle Preisumkehrungen zu erkennen. Das Konzept entstand aus dem Wunsch von Bollinger, eine dynamischere Methode zur Messung der Preisvolatilität im Vergleich zu traditionellen technischen Indikatoren anzubieten. John Bollinger wollte ein Handelsinstrument schaffen, das sich an veränderte Marktbedingungen anpassen kann.
Er wollte einen Indikator, der sich an die Marktvolatilität anpasst, was ihn auf die Idee brachte, gleitende Durchschnitte zusammen mit einem Maß für die Preisschwankungen zu verwenden. Bollinger-Bänder bestehen aus drei Linien:
- Das mittlere Band ist in der Regel ein einfacher gleitender Durchschnitt (SMA) der Schlusskurse über einen bestimmten Zeitraum (in der Regel 20 Tage).
- Das obere Band entspricht dem mittleren Band plus einer bestimmten Anzahl von Standardabweichungen (in der Regel zwei).
- Das untere Band ist der mittlere Band abzüglich der gleichen Anzahl von Standardabweichungen.
Abb. 1. Bollinger-Bänder
Die Verwendung von Standardabweichungen ist der Schlüssel zu Bollinger Bänder, da sie ein statistisches Maß für die Volatilität darstellen. Durch die Einbeziehung dieses Maßes können Bollinger Bänder die Kursbewegungen innerhalb einer Spanne effektiv erfassen und Händlern helfen, potenzielle Ausbrüche oder Umkehrungen zu erkennen.
Händler verwenden Bollinger Bänder häufig, um überkaufte oder überverkaufte Bedingungen, potenzielle Trendumkehrungen und die Stärke von Kursbewegungen zu erkennen. So können beispielsweise Kurse, die das obere Band berühren, auf einen überkauften Zustand hindeuten, während Kurse, die das untere Band berühren, auf einen überverkauften Zustand hindeuten.
- Relative Strength Index (RSI)
Der Relative Strength Index (RSI) wurde von J. Welles Wilder Jr. entwickelt und 1978 in seinem Buch „New Concepts in Technical Trading Systems" vorgestellt. Wilder wollte einen Momentum-Oszillator entwickeln, der Händlern helfen könnte, überkaufte und überverkaufte Bedingungen auf den Finanzmärkten zu erkennen. Nachfolgend finden Sie die Formel zur Berechnung des RSI.
Abb. 2. RSI-Formel
Der RSI misst die Geschwindigkeit und Veränderung von Kursbewegungen und hilft dabei, überkaufte oder überverkaufte Marktbedingungen über einen bestimmten Zeitraum, in der Regel 14 Tage, zu erkennen. Bei einem RSI von 0 bis 100 deutet ein Wert über 70 in der Regel darauf hin, dass ein Vermögenswert überkauft ist, während ein RSI unter 30 darauf hindeutet, dass er überverkauft sein könnte.
Händler verwenden den RSI, um potenzielle Umkehrungen zu signalisieren oder Trends zu bestätigen. Darüber hinaus kann eine Divergenz zwischen dem RSI und dem Kursverlauf auf eine nachlassende Dynamik hindeuten und weitere Handelsmöglichkeiten eröffnen.
Abb. 3. RSI-Chart
- Average True Range (ATR)
Der Average True Range (ATR) Indikator wurde von J. Welles Wilder Jr. entwickelt und 1978 in seinem Buch „New Concepts in Technical Trading Systems" vorgestellt. Wilder schuf die ATR, um die Marktvolatilität durch die Berechnung der True Range (TR) zu messen, die die größte Bandbreite der Kursbewegung über einen bestimmten Zeitraum berücksichtigt.
Die ATR ist seither zu einem weit verbreiteten Instrument der technischen Analyse geworden, das Händlern hilft, die Volatilität einzuschätzen und Risiken auf verschiedenen Finanzmärkten zu steuern. Die Average True Range (ATR) ist ein Volatilitätsindikator, der das Ausmaß der Kursbewegung über einen bestimmten Zeitraum misst und Einblicke in die Marktvolatilität bietet, ohne die Richtung der Kursbewegung anzugeben.
Ein höherer ATR-Wert weist auf eine größere Volatilität hin, während ein niedrigerer ATR-Wert eine geringere Volatilität signalisiert. Händler nutzen die ATR als Grundlage für Risikomanagement-Strategien, z. B. für die Festlegung von Stop-Loss-Niveaus und die Positionsgröße auf der Grundlage der Marktbedingungen. Dies hilft bei der Anpassung der Handelsstrategien an die schwankende Marktvolatilität und ermöglicht einen effektiveren Handel in verschiedenen Szenarien. Sehen wir uns im Folgenden die Formel zur Berechnung der ATR an.
Abb. 4. ATR-Formel
Der Zweck der Verwendung der Average True Range (ATR) in der Handelsstrategie besteht darin, Stop-Loss und Take-Profit dynamisch an die aktuelle Marktvolatilität anzupassen. Die ATR dient als Maß für die Preisbewegung und ermöglicht es dem Expert Advisor, in Zeiten hoher Volatilität breitere Niveaus und in ruhigeren Marktphasen engere Niveaus festzulegen. Dieser Ansatz verbessert das Risikomanagement, indem er sicherstellt, dass Handelsgeschäfte unter volatilen Bedingungen nicht vorzeitig gestoppt werden, während gleichzeitig potenzielle Gewinne genutzt werden, wenn die Marktbewegung gedämpfter ist. Durch die Einbeziehung der ATR kann sich der EA an veränderte Marktbedingungen anpassen, was zu einer effektiveren Handelsausführung und höheren Erfolgschancen führt.
Überblick über die Struktur des EA
Der Volatility Navigator Expert Advisor (EA) wurde mit einem strukturierten Layout entwickelt, das die Programmierstandards von MQL5 einhält. Das Verständnis dieses Layouts ist entscheidend, um den EA effektiv einzurichten und Anpassungen vorzunehmen, wenn sich die Marktbedingungen ändern. In MQL5 sind Indikator-Handles zentrale Werkzeuge, die den Prozess der Verwendung von technischen Indikatoren innerhalb des EAs rationalisieren. Anstatt die Indikatoren bei jeder Preisänderung neu zu berechnen, kann der EA schnell auf diese Griffe verweisen, um die neuesten Werte zu erhalten.
So kann der EA beispielsweise immer dann, wenn die Funktion OnTick() ausgeführt wird, effizient auf die relevanten Indikatorwerte zugreifen, was insbesondere bei sich schnell ändernden Marktbedingungen von Vorteil ist. Dieser unmittelbare Zugang ermöglicht bessere Maßnahmen auf der Grundlage der aktuellen Marktdynamik.
Kernfunktionen des EA
Die Hauptkomponenten eines MQL5 Expert Advisors bestehen aus drei Schlüsselfunktionen: OnInit(), OnTick() und OnDeinit().
- Die Funktion OnInit():
int OnInit() { // Initialize RSI rsiHandle = iRSI(NULL, 0, rsiPeriod, PRICE_CLOSE); // Initialize Bollinger Bands bbHandle = iBands(NULL, 0, bbPeriod, 2, 0, PRICE_CLOSE); // Initialize ATR atrHandle = iATR(NULL, 0, atrPeriod); return INIT_SUCCEEDED; }
Im obigen Codeabschnitt erstellen wir Handles für die Indikatoren RSI, Bollinger Bänder und Average True Range (ATR), die alle dem EA bei der Bildung von Handelsentscheidungen helfen werden.
- Die Funktion OnTick():
Die Funktion OnTick() ist von entscheidender Bedeutung, da sie jedes Mal aufgerufen wird, wenn es zu einer Kursschwankung auf dem Markt kommt. Hier wertet der EA die aktuellen Indikatorwerte aus und bestimmt geeignete Handelsaktionen.
void OnTick() { double rsiValue = iRSI(NULL, 0, rsiPeriod, PRICE_CLOSE); double upperBand, middleBand, lowerBand; iBands(NULL, 0, bbPeriod, 2, 0, PRICE_CLOSE, upperBand, middleBand, lowerBand); double atrValue = iATR(NULL, 0, atrPeriod); // Trading logic if (rsiValue > 70 && Close[0] > upperBand) { // Logic to place a sell order } else if (rsiValue < 30 && Close[0] < lowerBand) { // Logic to place a buy order } }
Hier überprüft der EA den RSI-Wert, die Bollinger-Bänder und die ATR, um fundierte Handelsentscheidungen zu treffen. Er verkauft zum Beispiel, wenn der RSI überkaufte Bedingungen anzeigt und der Kurs das obere Bollinger Band überschreitet.
- Die Funktion OnDeinit():
Die Funktion OnDeinit() wird aufgerufen, wenn der EA aus dem Chart entfernt wird. Diese Funktion spielt eine wichtige Rolle bei der Bereinigung von Ressourcen durch die Freigabe von Indikator-Handles.
void OnDeinit(const int reason) { // Release resources for indicators IndicatorRelease(rsiHandle); IndicatorRelease(bbHandle); IndicatorRelease(atrHandle); }
Eingabeparameter
Eine der herausragenden Eigenschaften des Volatility Navigator EA ist seine Flexibilität durch anpassbare Eingabeparameter. Mit diesen Parametern können Händler das Verhalten des EAs auf ihre individuellen Strategien abstimmen. Einige wichtige Eingabeparameter sind:
- Zeitraum des RSI:
input int rsiPeriod = 14; // Standard period for RSI calculation
- Zeitraum der Bollinger Bänder:
input int bbPeriod = 20; // Standard period for Bollinger Bands
- Zeitraum des ATR:
input int atrPeriod = 14; // Period for ATR
Die Hauptlogik des EA
Betrachten wir zunächst das nachstehende Chart, das veranschaulicht, wie das Signal für einen Kaufauftrag generiert wird, wobei der Prozess für einen Verkaufsauftrag umgekehrt ist.Abb. 5. Bedingungen für die Signalerzeugung
- Prozess der Signalberechnung
Die Hauptfunktion des Volatility Navigator EA besteht darin, die Marktbedingungen zu analysieren, um Handelssignale zu generieren. Dabei holt der EA in der Funktion OnTick die aktuellen Werte der relevanten Indikatoren ab. Unten sehen Sie einen Ausschnitt, der zeigt, wie der RSI, die Bollinger-Bänder und die ATR im EA berechnet werden.
// Declare indicator handles int rsiHandle; int bbHandle; int atrHandle; // OnInit function int OnInit() { // Create indicator handles rsiHandle = iRSI(NULL, 0, rsiPeriod, PRICE_CLOSE); bbHandle = iBands(NULL, 0, bbPeriod, bbDevUp, bbDevDown, PRICE_CLOSE); atrHandle = iATR(NULL, 0, atrPeriod); return(INIT_SUCCEEDED); }
In diesem Setup initialisiert die OnInit-Funktion Handles für den RSI, die Bollinger-Bänder und die ATR, sodass der EA für die laufenden Berechnungen auf deren Werte zugreifen kann.
- Bewertung der RSI-Bedingungen
Der RSI-Indikator hilft, potenzielle Einstiegs- und Ausstiegspunkte zu identifizieren, indem er überkaufte und überverkaufte Bedingungen anzeigt. Die Analyse des RSI-Wertes ermöglicht es dem EA, strategische Handelsentscheidungen zu treffen. Der folgende Ausschnitt zeigt, wie die RSI-Werte überprüft werden können.
double rsiValue = iCustom(NULL, 0, "RSI", rsiPeriod, 0); if (rsiValue > 70) { // Market is overbought - potentially signal to sell } else if (rsiValue < 30) { // Market is oversold - potentially signal to buy }
In diesem Code ruft der EA den aktuellen RSI-Wert ab und vergleicht ihn mit den vordefinierten Schwellenwerten von 70 und 30, um potenzielle Handelssignale zu ermitteln.
- Analysieren von Bollinger-Bändern
double upperBand = iBands(NULL, 0, bbPeriod, bbDevUp, 0, PRICE_CLOSE); double lowerBand = iBands(NULL, 0, bbPeriod, -bbDevDown, 0, PRICE_CLOSE); double price = Close[0]; if (price < lowerBand) { // Price is touching the lower band - potential buy signal } else if (price > upperBand) { // Price is touching the upper band - potential sell signal }
Dieser Ausschnitt zeigt die Logik, die der EA anwendet, um zu prüfen, ob der aktuelle Kurs in der Nähe der oberen oder unteren Bollinger-Bänder liegt, was Kauf- oder Verkaufssignale auslösen kann.
- Einbezug der Average True Range (ATR)
ATR bietet einen Einblick in die Marktvolatilität und unterstützt das Risikomanagement durch die Einstellungen für Stop-Loss und Take-Profit. Der folgende Code ruft den ATR-Wert ab:
double atrValue = iATR(NULL, 0, atrPeriod); if (atrValue > atrThreshold) { // High volatility - consider entering trades } else { // Low volatility - potentially stay out of the market }
In diesem Beispiel prüft der EA den ATR, um festzustellen, ob die Volatilität ausreichend ist, um einen Handel zu rechtfertigen. Händler bevorzugen oft hohe ATR-Werte, da sie darauf hindeuten, dass bedeutende Kursbewegungen zu erwarten sind.
- Generierung von Handelssignalen
Durch die Kombination der Erkenntnisse aus dem RSI, den Bollinger Bändern und der ATR erzeugt der EA zuverlässigere Handelssignale. Das folgende Abschnitt zeigt, wie der EA diese Signale formulieren würde:
if (rsiValue < 30 && price < lowerBand && atrValue > atrThreshold) { // Generate buy signal } else if (rsiValue > 70 && price > upperBand && atrValue > atrThreshold) { // Generate sell signal }In dieser zusammengesetzten Analyse entsteht ein Kaufsignal, wenn der Markt überverkauft ist, wie der RSI anzeigt, der Kurs das untere Bollinger Band berührt und die ATR eine angemessene Volatilität anzeigt. Umgekehrt wird unter den umgekehrten Bedingungen ein Verkaufssignal erzeugt.
- Visuelles Feedback auf dem Chart
Um die Nutzererfahrung zu verbessern, gibt der EA visuelles Feedback, wenn er Signale erzeugt. Der folgende Code zeigt, wie dies mit eindeutigen Chartmarkierungen umgesetzt wird:
void DrawTradeSignals() { if (buySignal) { // Draw buy signal on the chart ObjectCreate(0, "BuySignal" + IntegerToString(TimeCurrent()), OBJ_ARROW, 0, Time[0], price); } else if (sellSignal) { // Draw sell signal on the chart ObjectCreate(0, "SellSignal" + IntegerToString(TimeCurrent()), OBJ_ARROW, 0, Time[0], price); } }
Zusammenfassend lässt sich sagen, dass sich die Hauptlogik des Volatility Navigator EA auf die systematische Auswertung aktueller Marktdaten anhand mehrerer Indikatoren konzentriert. Durch die Kombination der Erkenntnisse aus RSI, Bollinger Bänder und ATR kann der EA robuste Handelssignale generieren und gleichzeitig wertvolles visuelles Feedback auf dem Chart liefern. Dieser vielschichtige Ansatz verbessert die Bewertungen der Händler und hilft ihnen letztlich, sich auf den volatilen Märkten zurechtzufinden.
Implementierung von Warnungen und Nachrichten in den Volatility Navigator EA
Der Volatility Navigator Expert Advisor (EA) ist mit einem integrierten Warn- und Nachrichtensystem ausgestattet, das die Fähigkeit des Händlers verbessert, effektiv auf Marktbedingungen zu reagieren. Dieses System ist entscheidend für die rechtzeitige Bereitstellung von Erkenntnissen und Warnungen auf der Grundlage spezifischer Handelssignale, die von den Kernindikatoren des EA generiert werden: dem Relative Strength Index (RSI), den Bollinger Bändern und der Average True Range (ATR).
- Arten von Warnungen im EA
Audio-Warnungen: Der EA ist so programmiert, dass er Audio-Benachrichtigungen ausgibt, sobald ein wichtiges Handelssignal ausgelöst wird. Wenn der RSI beispielsweise über 70 steigt, was auf einen überkauften Zustand hinweist, oder unter 30 fällt, was auf einen überverkauften Zustand hinweist, ertönt ein akustischer Alarm. Diese Warnungen ermöglichen es den Händlern, sofort zu reagieren und auf der Grundlage der erkannten Marktchancen rasche Entscheidungen zu treffen.
Visuelle Warnungen: Zusätzlich zu den akustischen Hinweisen enthält der EA auch visuelle Warnungen direkt auf dem Trading-Chart. Wenn beispielsweise ein Handelssignal erzeugt wird, kann der EA die Farbe der Kurslinie ändern oder eine Meldung auf dem Bildschirm anzeigen, die die Art des Signals (Kauf oder Verkauf) hervorhebt. Diese Funktion ermöglicht es Händlern, schnell einen Blick auf ihre Charts zu werfen und die aktuellen Marktbedingungen einzuschätzen, ohne sich ausschließlich auf Audio-Benachrichtigungen verlassen zu müssen.
- Integration von Warnungen in die EA-Logik
Die Warnungen und Nachrichten innerhalb des Volatility Navigator EA sind reibungslos in seine Haupt-Handelslogik integriert:
Während jeder OnTick-Ausführung überwacht der EA kontinuierlich die Indikatoren auf potenzielle Handelssignale. Wenn der EA feststellt, dass bestimmte Schwellenwerte erreicht wurden, z. B. das Überschreiten eines vordefinierten RSI-Niveaus, wird eine Warnsequenz ausgelöst. Sobald ein Handelssignal bestätigt wird, aktiviert der EA die entsprechenden Warnungen.
Dieser Aktivierungsprozess kann das Abspielen eines Tons oder die Erzeugung einer visuellen Markierung auf der Chart beinhalten. Die Warnmeldungen liefern ein sofortiges Feedback zu den Marktbedingungen und helfen Händlern, schnelle und fundierte Entscheidungen zu treffen. Dieses Engagement fördert die aktive Teilnahme am Handelsprozess und erhöht die Wahrscheinlichkeit, profitable Marktbewegungen zu erfassen.
// Example of defining thresholds double rsiValue = iRSI(NULL, 0, 14, PRICE_CLOSE); // Check for overbought and oversold conditions if (rsiValue > 70) { // Audio Alert PlaySound("alert.wav"); // Visual Alert on Chart ObjectCreate("OverboughtAlert", OBJ_TEXT, 0, Time[0], High[0]); ObjectSetText("OverboughtAlert", "Overbought Signal!", 12, "Arial", clrRed); // Additional actions like placing an order can be added here } else if (rsiValue < 30) { // Audio Alert PlaySound("alert.wav"); // Visual Alert on Chart ObjectCreate("OversoldAlert", OBJ_TEXT, 0, Time[0], Low[0]); ObjectSetText("OversoldAlert", "Oversold Signal!", 12, "Arial", clrGreen); // Additional actions like placing an order can be added here }
Der bereitgestellte Code-Abschnitt wurde entwickelt, um akustische und visuelle Warnungen innerhalb des Volatility Navigator Expert Advisor (EA) zu implementieren, die auf dem Verhalten des Relative Strength Index (RSI) basieren. Zunächst berechnet der Code den aktuellen RSI-Wert mithilfe der iRSI-Funktion, die das aktuelle Chartsymbol, den Zeitrahmen, den Zeitraum (14) und den Schlusskurs als Eingaben benötigt. Anschließend wird geprüft, ob der RSI-Wert den Schwellenwert von 70 überschreitet, was auf überkaufte Bedingungen hindeutet. Wenn diese Bedingung erfüllt ist, wird die Funktion PlaySound aufgerufen, um ein akustisches Signal abzuspielen, das die sofortige Aufmerksamkeit des Händlers erregt.
Abb. 6. Visuelle Warnungen
Darüber hinaus wird ein visueller Alarm auf dem Handelschart erzeugt, indem ein Textobjekt auf dem aktuellen Höchstkursniveau platziert wird, das dieses überkaufte Signal in roter Schrift kennzeichnet, um sicherzustellen, dass es auffällt. Fällt der RSI-Wert hingegen unter den Schwellenwert von 30, was auf eine überverkaufte Situation hinweist, wird dasselbe Verfahren angewandt: ein akustischer Alarm ertönt und ein Textobjekt wird auf dem aktuellen niedrigen Kursniveau generiert, das diesmal das Signal in grüner Farbe anzeigt.
Dieses duale Warnsystem, das sowohl akustische als auch visuelle Elemente umfasst, verbessert die Fähigkeit des Händlers, informiert zu bleiben und sofort auf bedeutende Marktbewegungen zu reagieren, wodurch die allgemeine Handelseffizienz verbessert wird.
Das akustische und visuelle Warnsystem des Volatilitätsnavigators EA wurde entwickelt, um eine rechtzeitige Reaktion auf veränderte Marktbedingungen zu ermöglichen. Durch die Implementierung dieser Warnungen ermöglicht der EA den Händlern, informiert und handlungsbereit zu bleiben, was letztendlich ihre allgemeine Handelseffizienz und ihren Erfolg steigert.
Nachfolgend finden Sie den vollständigen Code für den Expert Advisor (EA). Dieser Code enthält alle notwendigen Anweisungen und die Logik, die die Handelsoperationen steuern.
//+------------------------------------------------------------------+ //| Volatility Navigator.mq5 | //| Copyright 2024, Christian Benjamin | //| https://www.mql5.com | //+------------------------------------------------------------------+ #property copyright "2024, MetaQuotes Software Corp." #property link "https://www.mql5.com/en/users/lynnchris" #property description "The EA analyzes market conditions using the Bollinger Bands, RSI and ATR indicators" #property version "1.1" #property strict // Input parameters for trading strategy input int rsiPeriod = 14; // Period for RSI calculation input double overboughtLevel = 70.0; // RSI level for overbought condition input double oversoldLevel = 30.0; // RSI level for oversold condition input int bbPeriod = 20; // Period for Bollinger Bands input double bbDeviation = 2.0; // Deviation for Bollinger Bands input int atrPeriod = 14; // ATR period for stop loss and take profit calculations input double atrMultiplier = 1.5; // Multiplier for ATR in calculating stop loss and take profit input string signalSound = "alert.wav"; // Sound file for alert notifications // Indicator handles for Bollinger Bands and ATR int bbHandle = 0; int atrHandle = 0; // Function to clear previous drawings from the chart void ClearPreviousDrawings() { // Delete any previously created trade lines and signal text if (ObjectFind(0, "EntryPoint") != -1) ObjectDelete(0, "EntryPoint"); if (ObjectFind(0, "StopLoss") != -1) ObjectDelete(0, "StopLoss"); if (ObjectFind(0, "TakeProfit") != -1) ObjectDelete(0, "TakeProfit"); if (ObjectFind(0, "SignalText") != -1) ObjectDelete(0, "SignalText"); if (ObjectFind(0, "BuyArrow") != -1) ObjectDelete(0, "BuyArrow"); if (ObjectFind(0, "SellArrow") != -1) ObjectDelete(0, "SellArrow"); } // Function to draw entry points, stop loss, and take profit on the chart void DrawTradeLines(double entryPoint, double stopLoss, double takeProfit, string signalText) { // Clear previous drawings before drawing new ones ClearPreviousDrawings(); // Draw the entry point line if (!ObjectCreate(0, "EntryPoint", OBJ_HLINE, 0, TimeCurrent(), entryPoint)) Print("Failed to create EntryPoint line. Error: ", GetLastError()); ObjectSetInteger(0, "EntryPoint", OBJPROP_COLOR, clrGreen); ObjectSetInteger(0, "EntryPoint", OBJPROP_WIDTH, 2); // Draw the stop loss line if (!ObjectCreate(0, "StopLoss", OBJ_HLINE, 0, TimeCurrent(), stopLoss)) Print("Failed to create StopLoss line. Error: ", GetLastError()); ObjectSetInteger(0, "StopLoss", OBJPROP_COLOR, clrRed); ObjectSetInteger(0, "StopLoss", OBJPROP_WIDTH, 2); // Draw the take profit line if (!ObjectCreate(0, "TakeProfit", OBJ_HLINE, 0, TimeCurrent(), takeProfit)) Print("Failed to create TakeProfit line. Error: ", GetLastError()); ObjectSetInteger(0, "TakeProfit", OBJPROP_COLOR, clrBlue); ObjectSetInteger(0, "TakeProfit", OBJPROP_WIDTH, 2); // Draw a label with the signal text to provide information at a glance if (!ObjectCreate(0, "SignalText", OBJ_LABEL, 0, TimeCurrent(), entryPoint + 10)) Print("Failed to create SignalText label. Error: ", GetLastError()); ObjectSetInteger(0, "SignalText", OBJPROP_XDISTANCE, 10); ObjectSetInteger(0, "SignalText", OBJPROP_YDISTANCE, 30); ObjectSetInteger(0, "SignalText", OBJPROP_COLOR, clrWhite); ObjectSetInteger(0, "SignalText", OBJPROP_FONTSIZE, 12); ObjectSetString(0, "SignalText", OBJPROP_TEXT, signalText); } // Function to draw arrows on the chart at entry points void DrawEntryArrow(double price, string label, color arrowColor) { if (!ObjectCreate(0, label, OBJ_ARROW, 0, TimeCurrent(), price)) { Print("Failed to create arrow object. Error: ", GetLastError()); return; } ObjectSetInteger(0, label, OBJPROP_ARROWCODE, 233); // Arrow code for upward direction ObjectSetInteger(0, label, OBJPROP_COLOR, arrowColor); ObjectSetInteger(0, label, OBJPROP_WIDTH, 2); // Set the width of the arrow } // Function to manage open positions for efficient trade execution void ManageOpenPositions(string symbol) { // Loop through all open positions for (int i = PositionsTotal() - 1; i >= 0; i--) { ulong ticket = PositionGetTicket(i); if (PositionSelectByTicket(ticket)) { // Check if the position is for the current symbol if (PositionGetString(POSITION_SYMBOL) == symbol) { double currentProfit = PositionGetDouble(POSITION_PROFIT); Print("Current Profit for position: ", currentProfit); // Additional management logic can be added here (e.g., close position, update SL/TP) } } } } // Function to calculate trade parameters such as entry point, stop loss, and take profit void CalculateTradeParameters() { // Get the current RSI value double rsiValue = iRSI(Symbol(), PERIOD_CURRENT, rsiPeriod, PRICE_CLOSE); Print("RSI Value: ", rsiValue); double bbUpper = 0.0; double bbLower = 0.0; double atrValue = 0.0; // Get the latest closing prices double closePrices[]; if (CopyClose(NULL, 0, 0, 1, closePrices) <= 0) { Print("Error copying close prices: ", GetLastError()); return; // Exit if there's an error } // Initialize and get values for Bollinger Bands if (bbHandle == 0) { bbHandle = iBands(NULL, 0, bbPeriod, 0, bbDeviation, PRICE_CLOSE); } if (bbHandle != INVALID_HANDLE) { double bbBuffer[]; // Get the upper and lower Bollinger Bands if (CopyBuffer(bbHandle, 1, 0, 1, bbBuffer) > 0) { bbUpper = bbBuffer[0]; // Upper band value Print("Bollinger Band Upper: ", bbUpper); } if (CopyBuffer(bbHandle, 2, 0, 1, bbBuffer) > 0) { bbLower = bbBuffer[0]; // Lower band value Print("Bollinger Band Lower: ", bbLower); } // Initialize and get the ATR value if (atrHandle == 0) { atrHandle = iATR(NULL, 0, atrPeriod); } if (atrHandle != INVALID_HANDLE) { double atrBuffer[]; if (CopyBuffer(atrHandle, 0, 0, 1, atrBuffer) > 0) { atrValue = atrBuffer[0]; // Current ATR value Print("ATR Value: ", atrValue); } } double entryPoint, stopLoss, takeProfit; // Generate buy or sell signals based on Bollinger Bands and RSI values if (closePrices[0] < bbLower && rsiValue < oversoldLevel) // Buy Condition { entryPoint = closePrices[0]; stopLoss = entryPoint - (atrValue * atrMultiplier); takeProfit = entryPoint + (atrValue * atrMultiplier * 2); DrawTradeLines(entryPoint, stopLoss, takeProfit, "Buy Signal"); DrawEntryArrow(entryPoint, "BuyArrow", clrGreen); // Draw Buy Arrow PlaySound(signalSound); // Notify with sound for new entry } else if (closePrices[0] > bbUpper && rsiValue > overboughtLevel) // Sell Condition { entryPoint = closePrices[0]; stopLoss = entryPoint + (atrValue * atrMultiplier); // Above entry for short position takeProfit = entryPoint - (atrValue * atrMultiplier * 2); // Below entry for short position DrawTradeLines(entryPoint, stopLoss, takeProfit, "Sell Signal"); DrawEntryArrow(entryPoint, "SellArrow", clrRed); // Draw Sell Arrow PlaySound(signalSound); // Notify with sound for new entry } } } // Expert initialization function int OnInit() { // Initialization tasks can be done here return INIT_SUCCEEDED; } // Expert deinitialization function void OnDeinit(const int reason) { // Release the indicator handles when the EA is removed if (bbHandle != 0) IndicatorRelease(bbHandle); if (atrHandle != 0) IndicatorRelease(atrHandle); ClearPreviousDrawings(); // Clear drawings on removal } // Expert tick function void OnTick() { ManageOpenPositions(Symbol()); // Manage open positions before calculating new parameters CalculateTradeParameters(); // Calculate trade parameters based on market data } //+------------------------------------------------------------------+
Tests
Um den Volatility Navigator Expert Advisor (EA) zu Testzwecken zu einem Chart in MetaTrader 5 hinzuzufügen, müssen Sie zunächst sicherstellen, dass Ihre EA-Datei ordnungsgemäß auf der MetaTrader 5-Plattform installiert ist. Navigieren Sie zum „Navigator" auf der linken Seite und suchen Sie unter dem Abschnitt „Expert Advisors" Ihren EA. Wenn sie nicht sichtbar ist, müssen Sie möglicherweise die Liste aktualisieren, indem Sie mit der rechten Maustaste klicken und „Aktualisieren" wählen, oder sicherstellen, dass sich die EA-Dateien im richtigen Verzeichnis befinden (insbesondere im Ordner MQL5 > Experts innerhalb Ihrer MetaTrader-Installation).
Wenn Sie den EA gefunden haben, ziehen Sie ihn einfach auf den gewünschten Chart oder machen Sie einen Doppelklick auf seinen Namen, um sein Einstellungsfenster zu öffnen. Dort können Sie Parameter wie die Losgröße und Indikatoren für Ihre Strategie konfigurieren. Nachdem Sie die Einstellungen konfiguriert haben, müssen Sie den automatischen Handel aktivieren, indem Sie auf die Schaltfläche „AutoTrading" in der Symbolleiste klicken. Klicken Sie abschließend auf „OK", um den EA anzuwenden, und er beginnt mit der Ausführung von Handelsgeschäften auf der Grundlage der vordefinierten Strategie. Überprüfen Sie immer die Registerkarte „Handel", um die Aktivität während der Tests zu überwachen. In diesem Projekt, das ich entwickelt habe, habe ich den Expert Advisor (EA) auf einem Demokonto getestet. Sie können aber auch einen Backtest mit historischen Daten durchführen, bevor Sie echtes Geld riskieren.
Nachdem Sie den EA auf den Chart gezogen haben, müssen Sie geduldig warten, bis die Signale generiert werden, sobald bestimmte Bedingungen von den Indikatoren erfüllt werden, wie oben erläutert. Wenn diese Bedingungen erfüllt sind, zeigt der EA drei Linien auf dem Chart an: den Stop-Loss, den Take-Profit und den Einstiegspunkt. Außerdem ertönt ein akustisches Signal, das den Händler darauf aufmerksam macht, und dieses Signal bleibt bestehen, bis der genaueste Einstiegspunkt erreicht ist.
Nachfolgend haben wir die Ergebnisse unserer Tests zu Ihrer Information dargestellt
Abb. 7. Test Ergebnisse
Im obigen Chart sehen Sie die Aufträge, die ich nach Erhalt der Signale ausgeführt habe und die derzeit alle im Gewinn sind. Das Chart zeigt auch die von den Signalen angezeigten Niveaus als horizontale Linien an: Take-Profit ist blau, der Einstiegspunkt grün und Stop-Loss rot dargestellt. Werfen wir auch einen Blick auf das folgende GIF, um einen umfassenderen Einblick zu erhalten.
Abb. 8. Testergebnis
Schlussfolgerung
Dieses Tool konzentriert sich in erster Linie darauf, vielversprechende und profitable Einstiegspunkte, Take-Profit und Stop-Loss zu liefern. Es kann auf verschiedene Charts angewendet werden und unterstützt alle Zeitrahmen. Für ein Scalping-Handel ist es ratsam, kürzere Zeitrahmen zu verwenden, während längere Handelsgeschäfte von höheren Zeitrahmen profitieren können. Darüber hinaus ist es von Vorteil, dieses Instrument zusammen mit Ihren eigenen Strategien einzusetzen, um die Ergebnisse zu verbessern.
Stellen Sie sicher, dass Sie das Tool erst testen und ausprobieren, bevor Sie echtes Geld einsetzen. Bitte beachten Sie, dass mit diesem Tool keine Handelsgeschäften eröffnet werden können; mein Ziel in dieser Serie ist ausschließlich die Entwicklung von Tools zur Marktanalyse.
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 Tool in Lynnchris Tool Chest |
18/11/24 | Analytical Comment | Er liefert Informationen zum Vortag in Tabellenform und nimmt die zukünftige Marktentwicklung vorweg. | 1.0 | Erste Veröffentlichung | Zweites Tool in Lynnchris Tool Chest |
27/11/24 | Analytics Master | Regelmäßige Aktualisierung der Marktmetriken alle zwei Stunden | 1.01 | Zweite Veröffentlichung | Drittes Tool in Lynnchris Tool Chest |
02/12/24 | Analytics Forecaster | Regelmäßige Aktualisierung der Marktmetriken alle zwei Stunden mit Telegrammintegration | 1.1 | Dritte Auflage | Tool Nummer 5 |
09/12/24 | Volatility Navigator | Der EA analysiert die Marktbedingungen anhand der Indikatoren Bollinger Bänder, RSI und ATR | 1.0 | Erste Veröffentlichung | Tool Nummer 6 |
Übersetzt aus dem Englischen von MetaQuotes Ltd.
Originalartikel: https://www.mql5.com/en/articles/16560





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