English
preview
Vom Anfänger zum Experten: Automatisierung von Intraday-Strategien

Vom Anfänger zum Experten: Automatisierung von Intraday-Strategien

MetaTrader 5Beispiele |
46 0
Clemence Benjamin
Clemence Benjamin

Inhalt:

  1. Einführung
  2. Konzeptionelle Analyse und Marktbeobachtung
  3. Umsetzung
  4. Tests
  5. Schlussfolgerung
  6. Wichtige Erkenntnisse
  7. Anlagen



Einführung

Unter Intraday-Handel versteht man das Eröffnen und Schließen von Positionen innerhalb desselben Handelstages. Einfach ausgedrückt bedeutet das, dass wir kein Interesse an langfristigen Anlagen oder Übernachtpositionen haben. Stattdessen wollen wir kürzere Marktbewegungen nutzen – oft innerhalb von Minuten oder Stunden.

Da der Intraday-Handel in einem schnelllebigen Umfeld stattfindet, müssen Händler konsequent Entscheidungen treffen. Emotionale Verzögerungen oder Zögern führen oft dazu, dass Einstiege verpasst, Ausstiege vorzeitig erfolgen oder Reaktionen zu spät erfolgen. Genau hier zeigt die Automatisierung ihre Stärke.

Ein weitverbreitetes Intraday-Konzept ist der „Moving Average Bounce“. In Trendmärkten zieht sich der Kurs oft in Richtung eines gleitenden Durchschnitts zurück, bevor er sich wieder in Trendrichtung bewegt. Der gleitende Durchschnitt fungiert in Aufwärtstrends als dynamische Unterstützung und in Abwärtstrends als dynamischer Widerstand.

Unter den verschiedenen Zeiträumen hat sich der gleitende Durchschnitt mit einer Periodenlänge von 50 zu einer beliebten Referenzgröße für institutionelle Anleger entwickelt. Er ist nicht zu schnell, um so unruhig zu sein wie der MA 10 oder der MA 20, und nicht zu langsam wie der MA 200. Er bietet ein ausgewogenes Verhältnis zwischen Reaktionsfähigkeit und Struktur. Für Intraday-Strategien ist dieses Gleichgewicht ideal.

Auch wenn sich dieser Artikel auf den MA 50 konzentriert, wird das endgültige System die Anpassung der Periode des gleitenden Durchschnitts ermöglichen. Flexibilität gewährleistet Anpassungsfähigkeit an unterschiedliche Zeiträume und Handelsstile.



Konzeptionelle Analyse und Marktbeobachtung

Bevor ich mit dem Programmieren begann, habe ich eine manuelle Rückwärtsanalyse der Charts Kerze für Kerze durchgeführt. Dies ist ein wichtiger Schritt, den viele Entwickler überspringen. Wenn wir die historischen Kursdaten manuell Kerze für Kerze rückwärts durchblättern, können wir beobachten, wie sich der Kurs im Umfeld des MA 50 tatsächlich verhält.

Was wir herausgefunden haben, ist entscheidend: Es gibt kein einheitliches, festgelegtes Abprallmuster.

Manchmal zeigt sich der Abpraller als klar erkennbarer Pin-Bar. Der Schatten durchbricht den MA 50 oder liegt genau auf ihm auf, bevor der Kurs abprallt und deutlich in Trendrichtung schließt.

In anderen Fällen entsteht der Abpraller durch klassische Umkehrmuster:

  • Doppelter Boden im Bereich des gleitenden Durchschnitts 50 in einem Aufwärtstrend.
  • Doppeltop im Bereich des MA 50 in eines Abwärtstrends.
  • „Engulfing“-Kerzenmuster auf MA-Ebene.
  • Ein Ausbruch aus einer „Inside Bar“, der nach dem Kontakt mit dem gleitenden Durchschnitt auftritt.

In einigen Fällen durchbricht der Kurs den gleitenden Durchschnitt leicht, bildet eine kleinere Struktur und kehrt dann für einen zweiten Test zurück – wodurch vor der Fortsetzung ein zweistufiger Retest entsteht.

