English Русский
preview
Vom Einsteiger zum Experten: Entwicklung einer Liquiditätsstrategie

Vom Einsteiger zum Experten: Entwicklung einer Liquiditätsstrategie

MetaTrader 5Beispiele |
22 1
Clemence Benjamin
Clemence Benjamin

Inhalt

  1. Einführung
  2. Umsetzung
  3. Tests
  4. Schlussfolgerung
  5. Wichtige Erkenntnisse
  6. Anlagen

 

Einführung

Heute konzentrieren wir uns auf die Modellierung eines Expert Advisors (EA) auf der Grundlage von Liquiditätszonen. In früheren Diskussionen haben wir uns auf die Identifizierung und Validierung dieser Zonen konzentriert, und die Ergebnisse waren sowohl ermutigend als auch vielversprechend. Eine entscheidende Herausforderung bleibt jedoch bestehen: die Automatisierung des Handelsprozesses. Dies kann nur erreicht werden, wenn die Strategie mit MQL5 in eine ausführbare Logik übersetzt wird, die robuste Regeln für die Handelsausführung und das Risikomanagement enthält.

Um dies effektiv zu tun, müssen wir zunächst ein klares konzeptionelles Verständnis der Strategie entwickeln. Sobald die Logik gut definiert ist, werden wir sie in Code umsetzen.

Die Strategie verstehen

Durch unsere Analyse haben wir festgestellt, dass eine Liquiditätszone oft durch eine einzige Kerze dargestellt werden kann. Eine solche Kerze entsteht in der Regel nach einer Kurspause oder Konsolidierung und fasst die Liquidität zusammen, die sich im Laufe der Zeit oder in niedrigeren Zeitrahmen gebildet hat. Genau dieses Verhalten bildet das Strukturmodell ab, mit dem wir in dieser Studie arbeiten.

Aus Gründen der Klarheit und Zugänglichkeit haben wir bewusst einen vereinfachten Ansatz gewählt. Anstatt uns auf komplexe Multi-Bar-Formationen zu verlassen, definieren wir unsere Bedingungen anhand minimaler Preisinformationen. Auf diese Weise können wir uns auf die Kernmechanik der Strategie konzentrieren, während die anfängliche Implementierung in Code einfach und leichter zu validieren ist.

Das Ziel dieser Strategie besteht darin, auf eine Rückkehr des Preises in die identifizierte Liquiditätsstruktur zu warten (siehe Abb. 1. Unten) und von diesem Bereich aus Positionen aufzubauen, wobei letztlich das letzte Swing-Hoch oder Swing-Tief anvisiert wird, je nachdem, ob das Setup bullisch oder bärisch ist. Das Konzept der Retests ist zwar ein zentrales Element dieses Modells, aber es ist auch wichtig zu erkennen, dass es zu einer weit verbreiteten und häufig untersuchten Idee geworden ist. Infolgedessen sind diese Niveaus zunehmend anfällig für Manipulationen. Marktteilnehmer, die über ein deutlich größeres Kapital verfügen, können die Preise über die offensichtlichen Grenzen hinaus treiben, indem sie Stop-Loss-Orders auslösen und schwächere Positionen aus dem Markt drängen, bevor sich die beabsichtigte Bewegung entfaltet. 

Abb. 1. Swing B-C Rückkehr zum Test der Liquiditätszone

Aus diesem Grund kann das Risikomanagement nicht nachrangig behandelt werden. Es muss ein integraler Bestandteil sowohl des Strategieentwurfs als auch der algorithmischen Ausführung sein. Die Art und Weise, wie der Expert Advisor das Risiko definiert, Stop-Losses platziert und die Risikobelastung steuert, ist ebenso entscheidend wie die Art und Weise, wie er valide Handelssignale identifiziert.

