English 日本語
preview
Entwicklung eines Toolkit zur Analyse von Preisaktionen (Teil 5): Volatilitätsnavigator EA

Entwicklung eines Toolkit zur Analyse von Preisaktionen (Teil 5): Volatilitätsnavigator EA

MetaTrader 5Beispiele | 22 April 2025, 08:47
46 0
Christian Benjamin
Christian Benjamin

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.



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:

  1. Das mittlere Band ist in der Regel ein einfacher gleitender Durchschnitt (SMA) der Schlusskurse über einen bestimmten Zeitraum (in der Regel 20 Tage).
  2. Das obere Band entspricht dem mittleren Band plus einer bestimmten Anzahl von Standardabweichungen (in der Regel zwei).
  3. Das untere Band ist der mittlere Band abzüglich der gleichen Anzahl von Standardabweichungen. 

Bollinger Bänder

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.

RSI-Formel

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.

RSI

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.

ATR-Formel

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():

Diese Funktion wird einmal ausgeführt, wenn der EA auf einem Chart gestartet wird. Seine Hauptaufgabe besteht darin, den EA zu initialisieren, einschließlich der Einrichtung der erforderlichen Indikatoren.
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.

SIGNALERZEUGUNG

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

Bollinger Bänder stellen die Marktvolatilität dar, indem sie die Kursabweichungen von einem gleitenden Durchschnitt visualisieren. Die Breite der Bänder kann auf mögliche Volatilitätsspitzen oder ruhige Phasen hinweisen. Der folgende Code veranschaulicht, wie der EA die Bollinger-Bänder auswertet:
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.

Visuelle Warnungen

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

TESTERGEBNISSE

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.

Testergebnis

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.

DatumName des Werkzeugs BeschreibungVersion Aktualisierungen Hinweis
01/10/24Chart ProjectorSkript zur Überlagerung der Kursentwicklung des Vortages mit Geistereffekt.1.0Erste VeröffentlichungErstes Tool in Lynnchris Tool Chest
18/11/24Analytical CommentEr liefert Informationen zum Vortag in Tabellenform und nimmt die zukünftige Marktentwicklung vorweg.1.0Erste VeröffentlichungZweites Tool in Lynnchris Tool Chest
27/11/24Analytics MasterRegelmäßige Aktualisierung der Marktmetriken alle zwei Stunden 1.01Zweite VeröffentlichungDrittes Tool in Lynnchris Tool Chest
02/12/24Analytics Forecaster Regelmäßige Aktualisierung der Marktmetriken alle zwei Stunden mit Telegrammintegration1.1Dritte AuflageTool Nummer 5
 09/12/24Volatility NavigatorDer EA analysiert die Marktbedingungen anhand der Indikatoren Bollinger Bänder, RSI und ATR1.0Erste VeröffentlichungTool Nummer 6

Übersetzt aus dem Englischen von MetaQuotes Ltd.
Originalartikel: https://www.mql5.com/en/articles/16560

Beigefügte Dateien |
Einführung in MQL5 (Teil 10): Eine Anleitung für Anfänger zur Arbeit mit den integrierten Indikatoren in MQL5 Einführung in MQL5 (Teil 10): Eine Anleitung für Anfänger zur Arbeit mit den integrierten Indikatoren in MQL5
Dieser Artikel führt in die Arbeit mit integrierten Indikatoren in MQL5 ein und konzentriert sich auf die Erstellung eines RSI-basierten Expert Advisors (EA) mit einem projektbasierten Ansatz. Sie werden lernen, RSI-Werte abzurufen und zu nutzen, Liquiditätsdurchbrüche zu handhaben und die Handelsvisualisierung mit Chart-Objekten zu verbessern. Darüber hinaus wird in dem Artikel ein wirksames Risikomanagement hervorgehoben, einschließlich der Festlegung eines prozentualen Risikos, der Umsetzung von Risiko-Ertrags-Verhältnissen und der Anwendung von Risikomodifikationen zur Sicherung von Gewinnen.
Integrieren Sie Ihr eigenes LLM in EA (Teil 5): Handelsstrategie mit LLMs entwickeln und testen (III) – Adapter-Tuning Integrieren Sie Ihr eigenes LLM in EA (Teil 5): Handelsstrategie mit LLMs entwickeln und testen (III) – Adapter-Tuning
Angesichts der rasanten Entwicklung der künstlichen Intelligenz sind Sprachmodelle (language models, LLMs) heute ein wichtiger Bestandteil der künstlichen Intelligenz, sodass wir darüber nachdenken sollten, wie wir leistungsstarke LLMs in unseren algorithmischen Handel integrieren können. Für die meisten Menschen ist es schwierig, diese leistungsstarken Modelle auf ihre Bedürfnisse abzustimmen, sie lokal einzusetzen und sie dann auf den algorithmischen Handel anzuwenden. In dieser Artikelserie werden wir Schritt für Schritt vorgehen, um dieses Ziel zu erreichen.
Erstellen von selbstoptimierenden Expert Advisors in MQL5 (Teil 3): Dynamische Trendfolge- und Mean-Reversion-Strategien Erstellen von selbstoptimierenden Expert Advisors in MQL5 (Teil 3): Dynamische Trendfolge- und Mean-Reversion-Strategien
Die Finanzmärkte werden in der Regel entweder in eine Handelsspanne oder in einen Trendmodus eingeteilt. Diese statische Sichtweise des Marktes kann es uns leichter machen, kurzfristig zu handeln. Sie ist jedoch von der Realität des Marktes abgekoppelt. In diesem Artikel geht es darum, besser zu verstehen, wie genau sich die Finanzmärkte zwischen diesen beiden möglichen Modi bewegen und wie wir unser neues Verständnis des Marktverhaltens nutzen können, um Vertrauen in unsere algorithmischen Handelsstrategien zu gewinnen.
Erstellen von selbstoptimierenden Expertenberatern in MQL5 (Teil 2): USDJPY Scalping Strategie Erstellen von selbstoptimierenden Expertenberatern in MQL5 (Teil 2): USDJPY Scalping Strategie
Seien Sie dabei, wenn wir uns heute der Herausforderung stellen, eine Handelsstrategie rund um das USDJPY-Paar zu entwickeln. Wir handeln Kerzenmuster, die auf dem täglichen Zeitrahmen gebildet werden, weil sie potenziell mehr Kraft hinter sich haben. Unsere anfängliche Strategie war gewinnbringend, was uns ermutigte, die Strategie weiter zu verfeinern und zusätzliche Sicherheitsschichten hinzuzufügen, um das gewonnene Kapital zu schützen.