Diese Variabilität macht etwas Wichtiges deutlich: Der Abpraller ist kein Kerzenmuster – es handelt sich vielmehr um ein Cluster aus Marktreaktionen.

Daher darf die Automatisierung nicht zu starr sein. Wenn wir nur die Bedingung einer einzigen „Pin-Bar“ programmieren, werden wir viele gültige Abpraller übersehen. Wenn wir ausschließlich die „Engulfing“-Logik programmieren, ignorieren wir erneute strukturelle Tests.

Die Strategie muss daher den Begriff „Reaktion“ abstrakt betrachten, anstatt sich auf eine bestimmte Kerzenformation zu konzentrieren.

Beobachtung der Wahrscheinlichkeit wiederholter Abpraller


Eine weitere wichtige Erkenntnis ergab sich aus der manuellen Analyse: Wenn der Kurs zuvor im Rahmen eines Trends den gleitenden Durchschnitt 50 beachtet hat, weist die nächste Interaktion oft eine höhere Wahrscheinlichkeit für eine Reaktion auf.

Mit anderen Worten: Wenn der Kurs während eines Trends einmal deutlich vom gleitenden Durchschnitt der Periodenlänge 50 abgeprallt ist, ist es wahrscheinlicher, dass die Marktteilnehmer diesen gleitenden Durchschnitt erneut verteidigen, sobald der Kurs das nächste Mal dorthin zurückkehrt.

Dies kann nicht garantiert werden. Es handelt sich um einen probabilistischen Ansatz. Doch die Wahrscheinlichkeit ist die Grundlage des Handels.

Dieses wiederholte Verteidigungsverhalten legt nahe, dass wir einen kontextbezogenen Filter einführen können:

  • Hat der MA 50 in letzter Zeit als Unterstützung/Widerstand fungiert?
  • War die vorherige Reaktion ausgeprägt?
  • Hält der Trend weiterhin an?

Die folgenden Abbildungen (Abb. 1 und Abb. 2) veranschaulichen diese Ideen:

Abb. 1. Doppelboden-Formationen im Bereich des EMA 50, das Verhalten bei einem Retest in zwei Schritten und eine höhere Wahrscheinlichkeit, wenn zuvor ein Abprall stattgefunden hat

Abb. 2. Abwärtsgerichteter Abpraller vom EMA 50


Umsetzung

Nun setzen wir die Forschungsergebnisse in konkrete Strukturen um.

Der erste Schritt ist die Trendbestimmung:

  • Kurs über dem MA 50 → bullische Trendrichtung.
  • Kurs unter dem MA 50 → bärische Trendrichtung.

Zweiter Schritt: Erkennen der EMA-Interaktion anhand der Kerzenmechanik:

  • Bullisches Signal: Die Kerze durchbricht den EMA und schließt darüber.
  • Bärisches Signal: Die Kerze durchbricht den EMA und schließt darunter.

Dadurch wird die Abhängigkeit von exakter Nähe beseitigt und eine verhaltensorientierte Kernlogik geschaffen.

Dritter Schritt: Reaktionsbestätigung. Zu den flexiblen Bedingungen gehören:

  • Bullischer oder bärischer Schlusskurs nach Berührung des EMA.
  • Bruch eines lokalen Hochs/Tiefs nach dem Retest.
  • Die Ablehnung der Pin-Bars übersteigt das Verhältnis zur Körpergröße.
  • Bestätigung der zweiten Bewegung nach der ersten Reaktion.

Vierter Schritt: Filter für wiederholte Verteidigung. Nachverfolgung früherer Abprallereignisse; erlaube Einstiege mit höherer Wahrscheinlichkeit, wenn der EMA in jüngster Zeit als Unterstützung/Widerstand fungierte.

Die MQL5-Implementierung umfasst:

  • Erstellen eines MA-Handles über iMA()
  • Verwendung von CopyBuffer() für historische EMA-Werte
  • Analyse von OHLC-Kerzenstrukturen
  • Verfolgung früherer Abprallereignisse mithilfe von Flags
  • Ausführung von Trades mithilfe der CTrade-Klasse