Man muss sich auch darüber im Klaren sein, dass nicht jedes Setup erfolgreich sein wird. Kein einzelner Handel garantiert ein profitables Ergebnis. Stattdessen wird die Leistung im Laufe der Zeit durch die Anhäufung von Gewinnen und Verlusten ermittelt. Es ist dieses kumulative Ergebnis – gemessen über eine ausreichend große Stichprobe von Trades –, das letztlich bestimmt, ob eine Strategie profitabel oder unprofitabel ist.

Auf dieser Grundlage wird sich der nächste Abschnitt auf die Umsetzung der Strategie in MQL5-Code konzentrieren. Nach der Implementierung werden wir sein Verhalten unter realistischen Marktbedingungen testen und bewerten.



Umsetzung

Bevor wir die Handelslogik implementieren, erstellen wir ein neues Expert Advisor-Projekt in MetaEditor mithilfe des MQL5-Assistenten. Dieser Assistent generiert automatisch eine Standardvorlage mit Ereignishandlern und Platzhaltercode. Für die Zwecke dieses Artikels entfernen wir die gesamte automatisch generierte Logik und belassen nur den Abschnitt mit den Metadaten, wie unten dargestellt.

Code:

//+------------------------------------------------------------------+
//|                            Single_Candle_Liquidity_Trader.mq5    |
//|                                Copyright 2025, Clemence Benjamin |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2025, Clemence Benjamin"
#property link      "https://www.mql5.com"
#property version   "1.00"

Dadurch wird der Schwerpunkt auf das Verständnis und die schrittweise Entwicklung der Strategie gelegt, während sich die Umsetzung in den folgenden Abschnitten entfaltet. Es ist ratsam, den Code von Hand einzugeben, um sich mit der Struktur vertraut zu machen; einfachheitshalber ist die vollständige Quelldatei jedoch in den Anhängen am Ende des Artikels enthalten, für diejenigen, die nicht alles von Hand eingeben möchten.

Sobald die EA-Metadaten und -Eingaben definiert sind, schließen wir die Handelsbibliothek ein, die für die gesamte Auftragsausführung verantwortlich ist. Anstatt mit Low-Level-Handelsfunktionen zu arbeiten, verlassen wir uns auf die Klasse CTrade, die eine sicherere und besser strukturierte Schnittstelle bietet.

Code:

#include <Trade/Trade.mqh>

CTrade trade;

Indem wir ein einziges globales CTrade-Objekt deklarieren, zentralisieren wir alle Handelsoperationen – Pending Orders, Stop Losses, Take Profits und die Zuweisung der Magic Number – und machen so den Code sauberer und einfacher zu pflegen.

Deklaration von Eingaben und Strategiekontrollen

Bevor wir eine Ausführungslogik schreiben, deklarieren wir zunächst die Eingabeparameter. Dies ist ein bewusster Schritt. Die Eingabeparameter definieren das externe Verhalten des Expert Advisors und ermöglichen es Händlern, die Strategie anzupassen, ohne den Quellcode zu berühren. Indem wir diese Parameter verfügbar machen, trennen wir die Strategielogik von der Benutzerkontrolle, was ein Schlüsselprinzip im professionellen EA-Design ist.

Code: 

input double LotSize             = 0.10;
input int    MaxSpreadPoints     = 30;
input bool   AllowBuy            = true;
input bool   AllowSell           = true;
input double RatioMultiplier     = 3.0;
input double SL_Offset_Points    = 20;
input int    PendingExpiryHours  = 24;
input ulong  MagicNumber         = 777333;