Zu den modularen Komponenten gehören:

  • CheckTrend()
  • CheckEMAInteraction()
  • CheckReaction()
  • CheckPreviousBounce()
  • ExecuteTrade()
  • ManageRisk()

Zukünftige Erweiterungsmodule können Folgendes umfassen:

  • Bestätigung über mehrere Zeitrahmen hinweg
  • ATR-basierte dynamische Stopps
  • Automatisierung bis zur Gewinnschwelle
  • Logik des Trailing-Stop

Ausführliche Erläuterung des Codes

In diesem Abschnitt erläutern wir den Expert Advisor Zeile für Zeile und Abschnitt für Abschnitt und beschreiben, was wir deklarieren, warum wir es deklarieren und wie jeder Strukturblock zur Gesamtarchitektur beiträgt.

Diese Erläuterung folgt dem natürlichen Ablauf des Programms – von der Initialisierung bis zur Ausführung – genau so, wie es vom MetaTrader 5-Terminal verarbeitet wird.

1. Deklaration der Eigenschaften und Handelsobjekt

Ganz am Anfang der Datei definieren wir Metadaten und legen strenge Kompilierungsregeln fest

Wir deklarieren:
  • „#property strict“ zur Durchsetzung moderner MQL5-Syntaxstandards.
  • „#property version“ zur Verfolgung der EA-Entwicklung.
  • „#property description“ zur Dokumentation der Programmidee.

Unmittelbar danach binden wir die Trade-Bibliothek ein und instanziieren ein CTrade-Objekt. Dieses Objekt wird alle Handelsvorgänge abwickeln, wie beispielsweise Kauf- und Verkaufsaufträge. Anstatt Handelsaufträge manuell zu erstellen, nutzen wir die standardisierte CTrade-Klasse, um die Ausführung übersichtlicher zu gestalten.

#property strict
#property version   "2.00"
#property description "EMA 50 Bounce EA using Candle Interaction Logic"

#include <Trade/Trade.mqh>
CTrade trade;
In diesem Abschnitt wird die Umgebung eingerichtet und unsere Handelsschnittstelle vorbereitet.
2. Eingabeparameter – Benutzerkonfigurationsebene
Als Nächstes deklarieren wir alle Eingabeparameter. Dies sind externe Variablen, mit denen der Benutzer das Verhalten der Strategie ändern kann, ohne den Quellcode bearbeiten zu müssen.

Wir unterteilen die Eingaben in logische Kategorien:

Konfiguration des gleitenden Durchschnitts

Wir deklarieren:

  • InpMAPeriod für die EMA-Länge.
  • InpPrice für die verwendete Preisart.
input int      InpMAPeriod        = 50;
input ENUM_APPLIED_PRICE InpPrice = PRICE_CLOSE;

Dadurch bleibt die Strategie bei Bedarf auch über den EMA 50 hinaus flexibel.

Risiko- und Positionsmanagement

Wir deklarieren:

  • Feste Losgröße (InpLotSize)
  • Optionaler prozentualer Risikomodus (UseRiskPercent)
  • Risikoprozentsatz (RiskPercent)
input double   InpLotSize         = 0.10;
input bool     UseRiskPercent     = false;
input double   RiskPercent        = 1.0;
Dieses Dual-Mode-Risikosystem ermöglicht entweder eine statische Dimensionierung oder ein dynamisches, kapitalbasiertes Risikomanagement.

Stopp- und Target-Parameter

Wir geben die Stop-Loss- und Take-Profit-Abstände in Punkten an:

input int      StopLossPoints     = 300;
input int      TakeProfitPoints   = 600;
Diese Werte werden später mithilfe von _Point in Kurswerte umgerechnet.

Optionale Verhaltensfilter

Anschließend deklarieren wir umschaltbare Logikkomponenten:

input bool     UseTolerance       = false;
input int      TolerancePoints    = 50;

input bool     RequireSecondLeg   = false;
input bool     UsePinBarFilter    = false;
input bool     UseDoubleStructure = false;
Diese Flags ermöglichen eine modulare Erweiterung der Strategie, ohne die zentrale EMA-Interaktionslogik zu verändern.

Damit ist die Konfiguration abgeschlossen.

3. Globale Variablen