Hier deklarieren wir jeden Parameter mit einem klaren operativen Zweck:

  1. Wir deklarieren LotSize , um das feste Handelsvolumen pro Pending Order zu kontrollieren. Dadurch bleibt die Risikobewertung vorhersehbar und eine dynamische Losberechnung wird in dieser Phase vermieden.
  2. Wir führen MaxSpreadPoints ein, um die Platzierung von Aufträgen unter ungünstigen Liquiditätsbedingungen zu verhindern, z. B. bei Nachrichtenspitzen oder während eines Markt-Rollovers.
  3. Wir verwenden AllowBuy und AllowSell als direktionale Filter, die dem Händler ermöglichen, eine Seite des Marktes zu deaktivieren, ohne die Logik zu ändern.
  4. Ebenso definieren wir RatioMultiplier als die zentrale strukturelle Kontrolle der Strategie. Diese Eingabe bestimmt, um wie viel größer die Impulskerze im Verhältnis zur Basiskerze sein muss, sodass wir die Empfindlichkeit der Liquiditätskompressionserkennung einstellen können.
  5. Wir fügen SL_Offset_Points hinzu, um den Stop-Loss absichtlich über die Liquiditätszone hinauszuschieben und so die Wahrscheinlichkeit zu verringern, dass er durch kurzfristige Manipulationen oder falsche Ausbrüche entfernt wird.
  6. Wir nehmen PendingExpiryHours als zeitliche Risikokontrolle auf. Wenn der Kurs innerhalb dieses Zeitfensters nicht in die Liquiditätszone zurückkehrt, wird das Setup als nicht mehr gültig betrachtet.
  7. Schließlich deklarieren wir MagicNumber, um alle von diesem EA eröffneten Aufträge und Positionen eindeutig zu kennzeichnen und eine saubere Trennung von anderen Strategien, die auf demselben Konto laufen, zu gewährleisten.

Indem wir die Eingaben auf diese Weise strukturieren, machen wir den EA flexibel, testbar und benutzerfreundlich, während die interne Logik intakt bleibt.

Globale Variablen deklarieren

Als Nächstes deklarieren wir die globalen Variablen, die über Ticks hinweg bestehen bleiben müssen. Bei dieser Strategie halten wir den globalen Zustand absichtlich minimal.

Code:

datetime lastBarTime = 0;

Diese Variable wird ausschließlich zur Erkennung der Eröffnung einer neuen Kerze verwendet. Die Kontrolle der Ausführungshäufigkeit ist bei automatisierten Systemen von entscheidender Bedeutung, um doppelte Orderausführungen und inkonsistente Backtesting-Ergebnisse zu vermeiden.

Erkennen des Öffnens einer neuen Kerze

Bevor eine Handelslogik ausgewertet wird, setzen wir die Regel „Eine Kerze – eine Ausführung“ durch. Dadurch wird sichergestellt, dass der EA nur einmal pro abgeschlossener Kerze reagiert, unabhängig von der Häufigkeit der Ticks.

Code:

bool IsNewBar()
{
   datetime currentBar = iTime(_Symbol, _Period, 0);
   if(currentBar != lastBarTime)
   {
      lastBarTime = currentBar;
      return true;
   }
   return false;
}

Hier wird der Zeitstempel der aktuellen Kerze mit dem der zuletzt verarbeiteten Kerze verglichen. Wenn sich eine neue Kerze bildet, aktualisieren wir die gespeicherte Zeit und lassen die Ausführung weiterlaufen.

Dieser Mechanismus garantiert:

  • Logik ohne Repainting
  • Stabiles Verhalten des Strategy Testers
  • Vorhersehbarer Zeitpunkt der Auftragserteilung

Messen der Kerzenspanne

Das Kernstück dieser Strategie ist der spannenbezogene Vergleich, nicht Kerzenkörper oder Indikatoren. Um dies zu unterstützen, führen wir eine Hilfsfunktion ein, die die gesamte Spanne zwischen Hoch und Tief einer Kerze zurückgibt.

Code:

double CandleRange(int index)
{
   return MathAbs(iHigh(_Symbol,_Period,index) -
                   iLow(_Symbol,_Period,index));
}

Die Kapselung dieser Berechnung verbessert die Lesbarkeit und ermöglicht es uns, die Logik im gesamten EA konsistent wiederzuverwenden.

Mehrstufiger Liquiditätseinstieg für Buy Setups

Anstatt zu einem einzigen Preis einzusteigen, verteilen wir die Limit-Order über den Bereich der Basiskerze. Damit wird modelliert, wie Liquidität in der Regel vom Markt absorbiert wird.