Wir deklarieren globale Variablen, die während des gesamten Lebenszyklus des EAs verwendet werden.

int    maHandle;
double maBuffer[];

bool   previousBounceDetected = false;
  • maHandle speichert das von iMA() zurückgegebene Indikator-Handle.
  • maBuffer[] speichert die aus dem Indikatorpuffer kopierten EMA-Werte.
  • previousBounceDetected ist für die kontextbezogene Erweiterung reserviert (wiederholte Verteidigungslogik).
Globals gewährleisten die Verfügbarkeit in allen Funktionen.
4. Initialisierung – OnInit()

Wenn der EA geladen wird, wird zunächst OnInit() ausgeführt.

Hier erstellen wir den EMA-Indikator-Handle:

Wir legen Folgendes fest:
  • Symbol
  • Zeitrahmen
  • Periodenlänge
  • Verschiebung (0)
  • Modus (MODE_EMA)
  • Verwendeter Preis

Wenn das Handle ungültig ist, geben wir INIT_FAILED zurück.

Anschließend legen wir das Array als Reihe fest:

ArraySetAsSeries(maBuffer,true);

Dadurch wird die Indizierung umgekehrt, sodass der Index [0] die aktuelle Kerze darstellt – entsprechend der MQL5-Zeitreihenlogik.

int OnInit()
{
   maHandle = iMA(_Symbol,_Period,InpMAPeriod,0,MODE_EMA,InpPrice);

   if(maHandle == INVALID_HANDLE)
      return(INIT_FAILED);

   ArraySetAsSeries(maBuffer,true);

   return(INIT_SUCCEEDED);
}
Bei der Initialisierung wird unsere Indikatorinfrastruktur vorbereitet.

5. Deinitialisierung – OnDeinit()

Wenn der EA entfernt wird, geben wir das Indikator-Handle frei:

void OnDeinit(const int reason)
{
   if(maHandle != INVALID_HANDLE)
      IndicatorRelease(maHandle);
}
Dadurch werden Speicherlecks verhindert und eine ordnungsgemäße Freigabe der Ressourcen gewährleistet.

6. Hauptausführungsschleife – OnTick()

OnTick() wird bei jedem Markt-Tick ausgeführt.

Wir beschränken die Logik jedoch bewusst ausschließlich auf neue Bars.

if(!IsNewBar())
   return;
Dadurch werden Schwankungen innerhalb einer Kerze und übermäßige Auslösungen verhindert.

Anschließend kopieren wir die EMA-Daten:

if(CopyBuffer(maHandle,0,0,3,maBuffer) <= 0)
   return;

Wir stellen sicher, dass gültige Daten abgerufen werden, bevor wir fortfahren.

Als Nächstes verhindern wir doppelte Positionen:

if(PositionSelect(_Symbol))
   return;

Zum Schluss rufen wir die Kernlogik auf.

CheckForSetup();

Ganzer Block:

void OnTick()
{
   if(!IsNewBar())
      return;

   if(CopyBuffer(maHandle,0,0,3,maBuffer) <= 0)
      return;

   if(PositionSelect(_Symbol))
      return;

   CheckForSetup();
}

7. Kernlogik – CheckForSetup()

Diese Funktion enthält die Verhaltens-Engine.

Zunächst rufen wir die EMA- und OHLC-Werte ab:

double ema = maBuffer[1];
double open1  = iOpen(_Symbol,_Period,1);
double close1 = iClose(_Symbol,_Period,1);
double high1  = iHigh(_Symbol,_Period,1);
double low1   = iLow(_Symbol,_Period,1);

Wir ermitteln die Trendrichtung anhand des Schlusskurses der vorherigen Kerze:

bool bullishTrend = close2 > ema;
bool bearishTrend = close2 < ema;

Anschließend definieren wir die EMA-Interaktion – das Herzstück des Systems:

bool bullishInteraction =
   (low1 < ema && close1 > ema);

bool bearishInteraction =
   (high1 > ema && close1 < ema);

Dadurch wird die starre Näherungslogik durch eine verhaltensbasierte Reaktions- bzw. Zurückweisungslogik ersetzt.

Anschließend werden optionale Filter bedingt angewendet:

  • weicher Toleranzfilter
  • Anforderungen für eine zweite Bestätigung
  • Pin-Bar-Filter
  • Filter für Doppelstrukturen
Jeder optionale Block wird vorzeitig beendet, wenn die Bedingungen nicht erfüllt sind.

Endgültige Entscheidung:

if(bullishTrend && bullishInteraction)
   ExecuteTrade(ORDER_TYPE_BUY);

if(bearishTrend && bearishInteraction)
   ExecuteTrade(ORDER_TYPE_SELL);
Dieser schichtweise Ansatz gewährleistet eine strukturbasierte Ausführung.
8. Erkennung von Pin-Bars

Wir berechnen die Größe von Kerzenkörper und unterem Docht.

double body  = MathAbs(close-open);
double lowerWick = MathMin(open,close) - low;
Anschließend setzen wir Folgendes durch:
  • Docht mindestens 2× so lang wie der Körper
  • Bestätigung des trendgerichteten Schlusskurses
return (lowerWick > body*2 && close > open);
Diese mechanische Definition beseitigt jegliche Subjektivität.

9. Erkennung doppelter Strukturen

Wir vergleichen die Swing-Punkte:

return (MathAbs(low1 - low3) <= 20*_Point);
Dies ist ein vereinfachtes Strukturmodell, das eine spätere Erweiterbarkeit ermöglicht.

10. Handelsausführung

In ExecuteTrade():
  1. Wir rufen den Geld- und Briefkurs ab.
  2. Wir berechnen die Losgröße (fest oder risikobasiert).
  3. Wir berechnen die SL- und TP-Offsets.

Beispiel für einen Kauf:

sl = price - StopLossPoints*_Point;
tp = price + TakeProfitPoints*_Point;
trade.Buy(lot,_Symbol,price,sl,tp,"EMA50 OHLC Buy");

Ein Verkauf spiegelt symmetrisch diese Logik.

Durch diese Trennung werden die Ausführung und die Signallogik voneinander isoliert.

11. Risikobasierte Losberechnung
Wir berechnen:
  • Kontostand
  • Geldwertes Risiko
  • Tick-Wert
  • Tick-Größe
  • Verlust pro Lot
Dann:
double lot = riskMoney/lossPerLot;

Wir passen das Volumen an den Volumenschritt des Brokers an und legen Mindestlot-Beschränkungen fest.

Dadurch wird eine realistische, den Anforderungen des Brokers entsprechende Ausführung gewährleistet.

12. Erkennung neuer Bars

Schließlich sorgt IsNewBar() für die Stabilität des Signals:

static datetime lastBar=0;
datetime current=iTime(_Symbol,_Period,0);

Wenn sich die Zeit ändert, wird eine neue Bar erkannt.

Dadurch wird verhindert, dass pro Kerze mehrere Auslöser auftreten.



Tests

Hier trifft die theoretische Struktur auf das beobachtbare Marktverhalten. In dieser Studie ist unsere primäre Validierungsmethode der visuelle Test im Strategietester des MetaTrader 5. Das Ziel ist nicht die unmittelbare statistische Optimierung, sondern die strukturelle Validierung – es soll sichergestellt werden, dass sich der Expert Advisor bei der Interaktion mit historischen Tick-Daten genau so verhält, wie vorgesehen.

Wir verwenden den Modellierungsmodus „Jeder Tick basiert auf echten Ticks“, um bei der Wiedergabe die höchstmögliche Genauigkeit zu erzielen. Da die Strategie auf der Interaktion der Kerzen mit dem EMA beruht – insbesondere auf dem Prinzip „Pierce-and-Close“ –, ist eine präzise Modellierung innerhalb der einzelnen Kerzen unerlässlich. Eine geringere Modellierungsqualität könnte das Ablehnungsverhalten verzerren und zu irreführenden Interpretationen der Signalentwicklung führen.