Code:

void PlaceBuyLimits(double highB, double lowB, double sl, double tp, datetime expiry)
{
   double mid = (highB + lowB) / 2.0;

   trade.BuyLimit(LotSize, highB, _Symbol, sl, tp, ORDER_TIME_SPECIFIED, expiry);
   trade.BuyLimit(LotSize, mid,   _Symbol, sl, tp, ORDER_TIME_SPECIFIED, expiry);
   trade.BuyLimit(LotSize, lowB,  _Symbol, sl, tp, ORDER_TIME_SPECIFIED, expiry);
}

Durch die Platzierung von Orders zum Höchst-, Mittel- und Tiefststand der Liquiditätskerze können wir:

  • Verbesserung des durchschnittlichen Einstiegspreises
  • Verringerung der Abhängigkeit von perfektem Timing
  • Erfassen von Teilfüllungen auch bei flachen Rücksetzern

Mehrstufige Liquiditätseinstiege für Short-Setups

Wir wenden dieselbe Logik symmetrisch für rückläufige Bedingungen an.

Code:

void PlaceSellLimits(double highB, double lowB, double sl, double tp, datetime expiry)
{
   double mid = (highB + lowB) / 2.0;

   trade.SellLimit(LotSize, highB, _Symbol, sl, tp, ORDER_TIME_SPECIFIED, expiry);
   trade.SellLimit(LotSize, mid,   _Symbol, sl, tp, ORDER_TIME_SPECIFIED, expiry);
   trade.SellLimit(LotSize, lowB,  _Symbol, sl, tp, ORDER_TIME_SPECIFIED, expiry);
}

Diese Symmetrie gewährleistet ein einheitliches Verhalten in beiden Marktrichtungen und vereinfacht die Validierung und Optimierung.

Die Hauptausführungsschleife: OnTick()

Die gesamte Strategielogik wird innerhalb der Funktion OnTick() koordiniert. Hier werden die Bedingungen bewertet, das Risiko geprüft und die Aufträge erteilt.

Code: 

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

Wir erzwingen unmittelbar die Ausführung nur bei einer neuen Bar. Wenn sich keine neue Kerze gebildet hat, beendet der EA die Verarbeitung ohne weitere Schritte.

Spread-Filter und Trade-Identifikation

Bevor wir die Marktstruktur bewerten, überprüfen wir die Handelsbedingungen.

Code:

if(SymbolInfoInteger(_Symbol, SYMBOL_SPREAD) > MaxSpreadPoints)
   return;

trade.SetExpertMagicNumber(MagicNumber);

Dies verhindert den Einstieg bei ungünstigen Spreads und stellt sicher, dass alle Abschlüsse eindeutig identifizierbar sind.

Definition der Rollen der Kerzen

Wir legen nun explizit fest, welche Kerzen an dem Modell teilnehmen.

Code:

int A = 1;   // Impulse candle (closed)
int B = 2;   // Base candle

  • Kerze B steht für Liquiditätsverdichtung.
  • Kerze A steht für die Impulsausbreitung.

Die sich gerade bildende Kerze (Index 0) wird absichtlich ignoriert.

Anwenden des Kerzenverhältnisfilters

Dies ist das strukturelle Rückgrat der Strategie.

Code:

double rangeA = CandleRange(A);
double rangeB = CandleRange(B);

if(rangeB > rangeA / RatioMultiplier)
   return;

Hier gilt, dass die Basiskerze deutlich kleiner sein muss als die Impulskerze. Die Empfindlichkeit dieser Bedingung wird vollständig von RatioMultiplier gesteuert.

Richtungsbestätigung

Wir bestätigen nun, dass beide Kerzen in ihrer Richtung übereinstimmen.

Code:

double openA  = iOpen(_Symbol,_Period,A);
double closeA = iClose(_Symbol,_Period,A);
double openB  = iOpen(_Symbol,_Period,B);
double closeB = iClose(_Symbol,_Period,B);