Bei der visuellen Prüfung konzentrieren wir uns ausschließlich auf die Korrektheit des Verhaltens. Jeder Handel wird im Verlauf der Simulation direkt auf dem Chart analysiert. Wir bestätigen, dass Einstiege erst nach einer gültigen EMA-Interaktion erfolgen: Die Kerze muss den EMA durchbrechen und wieder in Richtung des vorherrschenden Trends schließen. Wir stellen sicher, dass die Reaktionslogik pro gültigem Setup genau einmal ausgelöst wird und innerhalb derselben Bar keine Signale doppelt erzeugt werden. Wenn die Option für die zweite Bestätigung aktiviert ist, stellen wir sicher, dass das System ordnungsgemäß auf die zusätzliche Bestätigung wartet, bevor eine Position ausgeführt wird.

Abb. 3. Tests mit USDJPY

In dieser Phase können wir zudem kontextbezogene Nuancen erkennen, die sich aus Statistiken allein nicht ableiten lassen. Wir prüfen, ob die EMA-Interaktion tatsächlich eine Ablehnung durch den Markt widerspiegelt, ob sich die optionalen Filter „Pin Bar“ und „Doppelstruktur“ logisch verhalten und ob das System es vermeidet, auf unbedeutendes Kursrauschen zu reagieren. Die visuelle Überprüfung vertieft unser Verständnis dafür, wie sich algorithmische Abstraktion in tatsächlichem Marktverhalten niederschlägt.

Zwar konzentriert sich dieser Artikel auf die visuelle Validierung, doch als nächste Schritte werden weitere Analysen wie mehrjährige statistische Backtests, Robustheitstests über verschiedene Wertpapiere hinweg und die Parameteroptimierung empfohlen. Diese Verfahren liefern quantitative Bestätigungen, sollten jedoch erst dann durchgeführt werden, wenn durch eine Sichtprüfung bestätigt wurde, dass die strukturelle Logik korrekt funktioniert.

In diesem Zusammenhang ist der visuelle Test kein oberflächlicher Schritt – er ist eine entscheidende Verifizierungsphase, die sicherstellt, dass unser Verhaltensmodell der EMA-Interaktion korrekt ausgeführt wird, bevor eine tiefergehende statistische Auswertung beginnt.


Schlussfolgerung

Die EMA-50-Retest-Strategie ist ein verhaltensorientiertes Reaktionsmodell und kein starres System, das auf Kerzenmustern basiert. Durch sorgfältige manuelle Rückwärtsanalysen und Beobachtungen ist es uns gelungen, ein System zu entwickeln, das Abpraller an gleitenden Durchschnitten effektiv nutzt und dabei diskretionäre Erkenntnisse in eine strukturierte algorithmische Ausführung umsetzt. Dies zeigt, dass verhaltensbasierte Automatisierung für den Intraday-Handel praktikabel und umsetzbar ist.

Die Reaktionsstrukturen am EMA 50 sind sehr unterschiedlich. Manche zeigen sich als deutliche Abpraller, andere als allmähliche Kompressionen, und wieder andere weisen vor der Fortsetzung des Trends zwei Phasen der erneuten Testung auf. Die Automatisierung muss daher die Interaktion mit der EMA erfassen, anstatt sich ausschließlich auf feste Kerzenmuster zu konzentrieren. Durch die Kombination von Trendbestimmung, Erkennung von EMA-Interaktionen, Logik zur Reaktionsbestätigung und Konzepten zur Wahrscheinlichkeit wiederholter Verteidigungsbewegungen identifiziert das System EMA-50-Rückpralle mit hoher Wahrscheinlichkeit und reagiert konsequent darauf.

Für Leser, die an einer strukturierten Zusammenfassung interessiert sind, sind die wichtigsten Erkenntnisse dieser Diskussion in der folgenden Tabelle zusammengefasst; die beigefügten Quelldateien bieten sowohl Referenzen zur Analyse als auch zur Implementierung. Diese Ressourcen schlagen eine Brücke zwischen konzeptionellem Studium, Programmierstruktur und praktischer Anwendung.

Wir freuen uns über Ihre Anregungen, Anmerkungen oder Fragen. Bitte teilen Sie Ihre Gedanken und Erfahrungen in den Kommentaren mit, um die Diskussion zu bereichern und zur gemeinsamen Weiterentwicklung dieses Handelsansatzes beizutragen.

Wichtige Lektion

Wichtige LektionBeschreibung
1. Recherche vor dem Programmieren:Der Automatisierung sollte eine manuelle Rückverfolgung anhand von Diagrammen vorausgehen. Das Programmieren ohne Berücksichtigung des tatsächlichen Marktverhaltens führt zu starren und unrealistischen Systemen.
2. Programmieren des Verhaltens, nicht der Formen:Märkte reagieren anhand von Verhaltensmustern und nicht anhand festgelegter Kerzenmuster. Die Reaktionslogik (Durchbruch + Schließen) verstehen, anstatt sich visuelle Formationen einzuprägen.
3. Trend und Einstiegspunkt voneinander trennen:Die Trendbestimmung muss von der Einstiegslogik getrennt werden. Zuerst den Richtungsbias bestimmen, dann die Interaktionsbedingungen bewerten.
4. Die richtige Verwendung der Indikator-Handles:Nach dem Erstellen der Indikatoren mit iMA() können die Werte mit CopyBuffer() abgerufen werden. Eine ordnungsgemäße Handhabung der Handles gewährleistet Stabilität und Leistungsfähigkeit.
5. Berücksichtigung der Kerzen-Reihenfolge:Korrekte Verwendung der Indizierung sicherstellen. Index 0 ist die sich bildende Kerze; für bestätigte Signale sollte Index 1 oder höher verwendet werden, um eine vorzeitige Ausführung zu vermeiden.
6. Steuerung der Ausführung mit der „New-Bar“-Logik:Verwendung der Funktion „IsNewBar()“, um ein übermäßiges Auslösen innerhalb einer Kerze zu verhindern und die Signalstabilität zu gewährleisten.
7. Modulare Architektur:Teilen Sie die Logik in Funktionen wie „CheckTrend()“, „CheckInteraction()“ und „ExecuteTrade()“ auf. Modulare Systeme sind skalierbar und lassen sich leichter debuggen.
8. Optionale Filter sollten ein- und ausgeschaltet werden können:Verwende boolesche Eingaben für Strukturfilter wie Pin Bars oder Doppelstrukturen. Dies ermöglicht flexibles Experimentieren, ohne die Kernlogik neu schreiben zu müssen.
9. Vermeiden Sie übermäßige Genauigkeit:Die abstandsabhängige Toleranz sollte optional sein. Eine Verhaltensbestätigung ist zuverlässiger als ein exakter Preisabgleich.
10. Risiken müssen systematisch gestaltet werden:Implementieren Sie sowohl Modelle mit festem Lot als auch prozentuale Risikomodelle. Professionelle Systeme berechnen die Positionsgröße auf der Grundlage des Stop-Loss-Risikos.
11. Broker-Einschränkungen normalisieren:Beachten Sie bei der Berechnung der Losgröße stets die Werte SYMBOL_VOLUME_STEP und SYMBOL_VOLUME_MIN, um die Einhaltung der Broker-Vorgaben sicherzustellen.
12. Schutz vor doppelten Positionen:Verwenden Sie „PositionSelect()“, bevor Sie Trades ausführen, um zu vermeiden, dass unbeabsichtigt mehrere Positionen übereinandergelegt werden.
13. Sauberes Ressourcenmanagement:Geben Sie die Indikator-Handles in OnDeinit() frei, um Speicherlecks zu vermeiden und die Programmintegrität zu gewährleisten.
14. Vor der Optimierung die Struktur überprüfen:Vor dem Versuch einer statistischen Optimierung sollte durch visuelle Tests die Korrektheit des Verhaltens bestätigt werden.
15. Systeme entwickeln statt Signale:Ein professioneller Expert Advisor ist nicht nur eine Einstiegsbedingung. Dazu gehören Struktur, Kontext, Risikokontrolle, Ausführungsmanagement und Validierungsmethodik.

Anlagen