Dieser Schritt stellt sicher, dass wir auf Fortsetzungssignale und nicht auf Erschöpfung handeln.

Stop-Loss-Verschiebung und zeitlichem Verfall von Pending Orders

Um Manipulationen und falschen Ausbrüchen Rechnung zu tragen, führen wir einen konfigurierbaren Stopp-Offset und eine zeitbasierte Ungültigkeitserklärung ein.

Code:

double point  = SymbolInfoDouble(_Symbol, SYMBOL_POINT);
double offset = SL_Offset_Points * point;

datetime expiry = TimeCurrent() + PendingExpiryHours * 3600;

Diese beiden Parameter wirken zusammen, um das Risiko sowohl in der Preis- als auch in der Zeitdimension zu kontrollieren.

Ausführung bullischer Setups

Code:

if(AllowBuy && closeA > openA && closeB > openB)
{
   double sl = lowB - offset;
   double tp = highA;

   PlaceBuyLimits(highB, lowB, sl, tp, expiry);
}

Wir setzen Kauflimits innerhalb der Liquiditätszone, schützen darüber hinaus und peilen das Impulshoch an.

Ausführung bärischer Setups

Code:

if(AllowBuy && closeA > openA && closeB > openB)
{
   double sl = lowB - offset;
   double tp = highA;

   PlaceBuyLimits(highB, lowB, sl, tp, expiry);
}

Die Logik spiegelt den bullischen Fall wider und wahrt die strukturelle Konsistenz.

In diesem Stadium haben wir eine Ein-Kerzen-Liquiditätsstrategie vollständig modelliert, von der Strukturerkennung bis zur Ausführung und Risikokontrolle. Das System verzichtet bewusst auf Indikatoren und konzentriert sich ausschließlich auf Kursverhalten, Liquidität und disziplinierte Ausführung.

Im nächsten Abschnitt können wir mit der Testmethodik, der Empfindlichkeit der Parameter und der Interpretation der Ergebnisse fortfahren.



Tests

Hier stelle ich die ersten Testergebnisse vor, die ich durch die Ausführung des Expert Advisors im MetaTrader 5 Strategy Tester erhalten habe. Für Leser, die neu auf der Plattform sind, besteht der erste Schritt darin, den mit diesem Projekt verbundenen EA im Navigator-Fenster unter dem Verzeichnis Experts zu suchen. Wenn Sie ihn gefunden haben, klicken Sie mit der rechten Maustaste auf den EA und wählen Sie im Kontextmenü die Option Testen. Mit dieser Aktion wird der Strategy Tester gestartet, in dem verschiedene Arten von Tests durchgeführt werden können.

Bevor wir irgendeine Form der Optimierung in Erwägung ziehen, ist es unser primäres Ziel, zu überprüfen, ob der EA mechanisch und konsistent gemäß den beabsichtigten Strategieregeln ausgeführt wird. In diesem Stadium geht es nicht um die Rentabilität, sondern darum, dass die Logik korrekt vom Konzept in den Code übertragen wird und die Aufträge genau wie geplant platziert, verwaltet und abgewickelt werden. Erst nach Abschluss dieses Validierungsschritts gehen wir zur Optimierung und Parameterverfeinerung über.

Es ist erwähnenswert, dass einige Strategien in diesem frühen Stadium scheitern. In bestimmten Fällen kann sich eine Strategie auch nach einer genetischen Optimierung als strukturell unsolide erweisen und daher für die weitere Entwicklung ungeeignet sein. Das frühzeitige Erkennen solcher Ergebnisse spart Zeit und verhindert eine unnötige Überanpassung.

Der nachstehende Screencast zeigt die Strategie in der Praxis und bestätigt, dass das konzeptionelle Modell erfolgreich umgesetzt wurde. Obwohl noch weitere Arbeiten erforderlich sind, bevor das System als profitables Handelsmodell eingestuft werden kann, zeigen die unten in grafischer Form dargestellten Optimierungsergebnisse bereits vielversprechende Leistungsbereiche auf. Bei weiterer Filterung und Verfeinerung mit dem Ziel, negative Ergebnisse zu eliminieren, liefern diese Ergebnisse ermutigende Signale für die weitere Entwicklung.

Abb. 2. Tests



Schlussfolgerung

In diesem Artikel haben wir gezeigt, wie ein Ein-Kerzen-Liquiditätsmuster, bestehend aus einer Basis- und einer Impulskerze, von einer konzeptionellen Handelsidee in ein vollautomatisches Handelsmodell mit MQL5 umgewandelt werden kann. Der resultierende Expert Advisor führt die Strategieregeln wie vorgesehen aus: Pending Orders werden entsprechend der definierten Struktur platziert, einige Trades werden ausgelöst und mit Gewinn geschlossen, andere führen zu Verlusten, und einige Orders bleiben unerfüllt.

Visuelle Tests über einen längeren historischen Zeitraum (von 2005 bis heute) zeigen, dass nicht alle identifizierten Liquiditätszonen werden vom Markt erneut angelaufen werden. In einigen Fällen kann der Retest erst mit großer Verzögerung oder gar nicht stattfinden. Um dieses Verhalten zu steuern, wurde ein Verfallszeitmechanismus implementiert, der Pending Orders nach einer vordefinierten Dauer automatisch löscht und verhindert, dass veraltete Handelsideen unbegrenzt aktiv bleiben.

Aus pädagogischer Sicht veranschaulicht diese Arbeit den Prozess der Umwandlung abstrakter Handelskonzepte in präzise, regelbasierte Ausführungslogik. Der vorgestellte Expert Advisor ist nur für Lern- und Forschungszwecke gedacht und sollte auf einem Demokonto getestet werden. Mehrere Bereiche sind noch ausbaufähig, darunter sitzungsbasierte Handelsfilter, zusätzliche Filter für Marktbedingungen und die Integration mit ergänzenden Analysetools.

Insgesamt bestätigt diese Studie, dass Handelsstrategien automatisiert werden können, wenn ihre Bedingungen klar definiert und programmatisch ausgedrückt sind. Wir hoffen, dass dieser Artikel praktische Einblicke sowohl in die Strategieentwicklung als auch in die Implementierung von Expert Advisors bietet.

Wir freuen uns über Ihr Feedback und Ihre Beiträge im unten stehenden Kommentarbereich.

In den folgenden Abschnitten werden die wichtigsten Erkenntnisse und die dazugehörigen Anhänge vorgestellt.


Wichtige Erkenntnisse