DateinameAktuelle VersionZweck und Beschreibung
EMA50_Bounce_EA.mq51.00Vollständige verhaltensgesteuerte Implementierung der EMA-50-Abprallstrategie. Nutzt die Interaktionslogik von Kerzen-OHLC-Daten in Verbindung mit optionalen strukturellen Filtern wie Pin-Bars und Bestätigungen durch doppelte Hochs/Tiefs.
Walkback_Study_Screenshots.zip1.00Sammlung von Screenshots aus manuellen Rückverfolgungsanalysen, die die Schwankungen beim EMA-Abprall, die Reaktionsstärke und die Strukturen von Retests in zwei Schritten veranschaulichen.
Zurück zum Inhalt

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

Beigefügte Dateien |
EMA50BounceEA.mq5 (7.99 KB)
MQL5-Handelswerkzeuge (Teil 21): Hinzufügen eines Cyberpunk-Theme zu Regressionsdiagrammen MQL5-Handelswerkzeuge (Teil 21): Hinzufügen eines Cyberpunk-Theme zu Regressionsdiagrammen
In diesem Artikel erweitern wir das Tool zur Darstellung von Regressionsdiagrammen in MQL5 um einen Cyberpunk-Modus mit Neon-Leuchteffekten, Animationen und holografischen Effekten für eine eindrucksvolle Visualisierung. Wir integrieren die Umschaltung zwischen Themenmodi, dynamische Hintergründe mit Sternen, leuchtende Rahmen sowie Neonpunkte und -linien, wobei die Kompatibilität mit dem Standardmodus gewährleistet bleibt. Dieses System mit zwei Themenmodi wertet die Analyse von Symbolpaaren durch eine futuristische Ästhetik auf und unterstützt Echtzeitaktualisierungen sowie Interaktionen für aufschlussreiche Handelserkenntnisse.
Automatisierung des Indikators Market Memory Zones: Bereiche, zu denen der Kurs voraussichtlich zurückkehrt Automatisierung des Indikators Market Memory Zones: Bereiche, zu denen der Kurs voraussichtlich zurückkehrt
Dieser Artikel verwandelt Market Memory Zones von einem reinen Chart-Konzept in einen vollwertigen MQL5-Expert Advisor. Das System automatisiert die Erkennung von Displacement-Zonen, Strukturübergängen (CHoCH) und Liquidity Sweep-Zonen mithilfe von ATR- und Kerzenstruktur-Filtern, wendet eine Bestätigung auf einem niedrigeren Zeitrahmen an und sorgt für eine risikobasierte Positionsgrößenbestimmung mit dynamischen Stop-Loss- und strukturbasierten Take-Profit-Zielen. Sie erhalten die Code-Architektur für die Erkennung, die Einstiegspunkte, das Handelsmanagement und die Visualisierung sowie eine kurze Auswertung über den Backtest.
Eine alternative Log-datei mit der Verwendung der HTML und CSS Eine alternative Log-datei mit der Verwendung der HTML und CSS
In diesem Artikel werden wir eine sehr einfache, aber leistungsfähige Bibliothek zur Erstellung der HTML-Dateien schreiben, dabei lernen wir auch, wie man eine ihre Darstellung einstellen kann (nach seinem Geschmack) und sehen wir, wie man es leicht in seinem Expert Advisor oder Skript hinzufügen oder verwenden kann.
MQL5 Trading Tools (Teil 20): Grafiken auf Zeichenflächen mit statistischer Korrelations- und linearer Regressionsanalyse MQL5 Trading Tools (Teil 20): Grafiken auf Zeichenflächen mit statistischer Korrelations- und linearer Regressionsanalyse
In diesem Artikel erstellen wir in MQL5 ein canvasbasiertes grafisches Tool für statistische Korrelations- und lineare Regressionsanalysen zwischen zwei Symbolen, das sich per Drag & Drop verschieben und in der Größe anpassen lässt. Wir nutzen ALGLIB für Regressionsberechnungen, dynamische Achsenbeschriftungen, Datenpunkte und ein Statistikfeld, in dem Steigung, Achsenabschnitt, Korrelation und R-Quadrat angezeigt werden. Diese interaktive Visualisierung liefert wertvolle Erkenntnisse für Pair-Trading-Strategien und bietet anpassbare Designs, Rahmen sowie Echtzeit-Aktualisierungen bei neuen Bars.