Wichtige ErkenntnisseBeschreibung:
Ein-Kerzen-Liquidität:Liquidität erfordert nicht immer komplexe Multi-Bar-Strukturen; eine einzige Kerze kann genügend Konsolidierungs- und ruhende Aufträge enthalten, um eine gültige Liquiditätszone zu definieren.
Gesamte HandelsspanneDie Messung der gesamten Spanne zwischen Hoch und Tief liefert eine objektivere Darstellung der Volatilitätskompression als die Kerzenkörpergröße allein.
Impuls-Basis-Verhältnis:Ein konfigurierbares Verhältnis zwischen Impuls- und Basiskerzen verwandelt ein diskretionäres, visuelles Konzept in eine präzise und testbare Handelsbedingung.
Logik der geschlossenen Kerze:Da die Bedingungen nur bei geschlossenen Kerzen ausgewertet werden, wird ein Repainting vermieden und die Konsistenz zwischen Backtesting und Live-Ausführung gewährleistet.
Einträge mit mehreren Limits: Die Verteilung von Pending Orders über den Liquiditätsbereich verbessert die Ausführungswahrscheinlichkeit und die durchschnittliche Einstiegsqualität im Vergleich zur Ausführung zu einem einzigen Preis.
Direktionale Ausrichtung:Die Anforderung, dass sowohl die Basiskerze als auch die Impulskerze die gleiche Tendenz aufweisen müssen, hilft dabei, Rauschen zu filtern und Fortsetzungs-Setups zu stärken.
Strukturelle Ziele:Die Verwendung von Impulskerzen-Extremen als Gewinnziele verankert Ausstiege in der realen Marktstruktur anstelle von willkürlichen Gewinnannahmen.
Stop-Loss-Pufferung:Ein anpassbarer Stop-Loss-Offset berücksichtigt Liquiditätsschwankungen und reduziert durch kurzfristige Manipulationen verursachte vorzeitige Ausstiege.
Zeitliche Begrenzung offener Orders:Pending Orders verlieren mit der Zeit an Relevanz; die Anwendung der Verfallszeit stellt sicher, dass veraltete Setups automatisch vom Markt genommen werden.
Aussagekraft großer Stichprobengröße:Die Rentabilität einer Strategie ergibt sich nur dann, wenn die Ergebnisse über viele Geschäfte hinweg aggregiert werden, nicht aus einzelnen Ergebnissen.
Regelbasierte Automatisierung:Klar definierte Regeln ermöglichen es, diskretionäre Ideen in wiederholbare, emotionsfreie Ausführungsmodelle zu verwandeln.
Disziplin bei der Ausführung:Die automatische Ausführung sorgt für Konsistenz und verhindert willkürliche Eingriffe, die häufig die Leistung beeinträchtigen.
Selektive Filterung:Nicht jede erkannte Struktur sollte gehandelt werden; Filter wie Spread-Limits und Session-Regeln verbessern die Robustheit.
Validierung der Strategie:Visuelle Tests und Optimierungen sind unerlässlich, um zu bestätigen, dass sich die Strategie mechanisch wie vorgesehen verhält.
Iterative Entwicklung:Handelsstrategien entwickeln sich durch kontinuierliches Testen, Feedback und Verfeinerung und nicht durch einmalige Implementierung.

Anlagen

Name der QuelldateiVersion Beschreibung:
Single_Candle_Liquidity_Trader.mq5  1.0Implementiert den Single Candle Liquidity Trader Expert Advisor. Die Datei enthält die komplette Strategielogik zur Identifizierung der Liquiditätskompression anhand einer Basiskerze, zur Validierung der Impulsfortsetzung über ein konfigurierbares Bereichsverhältnis und zur Ausführung von mehrstufigen Pending Limit-Orders mit integriertem Risikomanagement, Stop-Loss-Offset-Schutz und Orderverfall.
Zurück zum Inhalt

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

Letzte Kommentare | Zur Diskussion im Händlerforum (1)
Alexander Balandin
Alexander Balandin | 14 März 2026 in 14:42

Здравствуйте, Бенджамин . Оптимизировал ваш советник на m30 (на m1 не анализировал, так как слишком маленький TP- и мой брокер не разрешает открытие сделки) в 1-м режиме - "каждый тик на основе реальных тиков" и во 2-м режиме - "все тики" (это необходимо, так как МТ5 в 1-м режиме находит скачки цены, котрых нет в РЕАЛЬНОСТИ, и за счет этого дает очень положительную прибыльность тестирования!!! - что неверно в реальности). К сожалению, во 2-м режиме стратегиии "все тики" после оптимизации не дала ни 1го положительного результата, либо результаты положительные, но очень очень слабые (а в 1-м режиме наоборот!! результаты сумасшедшие - если включить увеличение ЛОТА балансового баланса, получилось за 3 года 3000% с просадкой по балансу 1% ...). Анализировал 3 актива (акции, не фьючерсы!). ГАЗП, ВТБР, АФЛТ


ps Изучив ваш метод определения ликвидности ЗОН (к сожалению, немного написано об этом в статье), считаю, что тестирование в 2м режиме не должно влиять на определение вашего МЕТОДОМ зоны ликвидности.

С уважением, Александр.


Hallo, Benjamin. Ich habe deinen EA auf m30 optimiert (ich habe ihn nicht auf m1 analysiert, weil der TP zu klein war und mein Broker keine Trades zulässt). Es verwendet Modus 1 - "jeder Tick basierend auf realen Ticks" und Modus 2 - "jeder Tick" (dies ist notwendig, weil MT5 in Modus 1 findet Preis Spikes, die nicht in der Realität existieren, was in sehr positiven Test Rentabilität!!! - was im wirklichen Leben nicht der Fall ist). Leider hat die "every tick"-Strategie im Modus 2 nach der Optimierung kein einziges positives Ergebnis geliefert, oder die positiven Ergebnisse waren sehr, sehr schwach (und im Modus 1 war es das Gegenteil!!! Die Ergebnisse waren unglaublich - wenn man den Anstieg des Saldos LOT mit einbezieht, betrug das Ergebnis 3000% über 3 Jahre bei einem Saldoabzug von 1%...). Ich habe 3 Vermögenswerte analysiert (Aktien, keine Futures!). GAZP, VTBR, AFLT


ps. Nachdem ich Ihre Methode zur Bestimmung der Liquidität der Zonen studiert habe (leider wird darüber in dem Artikel wenig geschrieben), glaube ich, dass das Testen im zweiten Modus die Bestimmung der Liquiditätszone Ihrer METHODE nicht beeinflussen sollte.


Mit freundlichen Grüßen, Alexander.

Verfolgung der Kontodynamik: Visualisierung von Kontosaldo, Kontoeigenkapital und laufendem Gewinn/Verlust in MQL5 Verfolgung der Kontodynamik: Visualisierung von Kontosaldo, Kontoeigenkapital und laufendem Gewinn/Verlust in MQL5
Dieser Artikel zeigt, wie man einen benutzerdefinierten MT5-Indikator erstellt, der die gesamte Trade-Historie verarbeitet und den Anfangssaldo, Kontosaldo, Kontoeigenkapital und dem laufenden Gewinn/Verlust als kontinuierliche Kurven darstellt. Der Indikator wird pro Bar aktualisiert, aggregiert Positionen über Symbole hinweg und vermeidet externe Abhängigkeiten durch lokales Caching. Nutzen Sie es, um Abweichungen zwischen Kontoeigenkapital (equity) und -saldo (balance), realisierten gegenüber nicht realisierten Ergebnissen sowie den Zeitpunkt des Risikoeinsatzes zu überprüfen.
Python-MetaTrader 5 Strategie-Tester (Teil 01): Handelssimulator Python-MetaTrader 5 Strategie-Tester (Teil 01): Handelssimulator
Das MetaTrader-5-Modul für Python ermöglicht es, Trades bequem über Python in der MetaTrader-5-Anwendung zu eröffnen. Es hat jedoch einen großen Nachteil: Die im MetaTrader-5-Terminal verfügbare Funktion des Strategietesters fehlt. In dieser Artikelserie werden wir ein Framework für das Backtesting Ihrer Handelsstrategien in Python-Umgebungen aufbauen.
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.
Einführung in MQL5 (Teil 38): Beherrschung von API und WebRequest in MQL5 (XII) Einführung in MQL5 (Teil 38): Beherrschung von API und WebRequest in MQL5 (XII)
Wir erstellen eine praktische Brücke zwischen MetaTrader 5 und Binance: Wir holen 30-Minuten-Klines mit WebRequest, extrahieren OHLC/Zeitwerte aus JSON und bestätigen ein bullisches Engulfing-Muster, indem wir nur geschlossene Kerzen verwenden. Dann setzen wir die Zeichenkette für die Abfrage zusammen, berechnen die HMAC-SHA256-Signatur, fügen X-MBX-APIKEY hinzu und übermitteln authentifizierte Orders. Sie erhalten einen klaren, durchgängigen EA-Workflow von der Datenerfassung bis zur Orderausführung.